
KB, National Library of the Netherlands (linked data)
On data.bibliotheken.nl the KB publishes its catalogues as linked data under CC0: the Dutch national bibliography NBT (4,911,178 books), the Short Title Catalogue Netherlands (STCN, 225,218 titles printed before 1801, with 651,395 copies), the Dutch author name thesaurus (2,816,677 persons), the Brinkman subject headings and DBNL titles and authors. Together 258,524,625 statements, queryable with SPARQL (as of 16 October 2026).

Everything that's in it25
What the KB offers on data.bibliotheken.nl: the described datasets (NBT, STCN, thesauri) with the number of statements in their graph, and the graphs without a description of their own. Fetched every night.
KB-data (Production)24
Printed titles from the Low Countries per year (STCN, KB): 1,364 titles in 1800, 49 times as much as in 1540
Printed titles from the Low Countries per year (STCN, KB), 1540 – 1800, in titles. The highest point was 1795 (2,195).
What can you do with it?4 ideas
The disaster year in print
The STCN lists 1,485 titles from 1672, against 808 in 1671 and 903 in 1673. 1787 (2,021) and 1795 (2,195) also stand out. Find out which pamphlets they were.
Who wrote it?
The author thesaurus (NTA) gives each person a persistent identifier, often with date of birth, occupation and links to other registers (schema:sameAs). Useful to tell namesakes apart in a fact check.
Printers and their cities
The STCN describes each title's publication: printer (schema:publisher) and a line such as 'Amsterdam, J. Allart, 1781'. Extract the city, count per century and compare Amsterdam, Leiden and The Hague.
Language of the books
Each NBT title has a schema:inLanguage. See how the share of English-language titles develops, with the caveat from the limitations.
How to process it4 steps
A first count
Each collection is its own graph (nbt, stcn-titles, nta, brinkman …). A GET with ?query= works; ask for CSV with the header Accept: text/csv or JSON with application/sparql-results+json.
https://data.bibliotheken.nl/sparql?query=SELECT%20%28COUNT%28%2A%29%20AS%20%3Fn%29%20WHERE%20%7B%20GRAPH%20%3Chttp%3A%2F%2Fdata.bibliotheken.nl%2Fnbt%3E%20%7B%20%3Fs%20a%20%3Chttp%3A%2F%2Fschema.org%2FBook%3E%20%7D%20%7D
Titles from one year (STCN)
The year of publication sits in an intermediate node, schema:publication/schema:startDate. Uncertain years appear as 16XX or 179X.
https://data.bibliotheken.nl/sparql?query=SELECT%20%3Ftitel%20%3Fnaam%20WHERE%20%7B%20GRAPH%20%3Chttp%3A%2F%2Fdata.bibliotheken.nl%2Fstcn-titles%3E%20%7B%20%3Ftitel%20%3Chttp%3A%2F%2Fschema.org%2Fname%3E%20%3Fnaam%20%3B%20%3Chttp%3A%2F%2Fschema.org%2Fpublication%3E%2F%3Chttp%3A%2F%2Fschema.org%2FstartDate%3E%20%221672%22%20%7D%20%7D%20LIMIT%2010
Books per year (NBT)
In the NBT the year is in http://purl.org/dc/terms#issued, with a hash instead of a slash. The usual dcterms:issued finds nothing.
https://data.bibliotheken.nl/sparql?query=SELECT%20%3Fjaar%20%28COUNT%28%3Fs%29%20AS%20%3Fn%29%20WHERE%20%7B%20GRAPH%20%3Chttp%3A%2F%2Fdata.bibliotheken.nl%2Fnbt%3E%20%7B%20%3Fs%20a%20%3Chttp%3A%2F%2Fschema.org%2FBook%3E%20%3B%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%23issued%3E%20%3Fjaar%20%7D%20FILTER%28STR%28%3Fjaar%29%20%3E%3D%20%222015%22%20%26%26%20STR%28%3Fjaar%29%20%3C%3D%20%222025%22%29%20%7D%20GROUP%20BY%20%3Fjaar%20ORDER%20BY%20%3Fjaar
Take it easy
robots.txt asks for 2 seconds between requests. Count and group on the server (COUNT, GROUP BY) instead of pulling millions of rows. The portal also has example queries and the data model.
https://data.bibliotheken.nl/KB/Production
Interesting combinations


What did pamphlets and government say in the same year?
Put the STCN titles from 1672 or 1795 next to the States General records from those years in the National Archives finding aids.


Who made prints and who printed books?
Many printers and publishers in the STCN also made or sold prints. Search their name as creator in the Rijksmuseum API.
Similar sources
- DDelpher not in the index yet
Also from the KB, but the digitised texts themselves (newspapers, books, magazines) rather than the catalogue data.
Rijksmuseum collectionMuseum objects instead of printed titles; also linked data and keyless.
- Europeana
European collections with digitised books and newspapers, but with an API key.
What to watch out for
- Not a measure of book production
The NBT counts 67,175 titles for 2014, 23,339 for 2024 and 32,578 for 2025. Whether that reflects fewer books or cataloguing and deposit practice is not stated. Do not use the counts as a straight measure of what is published.
- Not every collection is equally fresh
Last modified according to the dataset descriptions (16 Oct 2026): authors (NTA) 17 September 2026, NBT 1 June 2026, STCN 23 February 2026, GTT October 2021 (in use until 2012).
- Years are text
Besides 1990 there are values such as 199X, 19XX and 2015-2016. Filter on four digits when counting per year, and say how many you left out.
- Titles and copies mixed
The stcn-titles graph holds both titles and copies (with schema:exampleOfWork). Count titles through schema:publication, or you count a book several times.
APISPARQL 1.1 (TriplyDB, Virtuoso) · read 16 Oct 2026
No key or account needed tested
statements in 21 graphs (TriplyDB, last update 25 Sep 2026) tested
jsonsparql-results+jsoncsvtsvturtlen-triples
Base URL
https://data.bibliotheken.nl/sparql
Endpoints 5
- GET
/sparql?query=…SPARQL query in the URL. Without an Accept header or with application/json: a flat JSON list of rows; with application/sparql-results+json the standard format; text/csv a table. - POST
/sparqlThe same query as form field query= (handy for long queries). - GET
https://api.bibliotheken.nl/datasets/KB/Production/services/Production-VTS/sparqlThe Virtuoso endpoint itself, which /sparql points to. - GET
http://data.bibliotheken.nl/id/nbt/{ppn}Linked data: requesting a URI with Accept: text/turtle returns all triples about that title (via /describe?resource=). - GET
/_api/datasets/KB/ProductionDataset metadata (statements, graphCount, lastGraphsUpdateTime, licence).
Filtering tested
SPARQL 1.1: GRAPH to pick a collection, FILTER, VALUES, GROUP BY and COUNT to count on the server. Prefixes schema: = http://schema.org/ (http, not https), kb: = http://data.bibliotheken.nl/def#.
Parameters 6
query | The SPARQL query (GET in the URL or POST as form field). | tested |
Accept | application/sparql-results+json, application/json (flat list), text/csv, text/turtle (for CONSTRUCT/DESCRIBE and URIs). | tested |
GRAPH <http://data.bibliotheken.nl/nbt> | Dutch national bibliography NBT: 4.9 million books (schema:Book), 194.8 million triples. | tested |
GRAPH <http://data.bibliotheken.nl/stcn-titles> | STCN: 225,218 titles before 1801 plus copies, 13.5 million triples. Also stcn-persons and stcn-printers. | tested |
GRAPH <http://data.bibliotheken.nl/nta> | Dutch author name thesaurus: 2.8 million persons, 41.8 million triples. | tested |
andere grafen | corporaties, dbnla and dbnlt (DBNL authors and titles), gtt, kbcode, brinkman, rise-alba, rise-centsprenten, datasetbeschrijvingen, and per graph an *-invalidated one with withdrawn records. | tested |
Predicates in the graphs (selection) 14
| Name | Type | Meaning |
|---|---|---|
schema:name | tekst | Titel (NBT, STCN) of naam (NTA) |
http://purl.org/dc/terms#issued | tekst | NBT: jaar van verschijnen, met een hekje (#) in de URI; dcterms:issued met / vindt niets |
schema:publication / schema:startDate | tekst | STCN: jaar in een tussenknoop; onzeker als 16XX of 179X |
schema:publication / sem:hasEarliestBeginTimeStamp, sem:hasLatestEndTimeStamp | gYear | STCN: vroegste en laatste jaar, ook bij onzekere jaren (16XX = 1600 tot 1699) |
schema:publication / schema:publisher, schema:location | uri | STCN: drukker of uitgever en plaats |
schema:author / schema:contributor | uri | Auteur en medewerkers (NTA-URI's) |
schema:inLanguage | tekst | Taal van de titel |
schema:isbn | tekst | ISBN (NBT, 1,7 mln titels) |
schema:about | uri | Onderwerp (Brinkman, GTT) |
schema:numberOfPages / schema:bookEdition / schema:bookFormat | tekst | NBT: omvang, druk en vorm |
kb:ppn | tekst | NTA: PPN, de KB-identifier |
schema:birthDate / schema:deathDate / schema:hasOccupation | tekst | NTA: levensdata en beroep |
Show all 14
| Name | Type | Meaning |
|---|---|---|
schema:sameAs / owl:sameAs | uri | Koppelingen naar VIAF, ISNI, Wikidata en andere registers |
schema:exampleOfWork | uri | STCN: een exemplaar verwijst naar zijn titel |
Limits and pitfalls
- robots.txt asks for Crawl-delay 2: wait 2 seconds between queries. tested
- Count and group on the server: a GROUP BY over all 4.9 million NBT books took 4 seconds, a count per graph over all 258 million triples under 1 second (probably from a cache). tested
- In the NBT the year is http://purl.org/dc/terms#issued (with a hash). Using the usual dcterms: prefix returns zero results without an error. tested
- stcn-titles holds both titles and copies. Count titles via schema:publication and with COUNT(DISTINCT). The result depends on the counting method: with DISTINCT 1672 gave 1,499 titles. tested
- Almost all schema.org predicates use http://schema.org/ (http). Exception: the image in stcn-titles is https://schema.org/image. Check the prefix with a count per predicate. tested
- Each graph has an *-invalidated counterpart with withdrawn records (nbt-invalidated, nta-invalidated …). Leave those out if you want current counts. tested
Try it HTTP 200 · 402 ms · 16 Oct
https://data.bibliotheken.nl/sparql?query=SELECT %3Fjaar (COUNT(DISTINCT %3Ft) AS %3Ftitels) WHERE { GRAPH <http%3A%2F%2Fdata.bibliotheken.nl%2Fstcn-titles> { %3Ft <http%3A%2F%2Fschema.org%2Fpublication>%2F<http%3A%2F%2Fschema.org%2FstartDate> %3Fjaar } VALUES %3Fjaar { "1671" "1672" "1673" } } GROUP BY %3Fjaar ORDER BY %3Fjaar
[
{
"jaar": "1671",
"titels": "823"
},
{
"jaar": "1672",
"titels": "1499"
}
]Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from The KB's TriplyDB portal: graphs, example queries, data model · Dataset description as JSON: licence, number of statements and graphs, last update · The SPARQL service behind the portal (Virtuoso, Production-VTS). Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl -H "Accept: text/csv" --data-urlencode 'query=SELECT (COUNT(*) AS ?n) WHERE { GRAPH <http://data.bibliotheken.nl/nbt> { ?s a <http://schema.org/Book> } }' https://data.bibliotheken.nl/sparqlMore from KB in our index
47 datasets in KB linked data, NDE Datasetregister, data.overheid.nl, Open Archieven. These changed most recently.
- merian2026-10-16
- http://data.bibliotheken.nl/datasetbeschrijvingen2026-09-25
- Personen uit de Nederlandse Thesaurus van Auteursnamen (NTA)2026-09-17
- http://data.bibliotheken.nl/nta-invalidated2026-09-17
- Personen uit de Nederlandse Thesaurus van Auteursnamen (NTA)2026-09-17
- Organisaties uit de Corporatiethesaurus van de Koninklijke Bibliotheek2026-07-03
More in this topic
See how this page is built
bron: kb-linked-data
blokken: []
secties:
- ideeen
- verwerken
- koppelingen
- vergelijkbaar
- beperkingen
- code
cache:
tag: bron:kb-linked-data
ververs: na statuscheck, als de bron nieuwer is
statuscheck:
methode: "TriplyDB-API van het portaal: lastGraphsUpdateTime en het aantal
statements van de dataset KB/Production"
verwacht: elk kwartaal
Source: content/bronnen/kb-linked-data.yaml · Markdown


