Informatievlaanderen / OSLO-SpecificationGenerator

Generates HTML specification pages based on RDF vocabularies.
1 stars 7 forks source link

Niet-determinitisch falen bij genereren vocabularium html met verkeerde csv_contributor_role_column #17

Closed mvanbrab closed 6 years ago

mvanbrab commented 6 years ago

Als in een oproep van generate_vocabulary.py --contributors (etc) de kolom, aangeduid met --csv_contributor_role_column, niet overeenkomt met de naam van de vocabulary, dan resulteert dat de ene keer in een foutmelding + geen nieuwe output, de andere keer in geen foutmelding + wel nieuwe output.

Voorgestelde oplossing: een foutmelding geven op plaats (*) aangeduid in de analyse hieronder.

Analyse:

De output .rdf van generate_vocabulary.py --contributors (etc) bevat een sectie waarbij xxxx is afgeleid van de aangeduide kolomheader.

Wanneer dan later die .rdf gemerged wordt met de .ttl die uit EA-to-RDF komt, in een oproep van generate_vocabulary.py --merge (etc), bevat het finale .ttl bestand een sectie en een sectie waarin xxxx zoals hierboven en yyyy de vocabularium naam zoals in de .ttl uit EA-to-RDF.

Een voorbeeld: (adres.ttl, extensie gewijzigd in .txt voor github): adres.txt. In dit voorbeeld is xxxx=generiek (omdat Generiek werd opgegeven als kolom) en yyyy=adres (het vocabularium waarvoor de output wordt gegenereerd).

(*) Hier een foutmelding geven op de twee verschillende secties zou helpen!

Als dan in de finale stap met een oproep van generate_vocabulary de html wordt gegenereerd, geeft dit (random) al dan niet een foutmelding. De foutmelding is van de vorm: jinja2.exceptions.UndefinedError: 'collections.OrderedDict object' has no attribute 'class_nl:http://www.w3.org/ns/locn#Yyyy' In geval van foutmelding is er geen nieuwe html output, in het andere geval wel.

wdullaer commented 6 years ago

Dus de foutmelding wordt veroorzaakt omdat de template maar 1 <owl:Ontology /> tag aan kan. Afhankeljk van welke hij eerst ziet krijg je dan dus die fout of niet?

Moeten we dan wel zo een tag genereren wanneer we de contributors parsen?

mvanbrab commented 6 years ago

Als in de oproep generate_vocabulary.py --contributors iets anders zou worden gegenereerd, wat dan correct opgevangen wordt in generate_vocabulary.py --merge, dan zou dat even goed zijn als oplossing. Alleen is de tussentijds .ttl dan anders. Is dat niet moeilijker als oplossing dan gewoon kijken als voor alle owl:Ontology tags de waarde van rdf:about hetzelfde is?

wdullaer commented 6 years ago

De root cause hier is dat de ontology waar de contributors in zitten niet noodzakelijk gelijk is aan de ontology die we proberen omzetten naar HTML.

Dit kan opgelost worden door de workflow aan te passen waarmee de contributors toegevoegd worden. Als we de contributor triples rechtstreeks toevoegen aan de ontology in plaats van eerste apart om te zetten naar RDF en dan te mergen, kan dit probleem zich niet voor doen.

Ik heb dit al werkend lokaal, maar moet de code nog een beetje opkuisen.