MDTO van XML naar RDF

  • 26 sep
  • René Voorburg
  • ·
  • Aangepast 15 okt
  • 5
  • 366
  • Community manager KIA
René Voorburg
KIA Community
  • Rijnder Wever
  • Alice Strating
  • Community manager KIA

Heeft iemand toevallig al ervaring met het omzetten van MDTO in XML naar MDTO in RDF? Misschien ook een script of stylesheet om te delen?

Ik sta op het punt daar wat voor te maken maar bedacht me dat ik vast niet de eerste ben die zoiets nodig heeft.

Dank, René Voorburg

Reacties

5 reacties, meest recent: 2 oktober

Die had ik gezien. Ik probeerde daarmee eerst stap voor stap zelf een script te maken dat de MDTO XML omzet naar gevalideerde RDF, maar dat ging moeizaam. Ik heb toen aan ChatGTP gevraagd "Ik wil een script dat MDTO XML omzet naar MDTO RDF. In die map staan alle definities (xsd, beschrijving ontologie in rdf en - gecorrigeerde shacl) en alle voorbeeldbestanden in RDF en XML. Gebruik identifcatieKenmerk en identificatieBron om URI's voor de entiteiten te maken."

Dat was min of meer voldoende om een werkende converter te krijgen.

De output van de conversie gaf wel een paar validatie-fouten, oa. omdat sommige begrippen met identieke naam volgens de XML brondata in meerdere begrippenlijsten voorkomen. Het script maakte daar één entiteit die naar twee lijsten verwijst. Dat valideert niet. Is dit een fout in de voorbeelddata of in de werking van het script? Beter was het geweest als begrippen ook een identificatiekenmerk gebruiken als verwijzing, dan zou duidelijk zijn hoe met deze situatie om te gaan..

Daarnaast: als een een identificatieKenmerk een (externe) URI is dan wel ik graag direct naar die URI verwijzen en de hele verwijzingGegevens-structuur / entiteit vergeten. Als het het scrip zo laat werken dan geeft deze externe link een SHACL validatie-fout. Denk dat het des RDFs zou zijn om dit wel toe te staan.

Ik zal het script tzt delen via GitHub.

René Voorburg

Aangepast op 2 oktober

Hey Rene,

Zolang het Nationaal Archief RDF en XML ongeveer op gelijke voet zet, zie ik outputten en inlezen van RDF als functionaliteit binnen de scope van de MDTO python library die ik beheer: https://github.com/Regionaal-Archief-Rivierenland/mdto.py

Ik accepteer pull requests, als je zin hebt! (als je twijfelt over de vorm, kunnen we mailen)

Ik dacht zelf iets als dit:

  
    from mdto import Informatieobject

    # lees XML bestand in
    informatieobject = Informatieobject.from_xml('document-1234.xml')
    # schreef 'm weer weg
    informatieobject.save('document-1234.rdf')
  

Het meeste werk zit 'm denk ik in `save` zo aanpassen dat ie raadt wat je wil doen aan de hand van de bestandextensie — en het wegschrijven van RDF supporten, ofc.

Ik heb de interface van de library nog niet definitief vastgesteld (ik niet weet of de functie `from_xml ` bijv zo blijft heten; misschien is een generiekere naam beter), maar dit is in grote lijnen wel hoe het gaat zijn, en hoe ik conversies tussen XML/RDF/JSON altijd voor me zag.

Rijnder Wever

Aangepast op 2 oktober


Daarnaast: als een een identificatieKenmerk een (externe) URI is dan wel ik graag direct naar die URI verwijzen en de hele verwijzingGegevens-structuur / entiteit vergeten. Als het het scrip zo laat werken dan geeft deze externe link een SHACL validatie-fout. Denk dat het des RDFs zou zijn om dit wel toe te staan.


Dat lijkt me inderdaad meer canonical RDF, maar ik weet niet of uitzonderingen of afwijkingen inbouwen de way is. Mijn library gaat in ieder geval voor conforme MDTO, eventuele stommiteiten rondom MDTO zo nodig inbegrepen. De meer lange termijn oplossing is om het NA te wijzen op dit soort verbeterpunten, maar ergens twijfel ik of ze heel happig zijn. Voor zover ik begreep is het RDF schema momenteel "niet zo officieel" als de XSD.

Rijnder Wever

Het conversiescript is hier te vinden:
https://github.com/RVoorburg-RAZU/mdtoxml2rdf

Het gebruikt een andere SHACL dan die van het NA omdat die SHACL niet correct opgezet is (zie https://github.com/Regionaal-Archief-Zuid-Utrecht/MDTO-RDF)

Disclaimer is dat het met vibe-coding gemaakt is, ik heb hiervoor zelf geen regel Python geschreven.

Ik denk dat dit conversiescript ook een nuttige validatie kan bieden op aangeleverde MDTO, mn wat betreft de referentiële integriteit. Wij op het RAZU zullen de geproduceerde MDTO RDF uiteindelijk omzetten naar onze eigen variant van MDTO (die we LDTO noemen) die we - om dat woord ook te gebruiken - meer canonical RDF is. In ons edepot zullen we zowel de origineel aangeleverde MDTO als de via conversie (en verrijking) geproduceerde MDTO (LDTO) als RDF opslaan.

Als we een andere route moeten volgen voor het maken van de RDF metadata, dan zou mdto.py voor ons wellicht ook handig kunnen zijn (bijvoorbeeld als de metadata in een csv komt).

René Voorburg