SPARQL Endpunkt der Deutschen Nationalbibliothek

:tada: Seit heute ist der SPARQL Endpunkt der DNB https://sparql.dnb.de öffentlich zugänglich. :tada:

Der DNB SPARQL Service ist eine Retrievalschnittstelle des Linked-Data-Service der Deutschen Nationalbibliothek ermöglicht, DNB-Titeldaten (Deutsche Nationalbibliografie) und GND-Normdaten (Gemeinsame Normdatei) im Format RDF zu recherchieren. Wir möchten damit eine Möglichkeit bieten, diese Daten auf eine semantische Art zu erkunden, die mit einer einfachen, textbasierten Suche nicht möglich ist.

Der Service besteht aus einer Weboberfläche und aktuell zwei APIs (maschinelle Endpunkte).

Der DNB SPARQL Service wird betrieben mit der Open-Source-Software Qlever SPARQL Engine, die am Fachbereich Informatik an der Albert-Ludwigs-Universität Freiburg (im Breisgau) entwickelt wird. Die Engine verfügt über eine QLever-Benutzeroberfläche, die das Schreiben von SPARQL-Abfragen vereinfacht.

Hinweis: Der Dienst befindet sich zurzeit in einer öffentlichen BETA-Phase, in der es noch zu Unterbrechungen und Ausfällen kommen kann. :construction:

Beispielabfrage „Titel von Philosoph*innen über „KI“ seit 2010“ (weitere Beispielabfragen befinden sich auf der Weboberfläche unter „Examples“)

9 Likes

Herzlichen Glückwunsch zum Launch, @Tracy_Arndt ! Die Beispiel-Query hat direkt mein Interesse geweckt. Habe sie mal etwas angepasst, damit direkt der Autor:innenname erkennbar ist, und es hat funktioniert, yay: DNB SPARQL Service - BETA

Ich habe direkt mal diesen alten Reclam-Band aus meinem Studium rausgekramt, weil die Bücherkiste hier gerade rumsteht:

Sehr seltsam allerdings, dass Richard David Precht in der Ergebnisliste so häufig vertreten ist, wobei doch eigentlich nur Titel von Philosoph:innen abgefragt werden…

3 Likes

Sehr gut. Falls dir/euch etwas auffällt oder unklar erscheint lasst es mich wissen.

(Wie die Berufszuordnungen in der GND Zustande kommen entzieht sich meiner Kenntnis :wink: )

1 Like

@awinkler hat ein paar gute Abfragen im Fediverse gepostet, die durch den SPARQL Endpoint deutlich erleichtert werden.

Quelle: https://openbiblio.social/@awinkler/115340812915945141

und:

Wie viele Expressionen (?) sind je einem Werk zugeordnet? Aktuell haben etwas über 36.000 Werke (bibo:Document) Expressionen verknüpft.

sparql.dnb.de/dnbgnd/BP7ces
Quelle

Ergänzend die Übersicht der erstellenden Institutionen in Bezug auf sämtliche GND-Einträge:

PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX wdrs: <http://www.w3.org/2007/05/powder-s#>

SELECT ?record_creator (COUNT(DISTINCT ?record) as ?count_record)   WHERE {
?entry wdrs:describedby ?record .
?record dcterms:creator ?record_creator .
  
} GROUP BY ?record_creator ORDER BY DESC(?count_record)

https://sparql.dnb.de/BPkNMF

Blogbeitrag zum SPARQL Endpunkt: Maschinelles Ernten - Cherry Picking in der GND

1 Like

Danke nochmal für den SPARQL-Endpunkt, den @petra_maier und ich direkt gerne anstatt des Wikidata-SPARQL-Endpoints nutzen, um Verwendungsbeispiele von SPARQL im MALIS-Studiengang an der TH Köln vorzustellen. Ich habe deshalb mal ein bisschen mehr mit Queries herumgespielt.

Ich würde z.B. gerne eine Query nach Instanzen des Entitätentyp gndo:PlaceOrGeographicName oder einer seiner Unterklassen mache. Es scheint aber, dass dies momentan nicht möglich ist, weil die GND-Ontologie offenbar selbst nicht Teil des abfragbaren Graphen ist.

Diese zwei Queries würden dann ja eigentlich etwas zurückgeben:

PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?label WHERE {
  ?class a rdfs:Class ;
  rdfs:label ?label .
}

LIMIT 10

oder

PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?class WHERE {
  ?class rdfs:subClassOf gndo:PlaceOrGeographicName .
}

LIMIT 10

Könnt ihr die GNDO noch mit indexieren, @Tracy_Arndt ?

Hi Adrian,
das ist witzig, weil ich genau darauf auch am Freitag gestoßen bin :grin:
Ja, klar mach ich das noch. Vielleicht schaffe ich es morgen…

1 Like

Ach ich habe die Anpassung direkt vorgenommen :wink:
Ist jetzt drin und die Queries funktionieren jetzt in beiden Endpunkten.

2 Likes

Kann man auch so elegant wie bei Wikidata nach Instanzen einer Klasse inklusive Unterklassen abfragen? Ich hab das jetzt erstmal eher umständlich gemacht:

# Die meistverschlagworteten GND-Einträge vom Typ
# gndo:PlaceOrGeographicName oder einer seiner Unterklassen.

PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?subject ?subjectLabel (COUNT(?work) AS ?Anzahl) WHERE {
  VALUES ?type { gndo:PlaceOrGeographicName } 
  ?subType rdfs:subClassOf ?type .
 { ?subject a ?type . }
 UNION
 { ?subject a ?subType . }
  ?work dct:subject ?subject .
  ?subject gndo:preferredNameForThePlaceOrGeographicName ?subjectLabel .
}
GROUP BY ?subject ?subjectLabel
ORDER BY DESC(?Anzahl)

Try it!

Hier sieht man die Klassen gut:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX dcterms: <http://purl.org/dc/terms/>

SELECT ?subject ?type  ?subjectLabel
WHERE {
  ?work dcterms:subject ?subject .
  ?type rdfs:subClassOf* gndo:PlaceOrGeographicName .
  ?subject a ?type ;
            gndo:preferredNameForThePlaceOrGeographicName ?subjectLabel .
} 

und hier deine Query umgebaut

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX gndo: <https://d-nb.info/standards/elementset/gnd#>
PREFIX dcterms: <http://purl.org/dc/terms/>


SELECT ?subject ?subjectLabel (COUNT(?work) AS ?Anzahl)
WHERE {
  ?work dcterms:subject ?subject .
  ?type rdfs:subClassOf* gndo:PlaceOrGeographicName .
  ?subject a ?type ;
            gndo:preferredNameForThePlaceOrGeographicName ?subjectLabel .
} 
GROUP BY ?subject ?subjectLabel
ORDER BY DESC(?Anzahl)
1 Like

Cool, danke! Mit der indexierten GND-Ontologie lässt sich ja nun auch das Problem der vielen verschiedenen preferredName-Properties leicht angehen.

Hier ein paar Abfragen, die ich zusammengebastelt habe:

Ich habe versucht, die Queries möglichst leicht anpassbar zu machen durch einen Austausch der VALUES-Angaben am Anfang des SELECT-Statements. Falls ich irgendwo einen Denkfehler gemacht habe, freue ich mich über Hinweise.

1 Like

Für den GND Endpunkt sind jetzt die Suggestions/Vorschläge beim Tippen eingerichtet. Ich hoffe, das erleichtert zukünftig einige Abfragen, auch wenn man das Datenmodell nicht kennt. Tippt mal los :wink:

(Für den Endpunkt mit den Titeldaten + GND richte ich das auch noch ein)

1 Like