1.3 - URI-strategie
UITGANGSPUNTEN URI-STRATEGIE
Resources en URIs
TOOI is een kennismodel in RDF en doet uitspraken (assertions) over de wereld en het model (taal) waarmee we over die wereld spreken. Centraal
staan resources. De gemeente Haarlem is een resource, de klasse Gemeente zoals gedefinieerd in de
TOOI-ontologie is een resource, en de relatie "... ligt in de provincie ..." is ook
een resource. Deze drie resources worden aangeduid met behulp van URIs, te weten gemeente:gm0392
, tooiont:Gemeente
, en tooiont:ligtInProvincie
.
Het gebruik van http-URIs
In de context van RDF is het goed gebruik om http-URIs te gebruiken. Alle TOOI-URIs
zijn http-URIs, evenals URIs van resources die we in het kennismodel gebruiken en
die buiten TOOI zijn gedefinieerd, zoals rdfs:Class
, skos:Concept
en dcterms:language
. Het grote voordeel van http-URIs is dat de vorm van de URI iets zegt over de partij
die de URI heeft gemunt (het domeingedeelte van de URI). Een bijkomende gedachte is
dat de munter van de URI informatie over de resource verstrekt wanneer iemand (of
iets, zoals een machine) de URI gebruikt als URL in een http GET-request. Anders gezegd:
als je de URI intypt in je browser, dan krijg je informatie over de resource terug.
Dit is uiterst handig, maar er ligt ook verwarring op de loer:
- De URI staat voor de resource, niet voor de informatie die je terugkrijgt als je de URI als URL gebruikt
- Er zijn geen standaarden die bepalen of een URI ook zinvol als URL gebruikt kan worden,
en zo ja, wat de http-server dan terugstuurt. Dat kan van alles zijn. Niets is ook
goed. Bij gebruik als URL geeft
rdfs:Class
de RDFS-graaf geserialiseerd als Turtle terug, maarskos:Concept
resulteert in een documentatiepagina in html. - Sommige resources zijn resources-not-on-the-web (zoals de gemeente Haarlem), maar
er bestaan ook webresources. Juist bij deze resources is het van belang de semantiek
van de URI en de pragmatiek van de URI-gebruikt-als-URL uit elkaar te houden. De URI
<https://wetten.overheid.nl/BWBR0001886/2021-01-01>
opgevat als resource-URI verwijst naar de authentieke Auteurswet, een webresource. Als je deze URI als URL gebruikt, retourneert de webserver een representatie van deze resource. In het hoofdstuk over de modellering van Informatieobjecten gaan we specifiek in op dit onderscheid.
Met inachtneming van deze punten is nuttig en wenselijk TOOI-URIs niet alleen te munten met de bijbehorende (referentiële) semantiek, maar deze ook dereferenceable te maken. In eerste instantie zijn de TOOI-URIs dit nog niet. In een later stadium zal een resolver beschikbaar komen.
Grafen, resources, en het munten van URIs
Een centrale eenheid van informatie in een RDF-kennismodel is de graaf: een verzameling knooppunten (resources) en verbindingen (eveneens resources). Elke combinatie van een knooppunt-verbinding-knooppunt is een uitspraak, ook wel triple genoemd. Grafen kunnen resources delen en daardoor samen ook weer een graaf vormen. De elementaire grafen zijn de kleinste eenheden binnen een kennismodel. Dat zijn de eenheden van beheer en onderhoud. Binnen TOOI zijn dat dus de eerder aangeduide modules.
Elke graaf wordt geïdentificeerd met een URI — ook hier gebruiken we http-URIs. Semantisch gezien hebben grafen een aparte positie in het RDF-informatiemodel: de relatie tussen een URI en een resource is semantisch gezien een andere dan die tussen de URI van een graaf en de graaf (zie Hoofdstuk 4 van de RDF-specificatie). Het onderscheid is subtiel en niet belangrijk voor normaal gebruik van TOOI.
De URI van een graaf wordt aangeduid met de termen graphURI, baseURI en (in OWL ook wel) ontology URI. Een RDF-graaf kan geserializeerd worden in diverse formats, zoals Turtle en XML-RDF. De bestandsnaam van een serialisatie is vaak gelijk aan een onderdeel van de graphURI in combinatie met een extentie zoals .ttl of .xml-rdf.
Een resource kan genoemd worden in heel veel grafen. De URI rdf:type
komt bijvoorbeeld in vrijwel elke op het web gepubliceerde RDF-graaf voor. De graaf
waarin de resource wordt gedefinieerd en de bijbehorende URI wordt gemunt is echter
uniek. In geval van rdf:type
(uitgeschreven: <http://www.w3.org/1999/02/22-rdf-syntax-ns#type
>
) is dat de graaf met de graphURI <
http://www.w3.org/1999/02/22-rdf-syntax-ns#
>, of kortweg rdf:
. Dit illustreert meteen een veel gehanteerde conventie om de URI van de resource
te relateren aan de URI van de graaf: de graphURI is de "namespace" van de resource-URI.
In het geval van deze specifieke graphURI geldt bovendien dat deze (toevallig) dereferenceable
is: als je je graphURI intypt in een browser, dan krijg je een TTL-bestand terug (de
serialisatie van de graaf). Om de relatie tussen een resource en de graaf waarin de
resource gedefinieerd wordt expliciet te maken gebruik je de property rdfs:isDefinedBy
. Het subject is de resource, het object de graaf.
In TOOI munten we resource-URI conform de genoemde conventie. Bovendien nemen we in
de definitie van de resources die een klasse of property zijn expliciet de juiste
waarde op voor rdfs:isDefinedBy
. Deze resources worden gedefinieerd in de ontologie. Bij de definitie van andere
resources, zoals concepten en organisaties, nemen we voor deze property geen waarde
op. Deze aanpak is gebruikelijk.
Zowel bij het vaststellen van graphURIs als bij het munten van resource-URI maken we gebruik van een aantal conventies. Daarbij is goed gekeken naar naar de aanbevelingen van GOV.UK (zie [1]) en ISA (zie [2]).
[1] http://ukgovld.github.io/ukgovldwg/recommendations/uri-patterns.html
OVERZICHT URI'S EN NAMESPACES
TOOI-graphURIs, TOOI-Namespaces en conventies mbt local names van resource-URIs
TOOI-URIs zijn te herkennen aan de eigenschap dat ze met https://identifier.overheid.nl/tooi/
beginnen. Bij graphURIs wordt dit gevolgd door een typeaanduiding:
def/
— voor ontologieën en thesauriid/
— voor registersset/
— voor waardelijsten
Dit wordt op zijn beurt gevolgd door een binnen het moduletype unieke naam. Voor thesauri
wordt deze nog voorafgegaan door thes/
.
TOOI-graphURIs hebben geen trailing slash en geen trailing hash.
Voor grafen die resources definiëren en URIs munten geldt dat de graphURI gevolgd door "/" fungeert als de namespace voor deze URIs. De volgende tabel somt alle TOOI-namespaceprefixen op en benoemt de conventies die we hanteren bij het munten van local names voor resources.
Een overkoepelende conventie is dat een local name met een hoofdletter begint als de URI verwijst naar een klasse. Local names van properties en individuals beginnen met een kleine letter.
Prefix | Namespacebinding (graphURI + "/") | type | conventies mbt local names |
---|---|---|---|
tooiont: |
https://identifier.overheid.nl/tooi/def/ont/ |
ontologie | Nederlandse termen |
tooiwl: |
https://identifier.overheid.nl/tooi/def/wl/ |
ontologie | idem |
tooikern: |
https://identifier.overheid.nl/tooi/def/thes/kern/ |
thesaurus |
Concepten hebben een opake local name ( Collecties hebben een opake local name ( Conceptschema's hebben een Nederlandse term als local name, gebaseerd op het prefLabel
( |
tooixtrn: |
https://identifier.overheid.nl/tooi/def/thes/xtrn/ |
thesaurus | idem |
tooitop: |
https://identifier.overheid.nl/tooi/def/thes/top/ |
thesaurus | idem |
tooiwep: |
https://identifier.overheid.nl/tooi/def/thes/wep/ |
thesaurus | idem |
tooibwb: |
https://identifier.overheid.nl/tooi/def/thes/bwb/ |
thesaurus | idem |
col: |
https://identifier.overheid.nl/tooi/id/col/ |
register | Instanties van tooiont:Overheidsorganisatie hebben een local name gebaseerd op de tooiont:organisatiecode . Zie de beschrijving van URIs voor registerresources. (Noot: COL staat voor Caribisch Openbaar Lichaam) |
gemeente: |
https://identifier.overheid.nl/tooi/id/gemeente / |
register | idem |
ministerie: |
https://identifier.overheid.nl/tooi/id/ministerie/ |
register | idem |
oorg: |
https://identifier.overheid.nl/tooi/id/oorg/ |
register | idem (Noot: oorg staat voor overige overheidsorganisatie) |
provincie: |
https://identifier.overheid.nl/tooi/id/provincie/ |
register | idem |
so: |
https://identifier.overheid.nl/tooi/id/so/ |
register | idem (Noot: so staat voor samenwerkingsorganisatie) |
waterschap: |
https://identifier.overheid.nl/tooi/id/waterschap/ |
register | idem |
zbo: |
https://identifier.overheid.nl/tooi/id/zbo/ |
register | idem (Noot: zbo staat voor zelfstandig bestuursorgaan) |
In de lopende tekst van deze documentatie gebruiken we het namespaceprefix zonder dubbele punt maar in monospace font om te verwijzen naar de bij het namespaceprefix horende graphURI.
Dus gemeente
staat voor de graaf met graphURI <https://identifier.overheid.nl/tooi/id/gemeente>
, en tooiont
staat voor <``https://identifier.overheid.nl/tooi/def/ont
>.
TOOI-graphURIs die geen namespace definiëren
Er zijn binnen TOOI ook grafen die geen eigen prefix hebben. In deze grafen worden geen URIs gemunt. Dat zijn waardelijsten en geversioneerde afslagen van thesauri en van de ontologie. De volgende tabel toont alleen enkele voorbeelden:
graphURI | type | Omschrijving |
https://identifier.overheid.nl/tooi/def/ont_v1.0 |
ontologie | Geversioneerde afslag van tooiont , met versieaanduiding 1.0 |
https://identifier.overheid.nl/tooi/def/thes/top_v1.1 |
thesaurus | Geversioneerde afslag van tooitop , met versieaanduiding 1.1 |
https://identifier.overheid.nl/tooi/set/gemeente_peildatum/v2 |
waardelijst | Versie van de waardelijst gemeenten op peildatum, met volgnummer 2 |
https://identifier.overheid.nl/tooi/set/gemeente_compleet/v1 |
waardelijst | Versie van de waardelijst gemeenten compleet, met volgnummer 1 |
https://identifier.overheid.nl/tooi/set/toplijst/v``3 |
waardelijst | Versie van de waardelijst toplijst, met volgnummer 3 |
Overige vocabulaires gebruikt binnen TOOI
Binnen TOOI maken we veel gebruik van vocabulaires die buiten TOOI gedefinieerd zijn. Dit betreft naast de basisvocabulaires RDF, RDFS en OWL een aantal "upper ontologies" (generieke vocabulaires die breed gebruikt worden), een ontologie van de EU en authority tables (referentiedatasets) van de EU.
De volgende tabel somt alle grafen op die resourcedefinities bevatten die binnen TOOI
gebruikt worden, met bijbehorende prefix en namespacebinding (indien van toepassing),
de naam (met hyperlink) van de betreffende specificatie en een omschrijving. Net als
bij TOOI-namespaces en graphURI's gebruiken we in lopende tekst het namespaceprefix
zonder dubbele punt maar in monospace font om te verwijzen naar de bij het namespaceprefix horende graphURI.
Dus als we schrijven org:
dan bedoelen we de namespace <``http://www.w3.org/ns/org#``>
, als we org
schrijven (zonder dubbele punt) bedoelen we de graphURI <http://www.w3.org/ns/org>.
Noot: de namespacebinding en de graphURI zijn in sommige gevallen identiek, maar vaak ook niet
Prefix | Namespacebinding | GraphURI | Naam (en link naar specificatie) | Omschrijving |
dcterms: |
http://purl.org/dc/terms/ |
http://purl.org/dc/terms |
Dublin Core Metadata Terms | Generiek vocabulaire voor het beschrijven van metadata van publicaties |
euvoc: |
http://publications.europa.eu/ontology/euvoc# |
http://publications.europa.eu/ontology/euvoc |
EUVOC | Vocabulaire van de EU voor het vastleggen van EU-referentiedatasets |
file-type: |
http://publications.europa.eu/resource/authority/file-type/ |
http://publications.europa.eu/resource/authority/file-type |
FILE TYPE | EU-referentiedataset met definities van bestandsformats |
language: |
http://publications.europa.eu/resource/authority/language/ |
http://publications.europa.eu/resource/authority/language |
LANGUAGE | EU-referentiedataset met definities van talen |
dataTypeDefinitions: |
http://publications.europa.eu/ontology/euvoc/dataTypeDefinitions# |
http://publications.europa.eu/ontology/euvoc/dataTypeDefinitions |
EU datatype definitions | Definities van datatypes die gebruikt worden in EU-referentiedatasets. De resource-URIs
van datatypes die in deze graaf zijn gedefinieerd, zijn gemunt in de euvoc: namespace |
org: |
http://www.w3.org/ns/org# |
http://www.w3.org/ns/org |
ORG | Generiek vocabulaire voor het beschrijven van organisaties |
owl: |
http://www.w3.org/2002/07/owl# |
http://www.w3.org/2002/07/owl |
OWL | Aanvullend vocabulaire voor het definiëren van resources |
pav: |
http://purl.org/pav/ |
http://purl.org/pav |
PAV | Meer specifiek vocabulaire voor het beschrijven van provenance van digitale informatieobjecten (bouwt voort op PROV) |
prov: |
http://www.w3.org/ns/prov# |
http://www.w3.org/ns/prov# |
PROV-O | Generiek vocabulaire voor het beschrijven van provenance |
rdf: |
http://www.w3.org/1999/02/22-rdf-syntax-ns# |
http://www.w3.org/1999/02/22-rdf-syntax-ns# |
RDF | Basisvocabulaire voor het beschrijven van resources |
rdfs: |
http://www.w3.org/2000/01/rdf-schema# |
http://www.w3.org/2000/01/rdf-schema# |
RDFS | Basisvocabulaire voor het definiëren van resources |
sh: |
http://www.w3.org/ns/shacl# |
http://www.w3.org/ns/shacl# |
SHACL | Vocabulaire voor het vastleggen van regels (onder meer validatieregels) |
skos: |
http://www.w3.org/2004/02/skos/core# |
http://www.w3.org/2004/02/skos/core |
SKOS | Vocabulaire voor het beschrijven van concepten |
xsd: |
http://www.w3.org/2001/XMLSchema# |
nvt | XSD | De standaard voor XML-schema's |
OVERZICHT AFHANKELIJKHEDEN
Een definiërende eigenschap van een kennismodel (knowledge graph) is het gebruik van een graafrepresentatie. Elke combinatie van grafen is zelf ook weer een graaf — een eigenschap die coalescence genoemd wordt. Dit is een verschil met documentrepresentaties zoals in XML: twee XML-documenten vormen niet vanzelfsprekend een samengesteld document. Om deze notie te operationaliseren definieert de RDF-specificatie (in hoofdstuk 4) het begrip RDF Dataset: dat is, gegeven een graaf die beschouwd wordt, de union van die graaf met andere grafen. Bij het werken met een graaf grijpen bijvoorbeeld SPARQL-queries, SHACL-shapes en OWL-inferenties aan op de RDF Dataset.
Het is goed gebruik om in elke graaf waar mogelijk uitsluitend expliciet gedefinieerde resources te noemen. Ongedefinieerde resources dienen vermeden te worden. Anders gezegd: als je een graaf beschouwt moet je van elke genoemde resource ook de definitie van die resource kunnen vinden in de RDF Dataset. Dit geldt ook voor resources die in een andere graaf gedefinieerd zijn. Daar zijn dan twee methoden voor:
- Kopieer de definitie van de resource simpelweg in de lokale graaf
- Importeer de externe graaf in de lokale graaf met
owl:imports
. Gebruikers die een eigen omgeving met de lokale graaf willen werken zullen de betreffende grafen beschikbaar moeten maken aan de tooling die ze gebruiken. Veel tools proberen de externe graaf automatisch te downloaden door de graphURI te dereferencen met behulp van een http-request, maar dat lukt alleen als de tool internettoegang heeft en de graphURI inderdaad dereferenceable is. In lang niet alle gevallen wordt aan beide voorwaarden gedaan. In die gevallen zal de gebruiker dit handmatig moeten regelen
De grafen rdf
, rdfs
en owl
(en de datatypedefinities in XSD) hoeven nooit geïmporteerd te worden: deze maken per definitie deel uit van de RDF
Dataset. De twee genoemde methoden worden in de praktijk beide gebruikt, en vaak naast
elkaar. We noemen hier een paar praktijkgevallen.
- Een thesaurus zal typisch
skos
importeren metowl:imports
. Je zou ervoor kunnen kiezen in plaats daarvan precies díe resourcedefinities uitskos
te kopieëren die je in de thesaurus gebruikt. Maar dat worden er waarschijnlijk heel veel. En het is onhandig als je een SKOS-resource wilt gebruiken die je nog niet gekopieerd had. Het naar binnen halen van de hele graaf is de gebruikelijke optie - De graaf
pav
gebruikt een aantal resources uitprov
. Deze zijn "fysiek" inpav
gekopieerd. Daarmee wordt de graaf "self contained" en is deze "upper ontology" eenvoudig bruikbaar. Voorkomen wordt dat gebruikers vanpav
per definitie ookprov
moeten downloaden en beschikbaar maken in de werkomgeving - Een datagraaf die een paar klassen en properties gebruikt die gedefinieerd zijn in <http://schema.org>, de "upper ontology" die op 1,2 miljard webpagina's gebruikt wordt, kopieert meestal de benodigde definities. De graaf is erg groot, en importeren is daarom praktisch gesproken onhandig
Het volgende schema geeft een indicatie van hoe we binnen de TOOI-modules omgaan met imports en het kopieëren van resourcedefinities. De grafen gerepresenteert als zwarte blokken (TOOI-grafen) en de grafen gerepresenteerd als blauwe blokken zijn in de voorgaande paragraaf beschreven.
Toelichting:
- SHACL wordt in eerste instantie nog niet gebruikt: in een volgend increment van het
TOOI-kennismodel zal dat wel het geval zijn. De property
sh:order
wordt in sommige thesauri gebruikt om concepten sorteerbaar te maken anders dan op basis van alfabetische volgorde van preflabel. Zodat "overige plansoorten" en soortgelijke concepten onderaan in de sortering komen. Om dat mogelijk te maken is de resourcedefinitie vansh:order
gekopieerd intooiont
. Bij breder gebruik van SHACL zal dit overbodig worden - In
tooiont
worden drie typedefinities uitdataTypeDefinitions
gekopieerd. Deze worden gebruikt intooixtrn
- Het gemeenteregister gebruikt resources gedefinieerd in
provincie
als waarde voor de propertytooiont:ligtInProvincie
- Waardelijsten afgeleid uit het gemeenteregister gebruiken resources gedefinieerd in
provincie
als waarde voor de propertytooiont:ligtInProvincie
. Deze worden geïmporteerd via de provinciewaardelijsten - In
tooiont
worden een paar basale resourcedefinities uit skos gekopieerd. Deze worden overal in het kennismodel gebruikt. Dit zijn onder meerskos:Concept
enskos:definition
- De registers en de registerwaardelijsten importeren
tooikern
omdat daarin de concepten gedefinieerd zijn die het waardebereik vormen vantooiont:organisatiesoort