Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IMBOR 2020-07 release gebruiken om basis versiebeheer IMBOR-LD te implementeren #88

Closed
RiX012 opened this issue Jun 24, 2020 · 7 comments
Assignees
Labels
VERVALLEN: IMBOR-LD | Design Decision beslissing welke resulteert in een uitgangspunt, inclusief afweging
Milestone

Comments

@RiX012
Copy link
Contributor

RiX012 commented Jun 24, 2020

Impact/revisit van:
#2 #49 #82
We hebben het uitgebreid gehad over versiebeheer in het algemeen en CROW heeft het op zich genomen om hier hun expertise op te showen. Alleen binnen IMBOR-LD doen we het nu nog niet. In eerdere beslissingen is gesteld dat bij een nieuwe release van IMBOR en IMBOR-LD we versiebeheer gaan implementeren. Voor release 2020-08 is nu gekozen om basis versiebeheer te implementeren.
Daarnaast lopen we met bijvoorbeeld Amsterdam tegen zaken aan dat ze onze ontologie al gebruiken. Als wij zaken gaan veranderen moeten we ook goed versiebeheer doen anders wil niemand met onze ontologieën werken. We kunnen dan onze kennis van versiebeheer echt goed etaleren, en überhaupt goed bezig zijn
Dit betekent het volgende:

In de TriG file werd al een versie meegeven. Dit blijft zo. Deze benaming zal in lijn zijn met de IMBOR benaming (2020-08). Doordat in IMBOR-LD vaste URI's worden gebruikt (geen versie in de URL) zal alles te te vinden blijven. E.g. het beheerobject zal blijven op: http://linkeddata.crow.nl/publication-v2/ns/crow/imbor/def/objecttype/OBB400

De meeste wensen mbt versie management bij IMBOR-LD gaan over versie materialisatie. Wanneer we de analyse van CROW bekijken is de handigste strategie een IC (Indepent Copies) strategie Combinaties versiebeheer strategie. Eigenlijk wordt dit ook onderschreven door IMBOR: er komen een minimaal aatal publicaties per jaar en deze moeten allemaal ook nog eens altijd te raadplegen zijn.
Qua implementatie in techniek kom je dan dus op het delen van periodieke dumps. Dit is wat gedaan zou kunnen worden door in de publicatie URL een versie op te nemen. Dit is in ons geval minder handig dan het expliciet in de data opnemen. Kort gezegd publiceer je puur de info over de versie apart, met een rdfs:container en de members hier in met rdfs:member. Overigens weten we nog niet zeker welk 'groeping' mechanisme we gaan gebruiken. Wordt nog onderzocht.

Voordelen:

  • Eenvoudig
  • Te combineren met 'document' releases van TriG file en Access Database
  • Met SPARQL op één endpoint te querien (door filter)
  • Gehele versies te achterhalen
  • Delta door te querien
  • Resources blijven op zelfde plek
  • Werkt op het LDP van CROW

Nadelen:

  • Alleen Subjecten en Objecten worden meegenomen (geen predicaten). Dit betreffen in IMBOR-LD dus nu Objecttypen, Groepen, Eigenschappen, Waarden en de koppeling (shape) tussen Objecten en Eigenschappen. E.g. Als het concept Boom uit de groep Groen wordt gehaald, maar de groep Groen en het concept Boom gewoon blijven staan... is dit niet expliciet te achterhalen. Alleen doormiddel van logboeken of eventuele compare query's.
    Ondanks dat dit niet perfect is verwachten we dat het de meeste use-cases dekt.
  • Omvangrijkere TriG file
  • In query's moet versie info meegegeven worden
  • Makkelijk om het in de query te vergeten (daarmee kans op niet juiste resultaten)

EDIT: 2020-08: In de uitweiding van deze issue worden de opties besproken en waarom voor 'optie 3' gekozen is.

@RiX012 RiX012 added the VERVALLEN: IMBOR-LD | Design Decision beslissing welke resulteert in een uitgangspunt, inclusief afweging label Jun 24, 2020
@RiX012 RiX012 added this to the IMBOR 2020-07 milestone Jun 24, 2020
@ElisabethKloren
Copy link
Contributor

Softwareleveranciers vragen in het overleg 26-06-2020, of er delta query's tussen de vorige en deze versie gepubliceerd worden.

@NielsHoffmann
Copy link
Contributor

De uitleg hierboven is wat mij betreft nog niet duidelijk genoeg.
Het uitgangspunt is helder: 'een imbor-ld versie per imbor (access database) release'.
Maar de uitwerking nog niet (ik snap dat er ook nog het een en ander uitgezocht wordt...) Maar bv. de laatste trig file die ik van @RiX012 gekregen heb bevat geen versie informatie in de graph uri's (terwijl ik dat eerder volgens mij wel gezien heb) alleen een versie statement in de ontologie definitie.

Dus ik hoop dat de uitwerking nog iets verder toegelicht kan worden...

@RiX012 RiX012 self-assigned this Jun 30, 2020
@RiX012
Copy link
Contributor Author

RiX012 commented Jul 3, 2020

Dus ik hoop dat de uitwerking nog iets verder toegelicht kan worden...

Uiteraard! Bij deze.

@redmer en ondergetekende hebben drie opties verkend.

  1. dcat:Datasets, i.c.m. met Graphs
  2. rdf:bag (rdfs:container)
  3. skos:collection
    Om het overzichtelijk te maken is van iedere optie een voorbeeld file bijgevoegd.

Optie 1:

We maken een TriG file met daarin verschillende graphs. Al deze graphs zijn ook dcat:Dataset. We introduceren één dcat:Catalog, met de dcat:dataset property, welke als waarde dcat:Dataset heeft. Vervolgens introduceren we één dcat:Distribution, hierop zetten we de daadwerkelijke versie info. Elke graphs (en dus dcat:Dataset) heeft de property dcat:distribution die als waarde de enige (versioned) dcat:Distribution class.
Dit is een zuivere manier en bij elke nieuwe versie hoeven we alleen maar de dcat:Distribution aan te passen. Hierin staan immers alle verwijzingen. Bij een nieuwe versie zorgen de dcat:Dataset ervoor dat de juiste Subjecten en Objecten in de juiste versie staan.

In een query kan het dan bijvoorbeeld zo worden opgevraagd:

PREFIX versie:   <http://linkeddata.crow.nl/publication-v2/ns/crow/imbor/version/>
SELECT * WHERE {
GRAPH ?g 
{  ?s ?p ?o . }  
?g dcat:distribution versie:*** .
}

Voorbeeld bestand (gestript van content):
EXAMPLE imbor-ld - 2020-07 - Versiebeheer Optie 1 TriG File.txt

Optie 2:

We maken een TTL file zonder graphs en introduceren één klasse van het type rdf:bag. Hierin worden door middel van blanknodes alle Subject en Objecten geplaatst. Bij een nieuwe versie wordt er een nieuwe rdf:bag geïntroduceerd.

In een query kan het dan bijvoorbeeld zo worden opgevraagd (gebruikmakend van de inference/ruleset van rdfs):

PREFIX versie:   <http://linkeddata.crow.nl/publication-v2/ns/crow/imbor/version/>
SELECT * WHERE {
 ?s ?p ?o . 
FILTER ( versie:*** rdfs:member ?s || versie:*** rdfs:member ?o )
}

Voorbeeld bestand (gestript van content):
EXAMPLE imbor-ld - 2020-07 - Versiebeheer Optie 2 TTL File.txt

Optie 3:

We maken een TTL file zonder graphs en introduceren één klasse van het type skos:collection met daarin alle Subjecten Objecten. Daarnaast één dcat:Distribution class, hierop zetten we de daadwerkelijke versie info. De skos:collection is gewoon een groep met alle Subjecten en Objecten in één versie. Welke versie dat is wordt vermeld met een rdfs:isDefinedBy die als waarde de dcat:Distribution class heeft.

In een query kan het dan bijvoorbeeld zo worden opgevraagd:

PREFIX groep:   <http://linkeddata.crow.nl/publication-v2/ns/crow/imbor/def/groepering/>
SELECT * WHERE {
 ?s ?p ?o . 
FILTER ( groep:Versie2020-7 skos:member ?s || groep:Versie2020-7 skos:member ?o )
}

Voorbeeld bestand (gestript van content):
EXAMPLE imbor-ld - 2020-07 - Versiebeheer Optie 3 TTL File.txt

Conclusie
In alle opties publiceren we zowel de file als een endpoint. En in allebei de opties zijn alleen Subjecten en Objecten 'versioned'.

  • Optie 1 is clean en het meest standaard. Deze bevat de juiste informatie en is eenvoudig te querien. Daarnaast is het ook simpel te onderhouden. Echter, het huidige CROW LDP ondersteund geen GRAPHS. Deze optie valt hiermee dus af.
  • Optie 2 is simpel en doeltreffend. Verdient verder niet de schoonheidsprijs en is lastig te verwerken in transformatie scripts. Eigenlijk is het niet goed te doen om van een bulk transformatie een lijst met blanknodes te maken. Daarnaast kunnen niet alle SPARQL engines goed/op dezelfde manier omgaan met inference/rulesets. Hiermee valt deze optie ook af.
  • Optie 3 blijft over. Deze is simpel, doeltreffend maar heel banaal. Dit is zeker ook geen mooie manier van versiebeheer. Maar it-does-the-job voor de huidige use-cases. Daarnaast is iedereen bekent met SKOS, dus moet het makkelijk te behandelen zijn.

Voorlopig willen we dus verder met optie 3, een skos:Collection.
@NielsHoffmann @MichelBohms graag jullie input/visie.

@MichelBohms

This comment has been minimized.

@NielsHoffmann
Copy link
Contributor

dank voor de uitleg. Ik denk inderdaad dat optie 3 het beste is. Niet alleen omdat het CROW-LDP optie 1 niet ondersteunt, maar ook omdat een turtle file (in tegenstelling tot een trig) makkelijker te verwerken is voor de meeste partijen omdat trigs niet per se goed ondersteund worden...

@MichelBohms
Copy link
Collaborator

MichelBohms commented Jul 3, 2020 via email

redmer added a commit that referenced this issue Jul 17, 2020
redmer added a commit that referenced this issue Jul 17, 2020
@RiX012
Copy link
Contributor Author

RiX012 commented Oct 6, 2020

In de nieuwste TTL file is nu via een skos:collection de versie op te vragen. Voor inhoudelijke wijzigingen wordt nog verwezen naar het logboek. In een volgende versie zal de zelfde manier van versie management gebruikt worden, waardoor makkelijke een (basis) delta opgevraagd kan worden. Voor deze versie is dat nog niet gedaan omdat 2020-08 pas een release candidate van IMBOR-LD is. 2020-03 was een bèta.
Alle SPARQL queries zijn ook aangepast om de laatste (juiste) versie te bevragen. Dit geldt voor zowel degene in de Web applicatie van CROW, als degene in de voorbeelden binnen het juypyter notebook. Het wordt aanbevolen deze te raadplegen wanneer men wil gaan queryien.

@RiX012 RiX012 closed this as completed Oct 6, 2020
RiX012 added a commit that referenced this issue Oct 6, 2020
* Verwijder OWL-property beschrijvingen

Closes #87
Closes #94

* nieuwe versie brondata

* Verwijder graaf-informatie voor een nette Turtle

implementeerd deels #88

* Hermodelleer kwantiteitsattributen

implementeert #87

* Optie 3 versiebeheer #88

closes #88

* Schema-wijziging

* SPARQL-voorbeelden geupdate naar 2020-08

Co-authored-by: Redmer Kronemeijer <kronemeijer@rdmr.eu>
RiX012 added a commit that referenced this issue Oct 7, 2020
* Verwijder OWL-property beschrijvingen

Closes #87
Closes #94

* nieuwe versie brondata

* Verwijder graaf-informatie voor een nette Turtle

implementeerd deels #88

* Hermodelleer kwantiteitsattributen

implementeert #87

* Optie 3 versiebeheer #88

closes #88

* Schema-wijziging

* SPARQL-voorbeelden geupdate naar 2020-08

* Feature/imbor 2020-08 (#104)

* Correcte versienummer voor publicatie

Closes #101
Closes #99

* Close #100

Co-authored-by: Redmer Kronemeijer <kronemeijer@rdmr.eu>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
VERVALLEN: IMBOR-LD | Design Decision beslissing welke resulteert in een uitgangspunt, inclusief afweging
Projects
None yet
Development

No branches or pull requests

5 participants