Versies van dingen in een dataset

Inhoud

Het probleem

Datasets beschrijven vaak een bepaalde staat van de dingen waarover data zijn vastgelegd. Vaak stelt dit de huidige, of laatst bekende staat voor. Maar in werkelijkheid veranderen dingen: Dingen onstaan, ondergaan veranderingen en verdwijnen soms weer. Om de werkelijkheid goed te beschrijven moeten datasets dus een notie van geschiedenis hebben. Met andere woorden, de dingen die worden beschreven in een dataset kunnen versies hebben. De vraag is hoe dat het beste aangepakt kan worden bij publicatie van een dataset als vijfsterrendata.

Vereisten van een oplossing

De volgende algemene (niet toepassingsspecifieke) eisen kunnen aan een oplossing worden gesteld:

  1. Het moet makkelijk zijn de laatst bekende staat van de data op te vragen;
  2. het moet mogelijk zijn om de staat van de data op een zeker tijdstip op te vragen;
  3. het moet mogelijk zijn een overzicht te krijgen van de veranderingen die de data hebben ondergaan tijdens een tijdinterval;
  4. het zou zo simpel mogelijk moeten zijn;
  5. het moet logisch zijn.

Voorstel voor een oplossing

Hieronder wordt een simpel voorbeeld uitgewerkt in Turtle-notatie, om duidelijk te maken hoe versies van objecten kunnen worden gepubliceerd. Het voorbeeld gaat over een kerk die op 30 september 1929 in gebruik genomen is met de naam "OldName". Op 20 juni 1990 wordt de naam veranderd in "NewName".

:c1 a ex:Church ;
  dcterms:title "NewName" ;
  dcterms:valid "start=1990-06-20;"
  dcterms:replaces <c1/version1> .
 
<c1/version1> a ex:Church ;
  dcterms:title "OldName" ;
  dcterms:valid  "start=1929-08-20; end=1990-06-19;"
  dcterms:isVersionOf :c1 ;
  dcterms:isReplacedBy :c1 .


Eigenschappen van de oplossing zijn:

  1. Elke verandering van een eigenschap van een object (of combinatie van veranderingen van eigenschappen op eenzelfde moment) heeft een nieuwe versie van het object tot gevolg.
  2. Er wordt gebruik gemaakt van algemene vocabularia: Dublin Core;
  3. De meest recente (huidige) versie heeft altijd dezelfde URI;
  4. Oudere versies zijn gekoppeld met de huidige versie (via dcterms:isVersionOf);
  5. Versies vormen een keten via dcterms:replaces en dcterms:isReplacedBy.

problemen

  1. Er wordt gebruik gemaakt van DCMI Period (http://dublincore.org/documents/dcmi-period/) om een tijdinterval aan te duiden. Dat is nodig omdat dcterms:valid als waarde een rdfs:Literal moet hebben. Maar het zou beter zijn als een tijdinterval als een complex object kan worden beschreven, dat gebruik maakt van algemenere datatypes als xsd:DateTime, xsd:gYear of xsd:integer. Met xsd:DateTime of xsd:integer (voor jaren) zouden de data bijvoorbeeld makkelijker in een SPARQL-query gefilterd kunnen worden.
  2. Wat nog ontbreekt is een manier om vast te leggen (in de metadata van de dataset) dat het om een dataset met objecten die versies kunnen hebben gaat. Als een gebruiker dat niet weet kunnen verkeerde conclusies worden getrokken. Wordt in het voorbeeld bijvoorbeeld gevraagd hoeveel kerken er zijn (instanties van ex:Church), dan is het antwoord 2. Maar de dataset bevat maar 1 courante kerk.