Linked Data @vlaanderen: uri en vocabulary richtlijnen v 1.0 2013-11-18
Table of Contents Achtergrond .....................................................................................................................................2 Taak 1: het toekennen van een HTTP identifier aan individuele entiteiten .....................................3 Taak 2: het toekennen van een label ................................................................................................7 Taak 3: het aanduiden van het type van het ding .............................................................................8 Taak 4: het beschrijven van het ding .............................................................................................11 Aanbevolen vocabularia ............................................................................................................11 Voor personen: FOAF .....................................................................................................12 Voor organisaties: ORG ..................................................................................................15 Voor contactinformatie: vCard ........................................................................................17 Voor het beschrijven van publieke diensten: Core Public Service ..................................19 Voor locatie: Basic Geo (WGS84 lat/long) Vocabulary .................................................20 Voor ruimtelijke objecten: GeoSparql .............................................................................20 Voor tijd: Time ................................................................................................................23 Voor events: Event ..........................................................................................................24 Voor statistische informatie (metingen, observaties): Data Cube ...................................27 Voor documenten, publicaties, informatie items: Dublin Core .......................................29 Voor begrippen in knowledge organisation systems: SKOS ...........................................31 Voor het beschrijven van RDF datasets: VoID ...............................................................33 Voor het beschrijven van de herkomst van de data: PROV ............................................35 Een eigen vocabularium maken (eigen klassen en properties) .................................................37 Value vocabularies ....................................................................................................................38 Besluit ............................................................................................................................................40
2013-11-18
1/40
Achtergrond Dit document situeert zich in het engagement om de data van de Vlaamse Overheid als Open Data te publiceren en dit met de hoogst mogelijke kwaliteit. Daarbij wordt dikwijls verwezen naar volgende sterren classificatie m.b.t. Open Data. ★ ★★ a ★★★ ★★★★
Available on the web (whatever format) but with an open licence, to be Open Data Available as machine-readable structured data (e.g. excel instead of image scan of table) as (2) plus non-proprietary format (e.g. CSV instead of excel) All the above plus, Use open standards from W3C (RDF and SPARQL) to identify things, so that people can point at your stuff All the above, plus: Link your data to other people’s data to provide context
★★★★★
De conceptnota goedgekeurd door de Vlaamse Regering gaat uit van minimaal 3 sterren. Op termijn willen wij naar 4 en 5 sterren evolueren en onze data publiceren binnen het Linked Open Data Web. Dan moeten we voldoen aan volgende Linked Data principes: 1. 2. 3.
4.
Use URIs to name things; Use HTTP URIs so that things can be referred to and looked up ("dereferenced") by people and user agents; When someone looks up a URI, provide useful information, using the open Web standards such as RDF, SPARQL; Include links to other related things using their URIs when publishing on the Web.
Dit betekent dat wij aan de entiteiten (scholen, hospitalen, departementen, gebouwen, …) waarvan wij de 'authentieke' data beheren en willen publiceren een URL moeten toekennen. De vraag stelt zich dan hoe we dit dan het best doen? Dit document biedt hiervoor een aantal patronen en richtlijnen. Uitgangspunt was om deze richtlijnen zo simpel en beperkt mogelijk te houden. Dit is een concrete uitwerking van de adviezen en mogelijke opties zoals die zijn gepresenteerd in het document "URI strategie data.vlaanderen" gemaakt in het kader van het LOD2 project door zijn Belgische partner Tenforce.
2013-11-18
2/40
Taak 1: het toekennen van een HTTP identifier aan individuele entiteiten Regels Regel 1: zorg ervoor dat de URI uniek is Regel 2: zo'n URL moet zo kort mogelijk zijn en eenvoudig te begrijpen voor zowel mens en machine. Regel 3: zo'n URL moet ontworpen zijn om 'eeuwig' mee te gaan. M.a.w. een identifier moet 'blijvend' zijn, ook wel 'persistent' genoemd. Dit betekent dat alles wat mogelijk variabel is uit de URL geweerd moet worden en dat een URL nooit verwijderd mag worden. Volgende aspecten nemen we dan beter niet op in de vorming van URL's: de organisatie(naam) die de URL's en bijhorende data publiceert merk-, product- of marketing namen status rol of functie Al deze aspecten zijn eerder tijdelijk en verhogen dus de kans dat URL's moeten veranderen daarbij de 'eeuwigheidswaarde' ondermijnend.
Structuur van een URL De notatie die we hier hanteren is gebaseerd op de 'URI template' specificatie gedefinieerd in RFC6570 met een uitbreiding om repetitie van patronen aan te duiden. Een volledig patroon http://{domein}{/collection}*[{/type}{/key}]+[{/dateversion}]?#id Teken
Betekenis
?
0 of 1 keer voorkomend
*
0 of meerdere keren
+
1 of meerdere keren
[]
eenheid (horen samen)
{}
in te vullen onderdeel
Toelichting bij de onderdelen. a) domein (verplicht) Domein is een internet DNS name. Regel: De entiteit die een domein gebruikt bij het samenstellen van een URL moet eigenaarschap en authoriteit hebben over dit domein. Aanbeveling: Om het (sub)domein te laten beginnen met 'data' zodat het duidelijk is dat er data gepubliceerd worden in tegenstelling tot documenten.
2013-11-18
3/40
Voorbeelden:
data.vlaanderen.be data.toerismevlaanderen.be (ervan uitgaand dat dit domein persistent is) data.delijn.be (ervan uitgaand dat dit domein persistent is)
Men kan indien nodig nog verder opsplitsen gebruik makend van subdomeinen, b.v. toerisme.data.vlaanderen.be b) collectie (optioneel) Een collectie dient om een verdere opdeling van het domein mogelijk te maken zonder daarom beroep te moeten doen op DNS instellingen. Voorbeeld:
data.vlaanderen.be/toerisme data.vlaanderen.be/openbaar-transport
Dit kan nog verder worden verfijnd indien nodig/handig. Maar hou rekening met de regel: korter is beter. Voorbeeld:
data.vlaanderen.be/toerisme/dagtoerisme
Collecties kunnen ook gebruikt worden om er zeker voor te zorgen dat de HTTP identifier uniek is. Aanbeveling: met betrekking tot de vraag subdomeinen binnen data.vlaanderen.be of collecties. Als het om een op zichzelf staand zelfstandig domein gaat raden wij een subdomein aan; gaat het eerder om het verdelen van een domein dan gebruikt men beter collecties. c) type en key in duo (verplicht) type geeft een hint voor mensen wat voor soort ding er beschreven wordt: een school, een hotel, een bushalte, …. Voorbeeld:
data.vlaanderen.be/toerisme/logie
key is dan de echte unieke sleutel die het ding krijgt in de dataset. Die key wordt meestal overgenomen van de natuurlijke key die er in de oorspronkelijke data zit of gevormd op basis van beschikbare velden. Voorbeelden:
data.vlaanderen.be/toerisme/logie/LOVL123 data.vlaanderen.be/toerisme/logie/Adoma (gevaar: mogelijks niet uniek) data.vlaanderen.be/onderwijs/school/S100032
Dit patroon mag herhaald voorkomen indien er een duidelijke hiërarchie kan gebruikt worden om de 'entiteit/ding' te identificeren.
2013-11-18
4/40
Voorbeelden:
data.vlaanderen.be/onderwijs/school/S100032/klas/6A data.vlaanderen.be/onderwijs/thesaurus/onderwijsniveaus/ter m/basisonderwijs
Aanbeveling: hoe de key samenstellen indien de bron geen echte identifier heeft maar enkel een textueel label of titel? We gebruiken dan dat label of die titel, maar normalizeren de tekst: zet in lowercase haal alle karakters weg die speciale URL encoding nodig hebben (deze karakters vindt men op http://www.blooberry.com/indexdot/html/topics/urlencoding.htm; enkele voorbeelden: $, &, +,<, {.). vervang spaties met een verbindingsstreepje verifieer of het resultaat uniekheid garandeert (zo niet, voeg een context (collectie) toe in het pad). Voorbeeld: data.vlaanderen.be/toerisme/logie/hotel-zonnestraal d) datum of versie (optioneel en exceptioneel) Voor de meeste entiteiten is het zeker niet nodig om voor het geven van een identifier een tijdsindicatie mee te geven in de URI. Ik blijf ook gedurende gans mijn leven hetzelfde sociaal zekerheidsnummer behouden, al verander ik dagelijks. Maar klas 6A in school S100032 is wel elk jaar anders; dat kan en mag dan opgevangen worden door tijdsinformatie op te nemen in de URL. Aanbeveling: Voor het aanduiden van tijd in URL's wordt het W3C Date Time formaat gebruikt. Wenst men een versie nummer te geven dan gebruikt men volgend patroon vX(.Y)? waarbij X een integer is en de major versie voorstelt en Y optioneel de minor versie. Voorbeelden:
data.vlaanderen.be/onderwijs/school/S100032/klas/6A/2013-09 data.vlaanderen.be/software/linked-data-server/v2.4
e) #id Aanbeveling: We raden aan alle identifiers van dingen af te sluiten met #id. Daardoor is het voor de gebruiker duidelijk dat het een identifier is van een 'ding'. Op deze manier vermijden we het implementeren van een 303 'See Other' redirect. Zie het Linked Data boek op http://linkeddatabook.com/editions/1.0/#htoc12. Wie wel 303 wil implementeren, mag dat natuurlijk. Dan bevelen wij volgend patroon aan: http://{domein}{/collection}*/id/[{/type}{/key}]+[{/dateversion}]? Wat dan leidt naar een 303 Location: http://{domein}{/collection}*/doc/[{/type}{/key}]+[{/dateversion}]?
f) Voorbeelden Aanbeveling: korter is beter, maar ook niet te kort zodat er geen 'uniekheid' meer gegarandeerd is. 2013-11-18
5/40
Standaard toepasbaar in de meeste gevallen http://{domein}{/type}{/key}#id
http://{domein}{/collectie}*{/type}{/key}#id
Bij hiërarchische identificatie http://{domein}[{/type}{/key}]+#id
http://data.vlaanderen.be/logie/LOVL123#id http://toerisme.data.vlaanderen.be/logie/Adom a#id http://toerisme.data.vlaanderen.be/logie/LOVL 123#id http://data.toerismevlaanderen.be/logie/LOVL 123#id http://data.vlaanderen.be/toerisme/logie/LOVL 123#id http://data.vlaanderen.be/toerisme/logie/Adom a#id http://data.vlaanderen.be/logie/LOVL123/kam er/12#id http://toerisme.data.vlaanderen.be/logie/Adom a/kamer/12#id http://toerisme.data.vlaanderen.be/logie/LOVL 123/kamer/12#id http://data.toerismevlaanderen.be/logie/LOVL 123/kamer/12#id
http://{domein}{/collectie}*[{/type}{/key}]+# http://data.vlaanderen.be/toerisme/logie/LOVL id 123/kamer/12#id http://data.vlaanderen.be/toerisme/logie/Adom a/kamer/12#id Bij tijdsgebonden entiteiten http://{domein}{/collection}*[{/type}/{key}]+ http://data.vlaanderen.be/onderwijs/school/S10 [{/dateversion}]?#id 0032/klas/6A/2013-09#id http://data.vlaanderen.be/school/S100032/klas/ 6A/2013-09#id http://onderwijs.data.vlaanderen.be/school/S10 0032/klas/6A/2013-09#id
2013-11-18
6/40
Taak 2: het toekennen van een label Elk 'ding' moeten we een menselijk leesbaar label geven. Voorbeelden: ID
label
http://toerisme.data.vlaanderen.be/logie/Adom Hotel Adoma a#id http://data.vlaanderen.be/onderwijs/school/S10 Sint-Lutgardisinstituut 0032#id http://onderwijs.data.vlaanderen.be/school/S10 Sint-Lutgardisinstituut, klas 6A, schooljaar 0032/klas/6A/2013-09#id 2013-2014 Voor het toekennen van een label bestaat er een standaard:
,
afgekort rdfs:label
We krijgen dan uitspraken die uit 3 delen bestaan (triples): Waarover gaat het (subject)
Welke property (predicate)
Met welke value
"Hotel Adoma"
Door het vastleggen van het prefix rdfs dat staat voor het URI deel kunnen we afkorten tot rdfs:label.
Enkele voorbeelden: @prefix rdfs: . rdfs:label "Hotel Adoma". rdfs:label "Sint-Lutgardisinstituut". rdfs:label "SintLutgardisinstituut, klas 6A, schooljaar 2013-2014"
2013-11-18
7/40
Taak 3: het aanduiden van het type van het ding Verder duid je best ondubbelzinnig aan om wat voor 'type' ding het gaat. Voorbeeld: http://toerisme.data.vlaanderen.be/logie/Adoma#id Dit is een hotel. Meer specifiek http://toerisme.data.vlaanderen.be/logie/Adoma#id is een instantie van de klasse hotel. Op het linked open data web wordt die klasse 'hotel' ook aangeduid met een HTTP identifier. Er zijn nu 2 mogelijkheden: ofwel gebruik je al een bestaande identifier ofwel definieer je zelf een klasse voor hotels. Best practice: kijk eerst of er al een klasse voor hotels beschikbaar is op het linked open data web. Een handig hulpmiddel hiervoor is de LOV website: http://lov.okfn.org/dataset/lov/index.html
Een zoekactie op hotel levert dan de volgende resultaten:
2013-11-18
8/40
Men krijgt een aantal zoekresultaten die verder onderzocht moeten worden of ze de behoeften afdekken. Eén van de resultaten is acco:Hotel, wat een afkorting is voor http://purl.org/acco/ns#Hotel. Hotel is een klasse gedefinieerd in het vocabularium met naam http://purl.org/acco/ns#. Daar vinden we volgende uitleg.
En hotel zelf is als volgt gedefinieerd.
Op basis hiervan kunnen we beslissen om deze klasse te gebruiken. ID
type
http://toerisme.data.vlaanderen.be/logie/Adom http://purl.org/acco/ns#Hotel 2013-11-18
9/40
ID
type
a#id Voor het toekennen van een ding aan een klasse bestaat er een standaard: .
We krijgen dan uitspraken die uit 3 delen bestaan (triples): Waarover gaat het (subject)
Welke property (predicate)
Met welke value
Door het vastleggen van het prefix 'rdf' dat staat voor het URI deel kunnen we afkorten tot rdf:type.
We krijgen dan: @prefix rdf:
.
rdf:type .
In het volgende deel beschrijven we vocabularia die veel voorkomende klassen beschrijven: Persoon, Organisatie, Event, ...
2013-11-18
10/40
Taak 4: het beschrijven van het ding In onze back offices beheren wij de data van de entiteiten waar wij de authentieke bron van zijn.
hun kenmerken (attributen), b.v. het aantal kamers van een hotel, het mailadres van een persoon.
hun relaties, b.v. persoon 'a' werkt in departement 'x' en rapporteert aan persoon 'b'.
Belangrijk: In het linked open data verhaal moeten deze attributen en relaties ook een unieke http identifier krijgen. Dit om zo éénduidig mogelijk te zijn. Best practice: Maak gebruik van al bestaande vocabularia (klasses, attributen/relaties) om uw entiteiten te beschrijven. Een overzicht van bestaande vocabularia vindt men op: http://lov.okfn.org/dataset/lov/index.html. De hieronder beschreven lijst bestaat uit vocabularia die al veelvuldig gebruikt zijn en hun degelijkheid hebben bewezen.
Aanbevolen vocabularia Voor het beschrijven van
Gebruik vocabularium
Personen
FOAF
Organisaties
ORG, ROV
Contactinformatie
vCARD
Services
Core Public Service
Locaties
Geo, GeoSparql
Tijd
Time
Events
Event
Statistische observaties/metingen
Data Cube
Documenten, publicaties, informatie assets
Dublin Core
Concepten/begrippen
SKOS
Datasets
VOID
Provenance
PROV
Zeer belangrijk: bij de beschrijving van een entiteit kan men properties uit verschillende vocabularia gebruiken; men hoeft zich dus niet te beperken tot één vocabularium.
2013-11-18
11/40
Voor personen: FOAF Voor het beschrijven van personen raden wij FOAF aan. Documentatie te vinden op: http://xmlns.com/foaf/spec/ Metadata van FOAF: http://lov.okfn.org/dataset/lov/details/vocabulary_foaf.html URL van het vocabularium: Deze URL leidt naar RDF en HTML representaties op basis van de http ACCEPT header. Schematisch:
2013-11-18
12/40
Klasse Persoon:
Voorbeelden: Beschrijving van Persoon 1 Daarbij maken we gebruik van volgende properties gedefinieerd door het foaf vocabularium (tussen haakjes ziet u de klasse) : family_name (Person), firstName (Person), gender (Agent), name, mbox=mailbox (Agent), workInfoHomepage (Person). Waarover het gaat (ID)
attribuut/relatie
waarde
foaf:Person
"Noël Van Herreweghe"
"Van Herreweghe"
"Noël"
"male"
2013-11-18
13/40
http://data.vlaanderen.be/persoon foaf:name /A123#id>
"Noël Van Herreweghe"
http://data.vlaanderen.be/persoon foaf:mbox /A123#id>
<mailto:[email protected] anderen.be>
http://data.vlaanderen.be/persoon foaf:workInfoHomepage /A123#id>
Beschrijving van Persoon 2 Waarover het gaat (ID)
Attribuut/relatie
waarde
foaf:Person
"Mathias De Schrijver"
"De Schrijver"
"Mathias"
"male"
http://data.vlaanderen.be/persoon foaf:name /B345#id>
"Mathias De Schrijver"
http://data.vlaanderen.be/persoon foaf:mbox /B345#id>
<mailto:[email protected] aanderen.be>
En bovendien kennen zij elkaar, gebruik makend van de relatie knows (Person): Waarover het gaat (ID)
Attribuut/relatie
waarde
Opmerking: Op europees niveau is er het Core Person Vocabulary ontwikkeld https://joinup.ec.europa.eu/asset/core_person/description. Maar zolang de in dit vocabularium gebruikte URL's niet resolven (niks teruggeven) raden wij het gebruik ervan in een LOD context niet aan.
2013-11-18
14/40
Voor organisaties: ORG Voor het beschrijven van organisaties raden wij ORG aan. Documentatie: http://www.w3.org/TR/vocab-org/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_org.html URL: Deze URL leidt enkel naar een machine readable versie. Schematisch:
2013-11-18
15/40
Klasse Organisatie:
Voorbeeld: In dit voorbeeld gebruiken we de properties subOrganizationOf, hasSite, hasPrimarySite uit het Organization vocabularium. Waarover het gaat (ID)
attribuut/relatie
waarde
org:Organization
"Studiedienst van de Vlaamse Regering"
Opmerking: Er is een profiel van dit vocabularium gemaakt om legaal geregistreerde organisaties zoals bedrijven te beschrijven: Registered Organization Vocabulary. Documentatie te vinden op: http://www.w3.org/TR/vocab-regorg/ Metadata van ROV: http://lov.okfn.org/dataset/lov/details/vocabulary_rov.html URL van het vocabularium: De URL leidt enkel naar een niet machine readable versie. Dit vocabularium bevat syntax errors (invalid RDF) en kan dus niet gebruikt worden.
2013-11-18
16/40
Voor contactinformatie: vCard Voor het vastleggen van contactinformatie van personen en organisaties het vCard vocabularium. Documentatie: http://www.w3.org/TR/vcard-rdf/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_vcard.html URL: Opgelet: er is een nieuwe versie van vCard in de maak; een aantal klassen en properties worden 'deprecated'. Klasse Adres:
Voorbeeld: Om een adres te beschrijven gebruiken we volgende properties: streetAddress, postalCode, locality, country. Waarover het gaat (ID)
attribuut/relatie
waarde
vc:Address
"adres Boudewijngebouw"
2013-11-18
17/40
A543#id>
"Boudewijnlaan 30 bus 23"
"1000"
"Brussel"
"België"
We kunnen dit adres dan gebruiken bij attribuut hasAddress van de hierboven al beschreven organisatie. Waarover het gaat (ID)
attribuut/relatie
waarde
org:Organization
"Studiedienst van de Vlaamse Regering"
"[email protected]"
"02 553 52 07"
Opmerking: Op europees niveau is er het Core Location Vocabulary ontwikkeld https://joinup.ec.europa.eu/asset/core_location/description. Maar zolang de in dit vocabularium gebruikte URL's niet resolven (niks teruggeven) raden wij het gebruik ervan in een LOD context niet aan.
2013-11-18
18/40
Voor het beschrijven van publieke diensten: Core Public Service Voor het beschrijven van de diensten die de overheid/publieke sector biedt. Documentatie: https://joinup.ec.europa.eu/asset/core_public_service/description URL: De URL leidt enkel naar een machine readable versie.
Waarover het gaat (ID)
attribuut/relatie
waarde
cpsv:PublicService
"het afleveren van een stedenbouwkundige vergunning"
2013-11-18
19/40
Voor locatie: Basic Geo (WGS84 lat/long) Vocabulary Om een ruimtelijk object als punt geografisch te situeren. Documentatie: http://www.w3.org/2003/01/geo/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_geo.html URL: Deze URL leidt naar RDF en HTML representaties op basis van de http ACCEPT header. Voorbeeld: We gebruiken de properties lat en long om in dit geval een gebouw als geografisch punt te localiseren. Waarover het gaat (ID)
attribuut/relatie
waarde
http://data.vlaanderen.be/gebouw/ rdf:type Boudewijngebouw#id>
geo:SpatialThing
"Boudewijngebouw"
"50.856776"
"4.354802"
Voor ruimtelijke objecten: GeoSparql Documentatie: http://www.opengeospatial.org/standards/geosparql Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_gsp.html URL: De URL leidt enkel naar een machine readable versie. Klasse Spatial Object
2013-11-18
20/40
Voorbeeld: Het Boudewijngebouw heeft een geometry; meer specifiek een punt gedefinieerd in GML.
Waarover het gaat (ID)
attribuut/relatie
waarde
http://data.vlaanderen.be/gebouw/ rdf:type Boudewijngebouw#id>
geo:Feature
"Boudewijngebouw"
sf:Point
2013-11-18
21/40
2013-11-18
""" 4.354802, 50.856776 """^^geo:gmlLiteral
22/40
Voor tijd: Time Voor het beschrijven van tijdsentiteiten, het Time vocabularium. Documentatie: http://www.w3.org/TR/owl-time/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_time.html URL: De URL leidt enkel naar een machine readable versie. Klasse 'TemporalEntity':
Voorbeeld: Voor het vastleggen van een tijdsinterval gebruiken we hasBeginning en hasEnd van het time vocab. Waarover het gaat (ID)
attribuut/relatie
waarde
time:TemporalEntity
"2013-06-14T09:00:00"^^xsd:dateTime
"2013-06-14T18:00:00"^^xsd:dateTime
2013-11-18
23/40
Voor events: Event Voor het beschrijven van events, de Event ontologie. Documentatie: http://motools.sourceforge.net/event/event.html Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_event.html URL: URL leidt naar RDF en HTML representaties op basis van de http accept header. Schematisch overzicht:
Klasse 'Event':
2013-11-18
24/40
Voorbeeld: Waarover het gaat (ID)
attribuut/relatie
waarde
event:Event
"Open Data dag van de Vlaamse overheid 2013"
"2013-06-14T09:00:00"^^xsd:dateTime
"2013-06-14T18:00:00"^^xsd:dateTime
Opmerking 1: Het herbruik van het Time vocabularium (cf. supra) zorgt voor indirectie. Dit betekent dat men eerst naar een instantie van time:TemporalEntity moet verwijzen alvorens men start en einde kan ingeven. Dit kan veel simpler en directer door dit mechanisme te vervangen met schema:startDate en schema:endData met 'schema' als prefix voor http://schema.org/. Dan krijgen we:
"2013-06-14T09:00:00"^^xsd:dateTime
"2013-06-14T18:00:00"^^xsd:dateTime
Opmerking 2: Er zijn nog 2 andere vocabs voor het beschrijven van events die goed bruikbaar 2013-11-18
25/40
zijn:
lode Documentatie: http://linkedevents.org/ontology/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_lode.html URL:
sem Documentatie: http://www.cs.vu.nl/~guus/papers/Hage11b.pdf Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_sem.html URL:
2013-11-18
26/40
Voor statistische informatie (metingen, observaties): Data Cube Voor het vastleggen van statistische observaties over verschillende dimensies, DataCube Documentatie: http://www.w3.org/TR/vocab-data-cube/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_qb.html URL: De URL leidt enkel naar een machine readable versie. Schematisch overzicht: Klasse 'Observation':
Een simpel en beperkt voorbeeld: De gebruikte prefixen: prefix prefix prefix prefix prefix
qb: eg: sdmx-dimension: sdmx-code: sdmx-attribute:
Waarover het gaat (ID)
attribuut/relatie
waarde
qb:Observation
2013-11-18
27/40
sdmx-code:sex-M
76.6
Opmerking: het data cube vocabularium is redelijk complex. Verwachting is dat er de volgende jaren tools zullen verschijnen die vertrekkend van een spreadsheet redelijk geautomatiseerd linked data volgens het data cube vocabularium kunnen genereren.
2013-11-18
28/40
Voor documenten, publicaties, informatie items: Dublin Core Voor het beschrijven van informatie objecten: Dublin Core. Dit vocabularium is zeer generiek en wordt ook dikwijls gebruikt voor het beschrijven andere types van entiteiten. Documentatie: http://dublincore.org/documents/2012/06/14/dcmi-terms/?v=elements Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_dcterms.html URL: http://purl.org/dc/terms/ URL leidt naar RDF en HTML representaties op basis van de http accept header.
Voorbeeld: Waarover het gaat (ID)
attribuut/relatie
waarde
foaf:Document
"Open data dag aankondiging"^^xsd:string
14 Juni 2013: Open Data Dag in Vlaanderen!"^^xsd:string
"2013-05-05"^^xsd:date
"Programma van de open data dag van de Vlaamse overheid in
2013-11-18
29/40
Waarover het gaat (ID)
attribuut/relatie
waarde
vlaanderen>
Brussel"^^xsd:string
Opmerking: Omdat het hier gaat om het toekennen van metadata aan een bestaande webpagina (een informatie object dat wel over het web kan verstuurd worden) gebruikt die zijn bestaand urladres als identifier en hoeft de #id in dit geval dus niet. Er moet immers geen onderscheid gemaakt worden tussen het ding en het document dat het ding beschrijft.
2013-11-18
30/40
Voor begrippen in knowledge organisation systems: SKOS Voor het maken van thesauri, controlled vocabularies, … waarmee andere zaken, meestal informatie objecten, kunnen geclassificeerd worden. Documentatie: http://www.w3.org/2009/08/skos-reference/skos.html Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_skos.html URL: URL leidt naar RDF en HTML representaties op basis van de http accept header. Klasse 'Concept':
Voorbeeld: Voortwerkend op het dublin core voorbeeld (cf. supra) kunnen we nu met behulp van skos het subject van die pagina verder uitwerken.
En verder uitwerken m.b.v. skos: Waarover het gaat (ID)
attribuut/relatie
waarde
rdf:type
skos:Concept
skos:prefLabel
"open data"@nl
2013-11-18
31/40
Waarover het gaat (ID)
attribuut/relatie
waarde
skos:prefLabel
"data ouverts"@fr
skos:broader
skos:related
2013-11-18
32/40
Voor het beschrijven van RDF datasets: VoID VOID staat voor Vocabulary of Interlinked Datasets. Documentatie: http://www.w3.org/TR/void/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_void.html URL: Klasse 'Dataset':
Opmerking: Zo'n void file gaat men zelden handmatig editeren maar eerder automatisch genereren vanuit een database (triple store). Hieronder een voorbeeld van bij de Nederlandse overheid, in bestandsformaat turtle. a void:Dataset , prov:Entity ; rdfs:label "Stelselcatalogus dataset" ; dcterms:description "Begrippen en gegevenselementen zoals gebruikt door de basisregistraties" ; dcterms:title "Stelselcatalogus dataset" ; void:classes 6 ; void:dataDump ; void:distinctObjects 4297 ; void:distinctSubjects 1200 ; void:entities 1200 ; void:exampleResource
2013-11-18
33/40
, , , , ; void:feature , , ; void:properties 38 ; void:triples 17950 ; void:uriRegexPattern "^http://data\\.stelselvanbasisregistraties\\.nl/(.+)/id/(gegevenselement|concept|basisregistratie)/(.*) $" ; void:vocabulary void: , olca: , foaf: , skos: , dc: , , dcterms: , prov: ; prov:generatedAtTime "2013-08-23T17:46:16.015+02:00"^^xsd:dateTime ; prov:wasGeneratedBy .
2013-11-18
34/40
Voor het beschrijven van de herkomst van de data: PROV Herkomst ('provenance' in het Engels) is de verzamelnaam om aan te duiden hoe data zijn aangemaakt (door wie, wanneer, met welke tools, …). Documentatie: http://www.w3.org/TR/prov-o/ Metadata: http://lov.okfn.org/dataset/lov/details/vocabulary_prov.html URL: Schematisch:
Klasse 'Activity'
Voorbeeld: Waarover het gaat (ID)
attribuut/relatie
waarde
prov:Entity
prov:Create
2013-11-18
35/40
eevent/E20132876#id>
"2013-0503T08:53:00"^^xsd:dateTime
2013-11-18
36/40
Een eigen vocabularium maken (eigen klassen en properties) Het is best mogelijk dat de bestaande vocabularia niet of niet helemaal of niet juist uw domein beschrijven. Dan is het natuurlijk mogelijk om zelf klassen en properties/relaties te gaan definiëren. Het gesuggereerde URI patroon hiervoor: http://{domein}{/collection}*/def#{key}
waarbij key: de naam van de klasse is (UpperCamelCase) de naam van de property (lowerCamelCase) Voorbeelden: URI Patroon http://{domein}/def#{key}
Voorbeeld http://toerisme.vlaanderen.be/def#Hotel http://toerisme.vlaanderen.be/def#aantalKamer s
http://{domein}{/collection}*/def# http://data.vlaanderen.be/toerisme/def#Hotel {key} http://data.vlaanderen.be/toerisme/def#aantalK
amers Voor hoe die klassen en properties verder moeten getypeerd en gespecifieerd worden verwijzen wij naar het boek "Semantic Web for the Working Ontologist" (http://workingontologist.org/).
2013-11-18
37/40
Value vocabularies We hebben tot nu toe aan entititeiten identifiers toegekend, hebben aangeduid tot welke klasse(n) zij horen en welke properties en relaties zij hebben. In bepaalde is het handig om gecontroleerde lijsten van toegelaten waarden te hebben om de waarde aan properties en relaties toe te kennen. Zo'n (controlled vocabularies) waardenlijstjes noemt men 'value vocabularies'. Wij sommen hier een aantal herbruikbare value vocabularia op: Inhoud
Identifier
tijdsfrequenties
http://dublincore.org/groups/collections/freque ncy/2013-06-26/freq.rdf#
tijdsintervallen
http://reference.data.gov.uk/def/intervals
talen
http://publications.europa.eu/mdr/resource/auth ority/language/skos/languages-skos.rdf
filetypes
http://publications.europa.eu/mdr/resource/auth ority/file-type/skos/filetypes-skos.rdf
landen
http://publications.europa.eu/mdr/resource/auth ority/country/skos/countries-skos.rdf
currencies
http://publications.europa.eu/mdr/resource/auth ority/currency/skos/currencies-skos.rdf
Opmerking: de controlled vocabularies beheerd door het publications office van de Europese Unie komen pas in de loop van 2014 ter beschikking in de LOD cloud. Een voorbeeld: Voor het aanduiden van tijdsfrequenties kunnen we het volgend controlled vocabularium gebruiken http://dublincore.org/groups/collections/frequency/2013-06-26/freq.rdf#. Deze somt de voorziene en toegelaten waarden op: identifier
label
freq:annual
Annual
freq:biennial
Biennial
freq:bimonthly
Bimonthly
freq:biweekly
Biweekly
freq:continuous
Continuous
freq:daily
Daily
freq:irregular
Irregular
freq:monthly
Monthly
2013-11-18
38/40
freq:quarterly
Quarterly
freq:semiannual
Semiannual
freq:semimonthly
Semimonthly
freq:semiweekly
Semiweekly
freq:threeTimesAMonth
Three times a month
freq:threeTimesAWeek
Three times a week
freq:threeTimesAYear
Three times a year
freq:triennial
Triennial
freq:weekly
Weekly
Dit wordt dan als volgt gebruikt b.v. bij de property accrualPeriodicity uit het Dublin Core vocabularium. Waarover het gaat (ID)
attribuut/relatie
waarde freq:quarterly
In 2014 voorziet de Open Data team van de Vlaamse Overheid heel wat eigen Vlaamse controlled vocabularia te publiceren (lijst van entiteiten, lijst van gebouwen, lijst van beleidsdomeinen, ….) met bijhorende reconciliatie service zodat het makkelijk is om op basis van een label de bijhorende identifier op te vragen.
2013-11-18
39/40
Besluit Om zo éénduidig mogelijk te zijn werken wij met identifiers, meer bepaald URL's. Individuen krijgen zo'n identifier, maar ook de klassen waartoe zij behoren en de properties om hen te beschrijven. Dit document beschreef de richtlijnen voor het munten van deze URL's voor die dingen waarvan wij zelf de (authentieke) bron zijn. Voor klassen en properties kan men de url's gebruiken van al bestaande vocabularia, waarvan wij de meest gebruikte hebben aangehaald. Wil men zelf klassen en properties definiëren dan hebben we ook daarvoor een richtlijn aangehaald.
2013-11-18
40/40