Textbook-Filter?

Hi,
gibt es in Thoth eigentlich einen Textbook Filter, dann könnten wir euch vielleicht für den oersi Anzapfen und „nur“ die Lehrbücher/Textbooks harvesten.

TU Delft Books hatte uns gerade berichtet, dass sie bei euch ihre Metadaten bereitstellt und dass dort auf Textbook gefiltert werden kann.

@flavoursofopen kannst du helfen?

Grüße
Tobias

1 Like

Moin Tobias, oh, ja, selbstverständlich! (und nebenbei: von Tobias zu Tobias, wunderbar :hugs:)

Zu Deiner Frage: Wir haben verschiedene Möglichkeiten, die aktuell im System befindlichen Textbooks auszuspielen, so kannst Du dir beispielsweise im Thoth-Hauptkatalog über den „Book Type“-Filter (linke Spalte) alle Textbooks von allen Verlagen anzeigen lassen.

Alternativ ginge dies entweder auch direkt über den GraphQL-API Explorer, oder - sofern du die Ausgabe direkt in einem spezifischen Export-Format (ONIX, MARC, etc) geliefert haben möchtest - über unsere Export-API.

Lass mich gerne wissen, falls ihr ein modifiziertes Database Query-Beispiel haben möchtet, um nach Work Type „Textbooks“ zu filtern, dann frage ich morgen bei unseren Entwicklern nach, ob sie helfen können (ich bin leider selbst eher Anfänger bei der Arbeit mit der Datenbank). Für versierte Datenexpert*innen gibt es aber natürlich auch die integrierte GraphQL-Dokumentation (linke Spalte, „Docs“ ganz oben links im Hauptfenster des GraphQL-Explorers), mit der sonst auch gerne mit eigenen Queries experimentiert werden kann.

Und zu TU Delft Books - ja, wir sind gerade mit Delft und fünf weiteren niederländischen Univerlagen im Austausch, um einen gemeinsamen konsortialen Katalog für das Netherlands University Presses-Konsortium aufzubauen (dazu auch die just heute erschienene Pressemitteilung).
Die Daten von TU Delft fehlen uns aktuell noch, wir sind aber dran - und eine erste sehr frühe Betaversion des gemeinsamen Katalogs (übrigens auch über Strapi realisiert) ist unter https://nups.thoth.pub zu finden.

2 Likes

Das sieht schonmal super aus.

Eine JSON API ist fein, solange ich eure Daten auf Textbook gefiltert, recht umfassend in JSON bekomme und diese dann in unser internes Format transformatieren kann: GitHub - dini-ag-kim/amb: A LRMI-/schema.org-based profile for describing educational resources

1 Like

Ich denke, das sollte auf jeden Fall machbar sein! Willst Du selbst ein wenig mit der GraphQL API experimentieren, oder soll ich einmal bei unseren Devs nachfragen bzgl. textbook-spezifischer Query?

Ich kenne mich mit graphQL nicht aus, kann man die API auch per HTTP-Requests abfragen?

ja - aktuell sind HTTP requests die einzige Möglichkeit, queries zu übermitteln :slight_smile:

Als Beispiel, die “default-Abfrage in graphiql schickt eigentlich einen POST request to https://api.thoth.pub/graphql , mit dem folgenden HTTP body:

{"query":"# Welcome to Thoth's GraphQL API explorer (GraphiQL).\n#\n# GraphiQL is an in-browser tool for writing, validating, and\n# testing GraphQL queries.\n#\n# Type queries into this side of the screen, and you will see\n# intelligent typeaheads aware of the current GraphQL type\n# schema and live syntax and validation errors highlighted\n# within the text.\n#\n# Click on the QueryRoot in the Documentation Explorer\n# (first icon) on the top left of the screen to navigate\n# the API schema.\n#\n# GraphQL queries typically start with a \"{\" character.\n# Lines that starts with a \"#\" are ignored.\n#\n# Run the following example Thoth GraphQL query:\n#\n# Run Query: Ctrl-Enter (or press the play button above)\n#\n{\n books(order: {field: PUBLICATION_DATE, direction: ASC}) {\n fullTitle\n doi\n publications {\n publicationType\n isbn\n }\n contributions {\n contributionType\n fullName\n }\n }\n}\n","variables":{"publishers":["85fd969a-a16c-480b-b641-cb9adf979c3b"]}}

1 Like

Kannst du mir ein Beispiel für eine etwas elaboriertere Abfrage schicken? Dann könnte ich versuchen das nachzubauen.

Kannst du auch sagen, auf wie viele Datensätze eine Antwort beschränkt ist?

Okay, das folgende Beispiel zeigt Dir alle Textbooks des Verlags Open Book Publishers (mit weiteren Erläuterungen unseres Devs Brendan O’Connell):

{ "query": "query GetTextbooks($publishers: [Uuid!]) { works(workTypes: TEXTBOOK, publishers: $publishers) { fullTitle doi } }", "variables": { "publishers": ["85fd969a-a16c-480b-b641-cb9adf979c3b"] }

to test out seeing the output of this from a POST request, they could run this in any command line application (e.g. Terminal on Mac):

curl -X POST https://api.thoth.pub/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "query GetTextbooks($publishers: [Uuid!]) { works(workTypes: TEXTBOOK, publishers: $publishers) { fullTitle doi } }", "variables": { "publishers": ["85fd969a-a16c-480b-b641-cb9adf979c3b"] } }’

this is the equivalent of the below query using the GraphiQL Explorer on our website (https://api.thoth.pub/graphiql):

query GetTextbooks($publishers: [Uuid!]) { works(workTypes: TEXTBOOK, publishers: $publishers) { fullTitle doi } }

Variables: { "publishers": ["85fd969a-a16c-480b-b641-cb9adf979c3b"] }

Zur Limitierung: aktuell haben wir kein Limit, werden aber in naher Zukunft eines einführen, um übermäßige Nutzung der API im Rahmen zu halten. Die Query wirft standarmäßig bis zu 100 Ergebnisse aus, dies kan über einen Parameter erweitert werden:

modified query below with limit: 99999 added to capture all results if there are more than 100:

curl -X POST https://api.thoth.pub/graphql \ -H "Content-Type: application/json" \ -d '{ "query": "query GetTextbooks($publishers: [Uuid!]) { works(workTypes: TEXTBOOK, publishers: $publishers, limit: 99999) { fullTitle doi } }", "variables": { "publishers": ["85fd969a-a16c-480b-b641-cb9adf979c3b"] } }'

1 Like

Vielen Dank, damit kann ich arbeiten!

1 Like

Ich habe jetzt eine ganze Reihe an Feldern schonmal bestimmt, die ich einsammeln will.


  books(order: {field: PUBLICATION_DATE, direction: ASC}, limit: 10) {
    landingPage
    workId
    fullTitle
    doi
    publications {
      publicationType
      isbn
    }
    contributions {
      contributor {
        orcid
      }
      contributionType
      fullName
      affiliations {
        institution {
          institutionName
          institutionId
          ror
        }
      }
    }
    longAbstract
    workType
    workStatus
    license
    publicationDate
    languages {
      languageCode
      languageRelation
      mainLanguage
    }
    publications {
      publicationType
      isbn
      locations {
        fullTextUrl
        landingPage
      }
    }
    subjects {
      subjectCode
      subjectId
    }
    imprint {
      imprintName
      imprintUrl
      publisher {
        publisherName
        publisherUrl
      }
    }
    coverUrl
  }
}

Wenn ich das Ergebnis jetzt auf Textbooks einschränken will, kann ich aber nicht einfach:

workTypes: TEXTBOOK

ergänzen, weder in der runden Klammer nach books noch an der Stelle der definierten Felder bei workTypes

@TobiasNx und ich haben gerade zusammen ein wenig rumprobiert und das hier sieht vielversprechend aus als Abfrage der GraphQL-API:

query 
GetTextbooks { works(workTypes: TEXTBOOK, limit: 99999)  {
 		landingPage
    workId
    fullTitle
    doi
    publications {
      publicationType
      isbn
    }
    contributions {
      contributor {
        orcid
      }
      contributionType
      fullName
      affiliations {
        institution {
          institutionName
          institutionId
          ror
        }
      }
    }
    longAbstract
    workType
    workStatus
    license
    publicationDate
    languages {
      languageCode
      languageRelation
      mainLanguage
    }
    publications {
      publicationType
      isbn
      locations {
        fullTextUrl
        landingPage
      }
    }
    subjects {
      subjectCode
      subjectId
    }
    imprint {
      imprintName
      imprintUrl
      publisher {
        publisherName
        publisherUrl
      }
    }
    coverUrl
  }
} 
1 Like

Hallo ihr beiden, und @TobiasNx entschuldige bitte meine Funkstille, ich bin aktuell urlaubsbedingt nur sehr wenig in Reichweite meines Laptops :wink:

Zur o.g. query, ja, das sieht in der Tat vielversprechend aus - und wirft alle Textbooks aus, die aktuell insgesamt in Thoth vorhanden sind.

Tobias, Du hattest initial ja nach Textbooks von TU Delft gefragt - wenn ihr also die o.g. query limitiert auf die spezifische publisherIDvon TUD, sollte das ja alles liefern, was ihr benötigt, oder?

Die spezifischen IDs aller publisher lassen sich auch über GraphQL ausgeben, alternativ könnt ihr diese auch mittels Mouse-Over über die einzelnen Vollkatalog-Exports der Verlage in der Thoth-Publisher-Übersicht auslesen :grinning_face: Publishers | Thoth

Lasst mich/uns gerne wissen, falls ihr noch weitere Spezifika auslesen möchtet!

2 Likes

Der OERSI hat jetzt die Textbooks aus Thoth indexiert und aktualisiert jede Nacht die Indexierung:

1 Like

Was verbessert werde könnten ist die fachliche Zuordnung. Die kann man aber bei Thoth nicht so gut zuordnen, da nur freie Verschlagwortung existiert.

Wow, das sieht großartig aus! Vielen Dank für Eure Arbeit!

Zur Verschlagwortung - prinzipiell unterstützen wir auch kontrollierte Vokabulare (mit Vorliebe Thema, aber auch BISAC wird genutzt) … muss aber von den Verlagen noch implementiert werden.

Insbesondere bei den Textbooks von TU Delft kommen aus OMP nur freie Schlagworte - hier wäre aber eine weiterführende Verbesserung durchaus machbar, das System kann das :slight_smile: (müsste aber durch den Verlag geschehen)

EDIT: Als Beispiel dieses Textbook des in Thoth gelisteten Verlags Open Book Publishers: Open Educational Resources Search Index - dort sind auch Thema-, BIC-, and BISAC-Codes zur thematischen Klassifikation hinterlegt (siehe der gleiche Titel mit Thoth-Daten auf der Verlagswebsite → No Prices No Games!: Four Economic Models | Open Book Publishers )