Ontologien in XHTML/RDFa

Für's Erste stehen hier nur meine Notizen und Anmerkungen zu diesem Thema. Noch bin ich dabei, eine vernünftige Notation zu entwickeln. Der Inhalt dieser Seite wird sich also in nächster Zeit sehr ändern.

Verteilte Schnipsel

Im OWL-Beispiel ist es bereits angeklungen, ohne dass ich bislang darauf eingegangen wäre: Eine Definition kann auch an mehreren Stellen verteilt vorkommen. Hier noch einmal das Beispiel aus der vorigen Seite:

owl:Thing rdf:ID="Harry_Potter_und_der_Stein_der_Weisen"/ owl:Thing rdf:about="#Harry_Potter_und_der_Stein_der_Weisen" rdf:type rdf:resource="#Buch"/ /owl:Thing

Zwischen der ersten Zeile und der zweiten Zeile könnte noch jede Menge anderer Text stehen, der für die Definition irrelevant sei. In der Tat haben wir hier eine Definition, die auf zwei voneinander völlig unabhängige Stellen verteilt ist. Die erste Zeile definiert einfach ein Ding. Die zweite Zeile definiert, dass ein Ding, dessen Definition woanders steht, der Klasse Buch angehört. Dieses "dessen Definition woanders steht", das wird durch das about Attribut angegeben.

Merke:

Dort, wo rdf:ID verwendet wird, dort steht die eigentliche Definition. Dort, wo about verwendet wird, dort wird auf eine Definition an anderer Stelle verwiesen. Der Inhalt des about Attributes ist eine URL, die auf die Stelle verweist, wo die Definition steht. Wenn es sich um eine Referenz in der gleichen Datei handelt, dann reicht der fragment identifier. Dieser ist gleich der rdf:ID der Definition plus einem vorangestellten #.

HTML

In HTML geht das prinzipiell genauso. Allerdings muss hier eventuell ein Attribut verwendet werden, das es erst ab XHTML 2.0 gibt. Oder eben auch für XHTML+RDFa. Praktischerweise heisst dieses Attribut genauso wie unter rdf: about.

dfn class="owl:Thing" id="Harry_Potter_und_der_Stein_der_Weisen"Harry Potter und der Stein der Weisen/dfn

Dies entspricht der ersten Zeile des rdf-Beispiels. Hier wird definiert, dass es sich bei dem hier definierten Ding um ein "Ding" im Sinne einer Ontologie handelt. Nichts weiter. Keine Aussage darüber, um was für eine Art Ding. Nach dieser Definition könnte beispielsweise ein inhaltlicher Auszug stehen. Irgendwann später, oder auch am Anfang, oder auch in einer ganz anderen Datei, könnte dann diese Definition ergänzt werden um die Aussage, dass es sich bei diesem "Ding" um ein "Buch" handelt (dass dieses Ding der Klasse Buch angehört):

[...] a href="#Buch" about="#Harry_Potter_und_der_Stein_der_Weisen" rev="owl:Thing"dieses Werk/a [...]

Dieses erstellt einen klickbaren Link und setzt das Ziel des Links (die Definition der Klasse "Buch") in Verbindung mit dem Ding an der Adresse #Harry_Potter_und_der_Stein_der_Weisen. Damit wird die Definition oben, die besagt, dass es sich um ein "Ding" im Sinne einer Ontologie handelt, ergänzt um die Aussage, dass eben dieses Ding der Klasse "Buch" angehört. So ganz nebenbei werden auch noch die Worte "dieses Werk" mit dem Ding namens "Harry_Potter_und_der_Stein_der_Weisen" in Verbindung gebracht, was aber für die Definition nicht relevant ist.

Möchte man statt eines klickbaren Links lieber eine unsichtbare und nicht klickbare Referenz einbauen, benötigt man statt des href Attributes ein anderes, das resource Attribut. Ebenso benötigt man dann ein anderes Element, zum Beispiel ein span:

[...] span resource="#Buch" about="#Harry_Potter_und_der_Stein_der_Weisen" rev="owl:Thing"dieses Werk/span [...]

Und sonst?

So ganz nebenbei kann man diese Notation auch für weitere Angaben verwenden, die nicht direkt Etwas mit einer Ontologie zu tun haben. Nehmen wir einmal an, irgendwo auf der Seite stünde noch der Satz "Joanne K. Rowlings wurde durch dieses Buch reich". Wir wissen, dass diese Joanne K. Rowlings die Autorin dieses Buches ist. Das steht in dem Satz nicht drin. Der Computer kann das also nicht wissen. Man kann es ihm aber explizit sagen:

span about="#Harry_Potter_und_der_Stein_der_Weisen" rev="dc:creator"Joanne K. Rowlings/span wurde durch dieses Buch reich.

Ein dc:creator ist nach Dublin Core ein Author von Etwas. Das rev Attribut wird verwendet, um auszusagen, dass dies hier der Author (die Authorin) von dem dort ist, auf das das about verweist. Diese Konstruktion sagt also aus, dass Etwas, von dem wir hier keine weiteren Aussagen haben, das die Bezeichnung (label)Joanne K. Rowlings hat, ein dc:creator von dem Ding ist, das an der Adresse (URL) #Harry_Potter_und_der_Stein_der_Weisen definiert ist.