Dataset:  Titels van boeken en meer

Dataset: Titels van boeken en meer

Wie & Wat

In Nederland wordt er door alle samenwerkende bibliotheken en de Koninklijke Bibliotheek een catalogus bijgehouden van titels van boeken, e-books maar ook ‘software’. Deze catalogus is beschikbaar als open data en biedt inzicht in wat je kan lenen of inzien bij de Bibliotheek! Maar je kan er natuurlijk ook andere dingen mee doen. De Nationale Bibliotheek Catalogus is een database die gevuld wordt wanneer er een nieuwe Nederlandse publicatie (of werk) is, of er een nieuwe vertaling is.

Een deel van deze catalogus (namelijk alles wat in Nederland of over Nederland gepubliceerd is) wordt door de Koninklijke Bibliotheek aangeboden als de Nederlandse Bibliografie Totaal, en bevat dan naast de titels ook diverse metadata via gekoppelde thesauri. Van boeken, Software CD’s en e-books kan je diverse informatie opvragen. Zo kent deze dataset auteursgegevens, bevat het informatie over uitgevers, de druk, de eerste uitgave en het aantal pagina’s.

 

Mogelijke toepassingen

Naast dat je een bibliotheek catalogus zoeksysteem kan maken zoals bibliotheek.nl of een alternatieve versie,  zijn er natuurlijk ook andere toepassingen te bedenken. Bijvoorbeeld een App die inzichtelijk maakt welke nieuwe boeken gepubliceerd worden. Of een dashboard dat inzichtelijk maakt welke boeken in Nederland beschikbaar zijn en hoe dit verandert over tijd. Welke onderwerpen veranderen over tijd,  wat is de invloed van de tweede oorlog geweest op de boekproductie?

 

Hoe te gebruiken

Al deze ‘boeken’ -data is via SPARQL op data.bibliotheken.nl (link) beschikbaar. Hieronder een aantal voorbeelden van wat je met zo’n SPARQL endpoint kan doen. Voor een introductie in SPARQL, zie onze datablog hierover.

 

1. Basislijst van Boeken met eventuele titels en auteur  (3,5 miljoen boeken ) (link , CSV, JSON):

prefix schema: <http://schema.org/>
 prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 SELECT * WHERE {
 ?id rdf:type schema:Book .
 OPTIONAL { ?id schema:author ?author .}
 OPTIONAL { ?id schema:name ?title . }
 } LIMIT 100000 OFFSET 0

Met OFFSET kan je meer resultaten ophalen. Naast boeken kan je E-books ophalen door de regel “$id rdf:type schema:Book .” te vervangen door “$id rdf:type schema:EBook”. Voor software verander je dit in  “$id rdf:type schema:SoftwareApplication”.

Merk op dat je hier als identifier een link terug krijgt eindigend op …/id/nbt/p117801798. Bij de praktijk introductie SPARQL kwamen we eerder ook links tegen eindigend op …/doc/nbt/p117801798. De uri met  /doc/nbt verwijst naar de resource, terwijl /id/nbt  verwijst naar de representatie (het digitale object met de velden) van de resource. De uri’s met /doc/nbt  bevat geen velden behalve het owl-sameAs veld dat linkt naar /id/nbt.

 

2. Op basis van een hele dataset, waarbij we via /doc/nbt uri’s uiteindelijk de eigenschappen van /id/nbt opvragen (link)

SELECT ?oo ?pp ?ooo WHERE {

?docnbt <http://rdfs.org/ns/void#inDataset> <http://data.bibliotheken.nl/id/dataset/nbt> .
?s <http://www.w3.org/2002/07/owl#sameAs> ?docnbt .
?s <http://xmlns.com/foaf/0.1/primaryTopic> ?oo .
?oo ?pp ?ooo

} limit 100000

of op basis van een graaf (link):

SELECT ?s ?p ?o
WHERE {
 GRAPH <http://data.bibliotheken.nl/nbt-schema/> { ?s ?p ?o }
} LIMIT 100000

Het verschil is dat enkel de graaf geen data uit andere ‘meta’-datasets over deze data ‘meeneemt’ , terwijl vanuit de dataset alle relaties in het gehele systeem worden opgevraagd. Een andere manier om dit te realiseren is via de URL de parameter default-graph-uri in te vullen. Je krijgt dan iets als:

http://data.bibliotheken.nl/sparql?default-graph-uri=http%3A%2F%2Fdata.bibliotheken.nl%2Fnbt-schema%2F&query=SELECT+*+WHERE+%7B%0D%0A%0D%0A%24s+%24p+%24o%0D%0A%0D%0A%7D+limit+10

Met een graph statement in de query zou je wel , in tegenstelling tot in de URL, over meerdere graphs vragen kunnen stellen, en het antwoord combineren. Het gebruik van de default-graph uri in in de URL is vooral nuttig om makkelijk het gewenste antwoord te beperken tot de relevante graaf.

 

3. Op basis van delen van de titel zoeken. Met een FILTER instructie kan je een reguliere expressie uitvoeren op een variabele (link).

prefix schema: <http://schema.org/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
 ?id rdf:type schema:Book . 
 ?id schema:name ?title .
 FILTER regex(?title, "posthoornkerk") . 
} LIMIT 100

 

4. Van een enkel boek , zoals ‘Stenen voor een ransuil van Maarten ’t Hart’, kan je de data in kaart brengen (link) :

PREFIX idnbt: <http://data.bibliotheken.nl/id/nbt/>
SELECT ?p ?o WHERE {
 idnbt:p036878049 ?p ?o
} LIMIT 100

Je kan natuurlijk deze informatie ook direct opvragen als html pagina. En andere mogelijkheid is om een globaal beeld van de data te krijgen via het DESCRIBE statement (link):

prefix schema: <http://schema.org/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DESCRIBE ?book WHERE {
 ?book rdf:type schema:Book
} LIMIT 100

 

5. Een andere optie is om op basis van ISBN te zoeken.

Wellicht vind je het handiger om op basis va ISBN te zoeken. Dat kan met de volgende query (link).

prefix schema: <http://schema.org/>
 SELECT ?id WHERE {
?id schema:isbn "9789024563975"
}

Dit geeft een lijst van boeken die voldoen aan dit criteria, met het nbt/p nummer kan je vervolgens de data via de query uit 3 ophalen.

 

6. Een overzicht maken van publicaties. Bijvoorbeeld het  jaar 2016-2017 (link):

prefix schema: <http://schema.org/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
 ?id rdf:type schema:Book . 
 $id rdfs:label $title .
 $id schema:author $author .
 $id schema:publication $pub . 
 $pub schema:startDate "2016" .
} LIMIT 1000 OFFSET 0

 

Wil je meer weten over gekoppelde data, zoals auteurs, en classificaties? Zie dan binnenkort onze datablog over thesauri.

Back to site top