Loading...
 

Reification für temporale und andere Metainformationen in RDF

mathiasp Monday April 11, 2022

Da mein aktuelles Projekt TerraformingTerra die Zeit als eine grundlegende Dimension von allen Daten und Informationen hat, habe ich mir vorhandene Ontologien daraufhin angeschaut.

Aber weder die auf Umweltinformationen ausgerichtete Environment Ontology , noch die sehr gute, geschäftlich ausgerichtete Ontologie gist scheinen hierauf durchgehend Wert zu legen.

Und ich verstehe das: alles mit einer Zeitinformation zu versehen macht Abfragen komplexer und verlängert die Antwortzeiten. Für viele Anwendungen ist das nicht erwünscht und vielleicht nicht erforderlich.

Bei meiner Anwendung sollen nun aber Informationen, Webseiten, Visualsierungen meist in Batchläufen erzeugt werden, und das bei einem Thema, das Dekaden umfasst. Mich stören also lange Laufzeiten nicht unbedingt - zumindest sage ich das jetzt einmal voraus.

Also scheine ich in den sauren Apfel beißen zu müssen, und mir eine eigene Ontologie aufbauen zu müssen. Ich bin hier noch nicht am Ende meiner Überlegungen, denn das ist an sich zu (zeit-) aufwändig, aber hier mal meine Überlegungen zu einer Umsetzung.

Reifizierung in RDF

RDF* scheidet für mich aus, da weder OWL noch SHACL es unterstützen.


Ich meine hier nicht den furchtbaren syntaktischen Krampf, der bei RDF eingeführt wurde, um ein Triple mit Metadaten auszustatten.

Ich meine, Properties zu Entities wandeln: :MartinMüller foaf:mbox <mailto:martinmüller@example.com> wird so zu ex:hasMbox1 a ex:hasMbox; ex:mboxURN <martinmüller@example.com; ex:mboxAdressee :MartinMüller..

And yes, in many contexts that ex:hasMbox1 could be a blank node, but wie don't like blank nodes ;)

Jetzt haben wir die Eigenschaft foaf:hasMbox ein ein "Ding" verwandelt, und daran können wir beliebig viele weitere Informationen anhängen.

ex:hasMbox1 gist:actualStartDateTime "1999-01-01T00:00+01:00". notiert so den Moment, ab dem diese Email für diesen Adressaten tatsächlich konfiguriert war.

Mit ex:hasMbox1 gist:plannedStartDateTime "1998-11-01T00:00+01:00". kann so auch notiert werden, dass diese Email bereits zwei Monate früher aktiv sein sollte.

Wir können jetzt aber auch schreiben ex:hasMbox1 gist:isUnderJurisdictionOf :myDepartment. um festzuhalten, wer über diese Email entscheiden darf, oder weitergehend ex:Approval1 a myOnt:Approval; gist:hasParticipant ex:hasMbox1; gist:hasParty :MartinMüller; ex:hasApprovingAgent :myDepartment; gist:hasActualStartDateTime "1998-11-01T00:00+.01:00..

Auch wenn das jetzt eher einfache Beispiele anhand der Mailadresse eines Mitarbeiters waren, zeiges diese m.E., dass diese Struktur temporale und andere Metainformationen gut unterstützt.

Programmier-API für RDF


Neben der weiteren Arbeit an einer so aufgebauten Ontologie interessiert mich jetzt erst einmal eine elegante und leistungsfähige API, um mit Graphdaten dieser Art in einer Programmiersprache umzugehen.

Alle RDF-APIs, die ich bisher kennengelernt habe, sind eher hinderlich, und verstellen den Blick auf die im Grunde einfache Triple-Struktur.

Ich denke, das ist meine nächste Aufgabe: existierende APIs für RDF vergleichen.

Und eine gute Graph-API für Clojure kann ich hier schon einmal anteasern: iGraph, das so beschrieben wird: "IGraph defines a protocol which aims to provide a general interface to
a variety of graph-based representations (RDF, datascript, datomic,
loom, ...)".

Interessant und ein deutlicher Sprung von Java-APIs.