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, maar skos: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

[2] https://joinup.ec.europa.eu/sites/default/files/document/2013-02/D7.1.3%20-%20Study%20on%20persistent%20URIs.pdf

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 thesauri

  • id/ — voor registers

  • set/ — 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 (tooikern:c_bdc265d5).

Collecties hebben een opake local name (tooikern:skosCollection_0748250c).

Conceptschema's hebben een Nederlandse term als local name, gebaseerd op het prefLabel (tooikern:publicatieblad)

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 detooiont: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/v3

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 met owl:imports. Je zou ervoor kunnen kiezen in plaats daarvan precies díe resourcedefinities uit skos 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 uit prov. Deze zijn "fysiek" in pav gekopieerd. Daarmee wordt de graaf "self contained" en is deze "upper ontology" eenvoudig bruikbaar. Voorkomen wordt dat gebruikers van pav per definitie ook prov 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.

images/download/attachments/35702667/image2021-3-25_16-56-52.png


Toelichting:

  1. 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 van sh:order gekopieerd in tooiont. Bij breder gebruik van SHACL zal dit overbodig worden

  2. In tooiont worden drie typedefinities uit dataTypeDefinitions gekopieerd. Deze worden gebruikt in tooixtrn

  3. Het gemeenteregister gebruikt resources gedefinieerd in provincie als waarde voor de property tooiont:ligtInProvincie

  4. Waardelijsten afgeleid uit het gemeenteregister gebruiken resources gedefinieerd in provincie als waarde voor de property tooiont:ligtInProvincie. Deze worden geïmporteerd via de provinciewaardelijsten

  5. In tooiont worden een paar basale resourcedefinities uit skos gekopieerd. Deze worden overal in het kennismodel gebruikt. Dit zijn onder meer skos:Concept en skos:definition

  6. De registers en de registerwaardelijsten importeren tooikern omdat daarin de concepten gedefinieerd zijn die het waardebereik vormen van tooiont:organisatiesoort