wouterbeek / etl-andb

Werk repository voor de creatie van de ANDB dataset in linked data.
0 stars 1 forks source link

Data #2

Closed MiconSchorsij closed 3 years ago

MiconSchorsij commented 3 years ago

In de kaarten datasets zijn data altijd als losse velden day / month / year opgeslagen. Is het verstandig om die velden al in de csv's samen te voegen of is er een andere oplossing?

wouterbeek commented 3 years ago

Dit kan op verschillende manieren. Een manier die ik vaak toepas is om bottom-up te werk te gaan:

  1. Pas alle ETL stappen op statement niveau toe. Bijv. identificeer de taal van tekst labels ("medewerker" -> "medewerker"@nl).
  2. Combineer triples, bijv. jaar + maand + dag -> xsd:date, jaar + maand -> xsd:gYearMonth, etc.
  3. Combineer structuren, bijv. datum + persoon + organizatie -> werk event.

Het kan ook op andere manieren, en sommige taken zoals (1) en (2) kunnen eventueel ook in het bronsysteem. Als het bronsysteem voor de lange termijn gebruikt blijft worden heeft dit ook zin, want als je bron verbeterd gaan gebruikers van de bron er ook op vooruit (voor de ANDB dataset is dit eigenlijk niet van toepassing).

Naarmate de stappen complexer worden wordt het aantal bronsystemen waarin deze stappen nog kunnen worden uitgevoerd steeds kleiner. Dus stap (3) is mogelijk niet haalbaar in de ANDB bron.

MiconSchorsij commented 3 years ago

De kartenbestanden bevatten zoveel losse day / month / year velden dat ik er liever niet aan begin om deze bij de bron aan te pakken als daar ook een oplossing voor is in de linked data. Het personenbestand bevat naast de day / month / year velden overigens wél een xsd:date voor geboorte en sterfdatum. Misschien kunnen we die wel gebruiken.

MiconSchorsij commented 3 years ago

Ik wil graag een check op mijn begrip van de opbouw van de shapes file. Ik heb alles wat ik over data weet genoteerd. Kan jij hier feedback op geven?

shape:date
    sh:property
      [ shape:day;
        sh:minCount 1 ],
      [ shape:month;
        sh:minCount 1 ],
      [ shape:year;
        sh:minCount 1 ];
      # {year}-{month}-{day}
    sh:description "Date structure for all life and workevents."@en;
    sh:maxCount 1;
    sh:targetClass xsd:date.

  shape:yearMonth
    sh:property
      [ shape:month;
        sh:minCount 1 ],
      [ shape:year;
        sh:minCount 1 ];
      # {year}-{month}
    sh:description "Date structure for all life and workevents were the day of the month is mising."@en;
    sh:maxCount 1;
    sh:targetClass xsd:gYearMonth.

  shape:monthDay
    sh:property
      [ shape:day;
        sh:minCount 1 ],
      [ shape:month;
        sh:minCount 1 ];
      # {month}-{day}
    sh:description "Date structure for all life and workevents were the year is mising."@en;
    sh:maxCount 1;
    sh:targetClass xsd:gMonthDay.  

  shape:day
    sh:datatype xsd:gDay;
    dct:source 
      "sdn_addr_day-01",
      "sdn_addr_day-02",
      "sdn_addr_day-03",
      "etc.".

  shape:month
    sh:datatype xsd:gMonth;
    dct:source 
      "sdn_addr_month-01",
      "sdn_addr_month-02",
      "sdn_addr_month-03",
      "etc.".

  shape:year
    sh:datatype xsd:gYear;
    dct:source 
      "sdn_addr_year-01",
      "sdn_addr_year-02",
      "sdn_addr_year-03",
      "etc.".
wouterbeek commented 3 years ago

Er zijn verschillende mogelijkheden om datums weer te geven in OWL Time.

Als ik naar de vorige versie van de dataset kijk zou ik dit keer sowieso de relatie tussen een interval en een positie in de tijd beter willen vastleggen. In de oude versie wordt time:hasBeginning nog niet toegepast... Ik merk ook dat ik een domme typo heb gemaakt (time:isXSDDate in plaats van time:inXSDDate). Met andere woorden: ruimte voor verbering!

Gebruik 1 eigenschap met een complexe literal

Dit is relatief eenvoudig: een event is een interval. De tijd wordt toegekend aan het begin van dat interval:

[ a time:Interval;
  time:hasBeginning
    [ a time:Position;
      time:inXSDDate "2020-02-01"^^xsd:date ] ].

^ Er zijn ook varianten voor wanneer de dag en dag+maand onbekend zijn (time:inXSDgYear en time:inXSDgYearMonth). Dit is de meest eenvoudige oplossing. Ik zou deze toepassen, tenzij er redenen zijn om dit niet te doen.

Gebruik meerdere eigenschappen met eenvoudige literals

Dit is iets complexer: een event is nog steeds een interval. De tijd wordt nog steeds toegekend aan het begin van dat interval, maar hiervoor worden meerdere afzonderlijke eigenschappen gebruikt:

[ a time:Interval;
  time:hasBeginning
    [ a time:Position;
      time:inDateTime
        [ a time:DateTimeDescription;
          time:day "---01"^^xsd:gDay;
          time:month "--02"^^xsd:gMonth;
          time:year "2020"^^xsd:gYear ] ] ].

^ Dit lijkt iets meer op jouw voorbeeld, waarbij de dag, maand en jaar los worden gerepresenteerd. Ik weet alleen niet zeker of deze representatie echt iets toevoegt voor deze dataset.

kad-beekw commented 3 years ago

Untitled Diagram-Page-6