Zum Inhalt springen

Websiteentwicklung: XHTML: RDFa

Aus Wikibooks

Zusätzliche Semantik- und Strukturinformation für XHTML: RDFa

[Bearbeiten]

Mit dem RDFa-Modul bieten die XHTML+RDFa-Varianten von XHTML die Möglichkeit, Strukturen genauer auszuzeichnen und die inhaltliche, semantische Bedeutung genauer zu benennen.

HTML und XHTML alleine ohne dieses Modul haben bereits einige Elemente, die es Autoren ermöglichen, Strukturen gemäß ihrem Inhalt auszuzeichnen. Allerdings gibt es da größere allgemeine Lücken und XHTML geht für spezielle Anwendungen praktisch nie so weit ins Detail, dass damit wirklich präzise die inhaltliche Struktur gekennzeichnet werden könnte.

Ziel einer semantischen Auszeichnung von Inhalt ist immer, die Struktur objektiv und eindeutig zu kennzeichnen, etwa dass es sich um eine Überschrift, einen Absatz, die Strophe oder Zeile eines Gedichtes handelt, damit der Leser im Bedarfsfalle eindeutig und unabhängig von der aktuellen Präsentation und ohne weiteren Kontext feststellen kann, um was für eine Struktur es sich handelt. Oder wenn ein Datum mit Uhrzeit angegeben wird, soll eindeutig und unabhängig von lokalen Dialekten, Schreibweisen und Zeitzonen festliegen, um welches Datum und welche Uhrzeit es sich handelt.

Während es vielen menschlichen Nutzern oft noch leicht fällt, die Bedeutung einer Struktur aus dem Kontext heraus richtig, also im Sinne des Autors zu interpretieren, fällt dies Programmen zumeist deutlich schwerer. Bereits bei dem Beispiel mit Datum und Uhrzeit können die Interpretationen von lokalen Dialekten allerdings skuril werden.

Programmen kann der Zugriff und die Weiterverarbeitung von Information wiederum deutlich erleichtert werden, wenn diese strukturiert und in definierter Form angeboten wird. Diese Nutzergruppe, die ja zumeist dazu verwendet wird, um Information für menschliche Nutzer weiter aufzuarbeiten oder erst einmal aufzufinden, profitiert also ebenfalls von eindeutigen Strukturinformationen. Neben dem effektiveren Auffinden von Information an sich kann es sich so auch vereinfachen, etwa Termine in einen Kalender zu kopieren. Korrelationen zwischen Inhalten verschiedener Projekte im internet sind so ebenfalls leichter anzugeben. Es gibt sogar Strukturen, mit denen über Verweise soziale Relationen zwischen Personen angegeben werden, wobei die Verweise dann typisch auf Daten zeigen, die die jeweilige Person repräsentieren oder Daten darüber, wie man diese kontaktiert. So können Personen im Bedarfsfalle - warum auch immer sie das Bedürfnis dazu haben mögen - ihr soziales Netzwerk offenbaren, um andere über Bezüge zwischen Personen zu informieren, die somit Diskussionen oder Auseinandersetzungen, Interaktionen zwischen Personen besser folgen können.

Da nun XHTML allein nicht für alle möglichen Arten von Inhalten wirklich detaillierte Auszeichungsstrukturen bieten kann, wird es mit RDFa (Resource Description Framework in Attributes), einem Abkömmling von RDF (Resource Description Framework), möglich, die Struktur von Inhalten genauer festzulegen und dabei im Bedarfsfalle genauer mit Hilfe anderer Formate festzulegen. Wie der Name schon andeutet, handelt es sich um eine Struktur, mit der Ressourcen genauer beschrieben werden können. Im Falle von RDFa werden dazu einige allgemein verwendbare Attribute in XHTML verwendet, um diese Struktur anwendbar zu machen. Das ebenfalls verwendbare RDF geht hingegen eher von Elementstrukturen aus, um das gleiche Ziel zu erreichen. Durch die Attributstruktur kann RDFa jedoch in den normalen Textfluß integriert werden, während RDF im eigenen Namensraum als Metainformation agiert, die typisch in einem vom normalen Textfluß separierten Bereich notiert wird.


Für HTML5 gibt es derzeit (2012) auch einen Arbeitsentwurf für Mikrodata, welches ähnliche Ansätze verfolgt, aber weniger weit entwickelt ist. RDFa deckt jedenfalls alles ab, was mit Mikrodata möglich ist, bietet aber bei Bedarf mehr Strukturen, um die Information noch detaillierter zu kennzeichnen. Die Attribute von Mikrodata heißen jedenfalls anders und sind in XHTML+RDFa nicht definiert.

Einführendes Beispiel

[Bearbeiten]

Um das Prinzip grob zu erläutern, sei folgender Text (flash fiction, 'Kürzestgeschichte') gegeben:

<div>
<h1>Anke, bitte komm zurück!</h1>
<div>Rainer Teuscher</div>
<div>2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit Monika ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
Dieter und Petra können das gar nicht gesehen haben. 
Es war alles dunkel.
</p>

<p>Lizenz: 
<a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA 3.0</a>
</p>
<address>Rainer Teuscher,
  <a href="mailto:rainer.teuscher@example.org">rainer.teuscher@example.org</a>
</address>
</div>

Nun läßt sich für den menschlichen Nutzer recht leicht erahnen, dass das h1-Element die Überschrift der Kürzestgeschichte enthält, das zweite div den Autor, das dritte div das Datum der Entstehung oder Erstveröffentlichung und der erste Absatz die eigentliche Geschichte, der zweite eine Lizenzangabe, gefolgt von einer Kontaktmöglichkeit. Die im ersten Absatz vorkommenden Personen sind vermutlich Freunde oder Bekannte. 'Samstag' ist eine Datumsangabe, die man gegebenenfalls noch präzisieren könnte, um einen eindeutigen Bezug zum Entstehungsdatum anzubieten.

Für Titel, Autor, Datum etc bietet Dublin Core (DCMI) entsprechende Angaben, für den Bezug zwischen Personen bietet sich FOAF an (friend of a friend).

Damit könnte der Text wie folgt präziser gekennzeichnet werden:

<div id="ff" about="#ff">
<h1 property="http://purl.org/dc/terms/title">Anke, bitte komm zurück!</h1>
<div property="http://purl.org/dc/terms/creator">Rainer Teuscher</div>
<div property="http://purl.org/dc/terms/created">2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit Monika ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
Dieter und Petra können das gar nicht gesehen haben. 
Es war alles dunkel.
</p>

<p>Lizenz: 
<a property="http://creativecommons.org/ns#license" 
   href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>
</p>
<address typeof="http://xmlns.com/foaf/0.1/Person">
  <span property="http://xmlns.com/foaf/0.1/name">Rainer Teuscher</span>,
  <a property="http://xmlns.com/foaf/0.1/mbox"
  href="mailto:rainer.teuscher@example.org">rainer.teuscher@example.org</a>
</address>
</div>

Nun wiederholen sich einige Adressen häufiger, was den Quelltext unübersichtlicher macht. Hat man nun ein Element, welches nur Strukturinformationen aus einer Quelle verwendet, so kann man mit dem Attribut vocab (nur Version RDFa 1.1, nicht 1.0) abkürzen:

<div id="ff" about="#ff" vocab="http://purl.org/dc/terms/">
<h1 property="title">Anke, bitte komm zurück!</h1>
<div property="creator">Rainer Teuscher</div>
<div property="created">2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit Monika ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
Dieter und Petra können das gar nicht gesehen haben. 
Es war alles dunkel.
</p>

<p>Lizenz: 
<a property="http://creativecommons.org/ns#license" 
   href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>
</p>
<address vocab="http://xmlns.com/foaf/0.1/" typeof="Person">
  <span property="name">Rainer Teuscher</span>,
  <a property="mbox"
  href="mailto:rainer.teuscher@example.org">rainer.teuscher@example.org</a>
</address>
</div>

Weil vocab nur in 1.1 definiert ist, wird es natürlich nicht bei Programmen funktionieren, die lediglich 1.0 interpretieren, daher sollte man sich nicht auf vocab verlassen.

Ausgeschriebene Attributwerte wie hier die für die Lizenz sind von der Abkürzung nicht betroffen, auch wenn ein Kindelement, wie hier address ein eigenes Vokabular einführt, so gilt dies dann für dessen Kindelemente.

Alternativ kann man auch in einem übergeordneten Element Präfixe definieren, was in Version 1.0 besonders relevant ist, weil es dort kein Attribut vocab gibt, ist aber auch dann letztlich einfacher und effektiver, wenn die Vokabularien aus verschiedenen Quellen stark vermischt sind oder sogar bei einem Element verwendet werden.

<div id="ff" about="#ff"
  xmlns:dc="http://purl.org/dc/terms/"
  xmlns:cc="http://creativecommons.org/ns#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
>
<h1 property="dc:title">Anke, bitte komm zurück!</h1>
<div property="dc:creator">Rainer Teuscher</div>
<div property="dc:created">2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit <span typeof="foaf:Person" property="foaf:name">Monika</span>
ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
<span typeof="foaf:Person" property="foaf:name">Dieter</span> und
<span typeof="foaf:Person" property="foaf:name">Petra</span> 
können das gar nicht gesehen haben.
Es war alles dunkel.
</p>

<p>Lizenz: 
<a property="cc:license"
   href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>
</p>
<address typeof="foaf:Person">
  <span property="foaf:name">Rainer Teuscher</span>,
  <a property="foaf:mbox"
     href="mailto:rainer.teuscher@example.org"
     >rainer.teuscher@example.org</a>
</address>
</div>

Statt die Präfixe per xmlns zu definieren, können diese bei RDFa 1.1 auch im Attribut prefix notiert werden (welches es in RDFa 1.0 nicht gibt), dies ist die in RDFa 1.1 neu definierte Methode:

<div id="ff" about="#ff"
  prefix="
    dc: http://purl.org/dc/terms/
    cc: http://creativecommons.org/ns#
    foaf: http://xmlns.com/foaf/0.1/ "
>
...
</div>

Der Vorteil der Methode per xmlns liegt nun darin, dass sie für beide Versionen funktioniert. Die 1.1-Notation wird hingegen nur bei Programmen funktionieren, die auch die Version 1.1 interpretieren und nicht nur 1.0.

Etwas Ordnung kann man natürlich auch schaffen, wenn man ein einziges Vokabular findet, welches alle oder die meisten relevanten Strukturen definiert. Hier fehlt etwa noch die Angabe, dass es sich überhaupt um ein literarisches Werk handelt und gegebenenfalls von welchem Typ es ist.

CURIEs und Attributwerte

[Bearbeiten]

Der Wert eines Attributes von RDFa ist zumeist eine IRI oder eine Abkürzung davon, wie in obigen Beispielen zu sehen, etwa:

property="foaf:name"

Solch ein Wert nennt sich dann nicht IRI, sondern CURIE, besteht aus dem zuvor im Dokument definierten Präfix, hier 'foaf', gefolgt von einem Doppelpunkt, gefolgt vom Rest der IRI der Eigenschaft, denn der für den Präfix definierte Wert und dieser Rest müssen zusammen wieder die komplette IRI ergeben. In den Beispielen oben ist etwa definiert:

xmlns:foaf="http://xmlns.com/foaf/0.1/"

zusammengesetzt ergibt sich dann wieder die IRI:

http://xmlns.com/foaf/0.1/name

Dann gibt es auch noch die sogenannte sichere CURIE (save CURIE). Diese wird statt einer CURIE verwendet, wenn das Attribut auch eine komplette IRI beinhalten kann, um Verwechslungen zu vermeiden. Die besteht dann aus einer CURIE, die mit eckigen Klammern eingeklammert ist, also etwa '[foaf:name]'.

Version 1.1 führt zudem noch dem Begriff Term ein, das ist im Wesentlichen das, was notiert wird, wenn mittels vocab das Vokabular festgelegt ist.

Bei

  <span vocab="http://xmlns.com/foaf/0.1/" 
        typeof="Person" property="name">Rainer Teuscher</span>

sind also 'Person' und 'name' Terme.

Im Übrigen wird hier immer URI und IRI synomym verwendet. IRI ist die internationalisierte Variante einer URI, einer internet-Adresse.


Tripel - Subjekt, Prädikat, Objekt

[Bearbeiten]

Formal wird eine Aussage immer als Tripel geführt. Es gehören also immer drei Dinge zu einer Aussage. Das erste ist das Subjekt, dies gibt an, worüber, über was oder wen die Aussage getroffen wird. Das zweite ist die Eigenschaft oder das Prädikat, worauf sich die Aussage über das Subjekt bezieht oder was mit der Aussage definiert werden soll. Das dritte ist das Objekt, also die eigentliche Information, was über die Eigenschaft des Subjektes ausgesagt werden soll.

Nimmt man etwa die Aussage: 'Lisa liebt Manni.' Lisa ist dann das Subjekt, die Eigenschaft ist lieben und das Objekt ist hier Manni.

Typisch sind für RDFa eher Aussagen wie: 'Subjekt A hat die Eigenschaft B mit dem Wert C.' Gut, Subjekt ist A, Eigenschaft oder Prädikat ist B und C ist das Objekt.

Solche Tripel müssen immer gebildet werden, damit eine eindeutig interpretierbare Aussage zustande kommt. RDFa impliziert jedoch oft Subjekt und Objekt, sofern über diese nicht explizit Angaben gemacht werden, so dass sich zumeist automatisch ein Tripel ergibt. Es ist allerdings Aufgabe des Autors darauf zu achten, dass das Tripel auch einen Sinn ergibt. Zu dem Zwecke werden Aussagen automatisch verkettet sindgemäß: 'Subjekt A hat die Eigenschaft B mit dem Wert C. C hat die Eigenschaft D mit dem Wert E (der durch Ressource R repräsentiert wird).'

<div about="#FF_Reiner01" 
     property="dc:creator">Rainer Teuscher</div>

Sagt also aus, dass das Dokumentfragment FF_Reiner01 als Subjekt die Eigenschaft 'dc:creator' (Autor) hat, wobei 'Rainer Teuscher' das Objekt ist, also der Autor selbst oder der Wert der Eigenschaft des Subjektes. So wird aus einem einfachen div-Element von XHTML ein sehr spezifisches Element, welches eine Autorenangabe zu einem Werk liefert.

Attribute

[Bearbeiten]

Attribut about

[Bearbeiten]

about gibt das Subjekt einer Aussage an, also worum es geht. Der Wert ist im Wesentlichen eine IRI zu einem Dokument oder Dokumentfragment, auf welches sich die Aussage bezieht. Der Wert kann auch eine sichere CURIE sein. In Version 1.1 ist auch eine CURIE möglich, falls die Zuordnung eindeutig ist, was etwa per vocab erreicht werden kann.

Bei Aussagen über das aktuelle Dokument ist dann entsprechend die IRI des Dokumentes absolut oder relativ anzugeben. Einfacher ist es aber noch, einfach about="" zu notieren. Der leere Attributwert zeigt immer auf das aktuelle Dokument.

Hinsichtlich der in der IRI verwendbaren Protokolle gibt es keine Einschränkungen, ein Buch läßt sich etwa auch über die ISBN identifizieren:

about="urn:ISBN:3933342279"

Ist ansonsten about nicht angegeben, so ist im Wesentlichen das Objekt des Elternelementes das Subjekt der Aussage. Es gibt allerdings noch andere Möglichkeiten, ein Subjekt zu definieren, falls about nicht notiert ist.

Durch Anhängen eines Fragmentidentifizierers kann auch eine Instanz referenziert werden, die anderweitig mittels resource definiert ist. Mit about="#me" oder "#myself" wird etwa häufig eine Instanz geschaffen, die das eigene Ich des Autors einer Seite beschreibt, so dass dieser und andere Aussagen formal als über sich selbst kennzeichnen kann. Das Problem bei realen Objekten ist ja, dass diese selbst keine IRIs haben, allenfalls Beschreibungen dieser Objekte haben sowas, von daher ist es ohne solche Instanzen schwierig, auf reale Personen oder Objekte zu zeigen, um formal eine Aussage darüber zu machen.

Formal logisch ist das natürlich recht heikel, weil '#me' natürlich ebensowenig auf eine Person zeigt wie irgendwas sonst - und es gibt ja auch keinen technischen Unterschied zu '#you' oder '#ich' oder '#du' oder '#MuellersKuh'. Selbst wenn es auf der entsprechenden Seite ein Fragment mit dem Identifizierer gibt, so handelt es sich nach wie vor um ein Dokumentfragment und nicht um eine Person. Um das Problem zu vermeiden, sollte es also auf der Seite solch einen Fragmentidentifizierer nicht geben, sondern nur das Attribut resource mit dem Wert. Mehr dazu beim Attribut resource.

Beispiel:

<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
<div typeof="foaf:Person" about="#me">
   <p property="foaf:name">
     Rainer Teuscher
   </p>

   <p>
     Email: <a rel="foaf:mbox" 
               href="mailto:rainer.teuscher@example.org"
            >rainer.teuscher@example.org</a>
   </p>

   <p>
     Telephon: <a rel="foaf:phone" 
                  href="tel:000666"
               >000666</a>
   </p>

   <p>
     Homepage: <a rel="foaf:homepage" 
                  href="http://rainer-teuscher.example.org"
               >http://rainer-teuscher.example.org</a>
   </p>
</div>
<div typeof="foaf:Person" 
     about="http://anna-teuscher.example.org/uebermich/#me">
   <p property="foaf:name">
     Anna Teuscher
   </p>

   <p>
     Email: <a rel="foaf:mbox" 
               href="mailto:anna.teuscher@example.org"
            >anna.teuscher@example.org</a>
   </p>

   <p>
     Telephon: <a rel="foaf:phone" 
                  href="tel:000666"
               >000666</a>
   </p>

   <p>
     Homepage: <a rel="foaf:homepage" 
                  href="http://anna-teuscher.example.org"
               >http://anna-teuscher.example.org</a>
   </p>
</div>
</div>


Attribut property

[Bearbeiten]

property gibt das Prädikat oder die Eigenschaft einer Aussage an, also in welcher Relation das Subjekt zum Objekt steht. Sofern nicht anders angegeben, ist der Elementinhalt das Objekt, um welches es geht.

Der Wert ist in Version 1.0 eine mit Leerzeichen separierte Liste von CURIEs. Bei Version 1.1 kann es sich um eine mit Leerzeichen separierte Liste von Termen, CURIEs, sichere CURIEs oder IRIs handeln.

Beispiel:

<div xmlns:dc="http://purl.org/dc/terms/"
     xmlns:bibo="http://purl.org/ontology/bibo/"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<div about="urn:ISBN:3933342279" typeof="bibo:Book">

<div property="dc:title">Direkte Beobachtung von atomaren und Molekularen Stoßpaaren</div>
<div property="dc:creator">Dr. Olaf Hoffmann</div>
<div property="dc:abstract">Die optische Anregung von Stoßpaaren...</div>
<div property="dc:created" datatype="xsd:dateTime">1998</div>
<div property="dc:dateAccepted" datatype="xsd:dateTime">1998-12-22</div>
<div property="dc:language" content="de">deutsch</div>
</div>
</div>

Attribut datatype

[Bearbeiten]

datatype gibt den Datentyp an, indem eine Information angegeben ist. Der Wert ist eine CURIE zur Definition des Datentyps.

In Version 1.1 ist auch ein Term oder eine absolute IRI möglich.

Beispiel siehe Eigenschaft property.

Attribut typeof

[Bearbeiten]

typeof gibt an, mit welchen Datentypen das Subjekt assoziiert ist. Der Wert ist eine mit Leerzeichen separierte Liste von CURIEs zu den Definitionen der Datentypen.

In Version 1.1 können auch Terme oder absolute IRIs Listenpunkte sein.

Beispiel siehe Eigenschaft property.

Attribut content

[Bearbeiten]

content ist ein Ersatz für den Inhalt des Elementes (oder bei einem inhaltsleeren Element offenbar der Inhalt selbst). Die als Wert notierte Zeichenkette ist ein Textäquivalent für den Inhalt. Sofern datatype ebenfalls angegeben ist, entspricht die Zeichenkette der maschinenlesbaren Variante, während der Elementinhalt eine freiere Variante darstellt. Für eine formale Auswertung wird daher der Wert des Attributes verwendet statt der freien, schwerer zu interpretierenden Variante.

Beispiel als komplettes Dokument. Als Metainformation über das Dokument wird der Autor angegeben. Da das Element 'meta' in XHTML immer inhaltsleer ist, ist der Inhalt mit content anzugeben:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    version="XHTML+RDFa 1.0"
    xml:lang="de"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <head>
    <title>Beispieldokument</title>
    <meta property="dc:creator" content="Rainer Teuscher" />
  </head>
  <body>
    <p>...</p>
  </body>
</html>

Ansonsten wird der vorhandene Inhalt durch den von content ersetzt:

<p xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:l="http://purl.oclc.org/net/hoffmann/lml/#">
Mit Monika ist am <span property="l:time" datatype="xsd:dateTime"
content="2010-12-11T18:00">Samstag</span> 
ganz ehrlich GAR NICHTS gelaufen.

Genaugenommen ist hier datatype sogar überflüssig, weil LML für 'time' ohnehin bereits das internationale Datumsformat vorsieht, was auch die Bedeutung von 'xsd:dateTime' ist.


Attribute rel und rev

[Bearbeiten]

rel und rev sind bereits aus frühreren XHTML-Versionen bekannt, sind mit RDFa jedoch allgemein verwendbar und enthalten eine mit Leerzeichen separierte Liste von CURIEs, um Beziehungen oder Prädikate zwischen zwei Ressourcen anzugeben.

In Version 1.1 können auch Terme oder absolute IRIs Listenpunkte sein.

Beispiel siehe Eigenschaft about.

Attribut resource

[Bearbeiten]

resource ist eine Möglichkeit, das Objekt einer Aussage zu definieren, sofern es nicht der Elementinhalt selbst ist. Der Wert ist eine IRI oder eine sichere CURIE zu einem Dokument oder Dokumentfragment.

In Version 1.1 ist auch noch eine CURIE möglich.

Wie beim Attribut about bereits diskutiert, kann so eine Instanz erzeugt werden, um auf diese zu verweisen, ohne einen Fragmentidentifizierer (Attribut id zu verwenden, um ein Dokumentfragment zu kennzeichnen).

Ist es etwa beim Beispiel unter about notwendig, dass Rainer sich und Anna mehrmals erwähnen will, so kann er dies auch mit resource vorbereiten:

<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
<div typeof="foaf:Person" resource="#me">

etc Angaben zur eigenen Person

</div>
</div>

'foaf:Person' ist nun so definiert, dass klar ist, dass Information über eine Person notiert ist. Um deutlicher zu machen, um wen es sich handelt, lohnt es sich vielleicht noch per 'dc:creator' zu verdeutlichen, dass dieselbe Person, über welche die Rede ist, auch der Autor des Dokumentes ist, indem '#me' definiert wird.

Attribute src und href

[Bearbeiten]

Neben resource kann bei einigen Elementen mittels src oder href eine weitere Ressource angegeben werden, um einen Bezug herzustellen. Bei welchen Elementen die Attribute benutzt werden können, ist bei den jeweiligen Elementen angegeben.

So stellt etwa das src von einem Element img die IRI des Zielobjektes dar, es ist also nicht das Element selbst das Objekt der Aussage, sondern das Dokument oder Dokumentfragment mit der angegebenen IRI. Analog ist also das Dokument oder Dokumentfragment, welches als IRI in href von a notiert wird, das Zielobjekt der Aussage, nicht das a selbst.

Attribut vocab

[Bearbeiten]

Das Attribut ist nicht in RDFa 1.0 verfügbar. Ab RDFa 1.1 kann damit eine Abkürzung definiert werden, welche für ein Element und dessen Inhalt gilt, in dessen Startmarkierung das Attribut notiert wird. Der Teil in vocab repräsentiert ein Vokabular, einen Wortschatz, in welchem die verwendeten Strukturen definiert werden.

Der Wert ist eine IRI, folgendes Beispiel zeigt die Verwendung:

<div id="ff" vocab="http://purl.org/dc/terms/">
<h1 property="title">Anke, bitte komm zurück!</h1>
<h2 property="creator">Rainer Teuscher</h2>
<h3 property="created">2010-12-11</h3>
</div>

Mittels vocab wird hier der erste Teil einer IRI angegeben, die abgekürzt werden soll, hier als 'http://purl.org/dc/terms/'. Die Werte der RDFa-Attribute in den betroffenen Elementen, hier alle Attribute property werden dann durch Voranstellen dieseses ersten Teils zu vollständigen IRIs, hier also etwa 'http://purl.org/dc/terms/title'.

In RDFa 1.0 wird stattdessen ein Präfix mittels xmlns definiert und dieses dann in den Attributen vorangestellt, siehe Beispiele oben.

Attribut prefix

[Bearbeiten]

Das Attribut ist nicht in RDFa 1.0 verfügbar. Ab RDFa 1.1 können damit Präfixe definiert werden. Der Wert ist eine mit Leerzeichen separierte Liste von Definitionen. Eine Definition beginnt mit dem Präfix, gefolgt von einem Doppelpunkt, gefolgt von einem Leerzeichen, gefolgt von ersten Teil der abzukürzenden IRI, also dem jeweiligen Vokabular, welches durch den Präfix repräsentiert wird.

Attribut inlist

[Bearbeiten]

Das Attribut ist nicht in RDFa 1.0 verfügbar. Ab RDFa 1.1 kann damit eine Liste erzeugt werden, die assoziiert ist mit rel und property im gleichen Element. Das Objekt wird dann zur Liste des Prädikats hinzugefügt. Der Wert des Attributes wird ignoriert, kann also am besten leer bleiben.

In Erweiterung obigen Beispiels könnte man zum Beispiel noch weitere Autoren hinzufügen, nehmen wir 'Monika van Achtern'. Ist nun Rainer der Hauptautor und Monika die Koautorin, kommt es auf die Reihenfolge der Notierung an. Die RDF-Tripel unterscheiden von sich aus aber nicht die Reihenfolge, mit inlist wird sie aber bewahrt:

<div id="ff" xmlns:dc="http://purl.org/dc/terms/">
<h1 property="dc:title">Anke, bitte komm zurück!</h1>
<div property="dc:creator" inlist="">Rainer Teuscher</div>
<div property="dc:creator" inlist="">Monika van Achtern</div>
<div property="dc:created">2010-12-11</div>
...
</div>

Interpretation und Verkettung von Aussagen

[Bearbeiten]

RDFa hat die Aufgabe, eindeutige Aussagen zu kennzeichnen. Im täglichen Sprachgebrauch sind die Aussagen oft verkettet. Was für Menschen meist noch relativ einfach in einfache Einzelaussagen zu zerlegen ist, ist für Maschinen deutlich schwieriger, wenn keine präzisen Strukturen und Regeln vorliegen.

RDF und RDFa haben natürlich solche präzisen Regeln. Wie in der offiziellen Empfehlung soll das hier an einem Beispiel über Albert Einstein erläutert werden:

'Das Bild http://example.org/Einstein/Albert1905.jpg zeigt Albert, der am vierzehnten März 1879 im Deutschen Reich geboren wurde.'

Das kann man nun in vier Aussagen zerlegen:

  • Albert hat den Namen Albert Einstein.
  • Albert Einstein wurde am vierzehnten März 1879 geboren.
  • Albert Einstein wurde im Deutschen Reich geboren.
  • Ein Bild von Albert Einstein ist zu finden unter http://example.org/Einstein/Albert1905.jpg.

Die Aufgabe besteht nun darin, den Text formal so aufzubereiten, dass diese Aussagen maschinenlesbar aufbereitet und gleichzeitig als normaler Text verfügbar sind.

Die Eigenschaft Name ist zum Beispiel verbunden mit
http://xmlns.com/foaf/0.1/name
http://dbpedia.org/resource/Albert_Einstein, 'Albert Einstein'
Geburtsdatum gibt es mit
http://dbpedia.org/property/dateOfBirth '1879-03-14'

Geburtsort mit
http://dbpedia.org/property/birthPlace
http://dbpedia.org/resource/German_Empire, 'Deutsches Reich'

Abbild mit
http://xmlns.com/foaf/0.1/depiction
http://example.org/Einstein/Albert1905.jpg

'Albert Einstein' ist nun eine einfache Zeichenfolge, nicht weiter formalisierbar (englisch: plain literal.
'1879-03-14' ist wiederum ein Datum mit festgelegter maschinenlesbarer Syntax, also eine streng definierte Zeichenfolge (englisch: typed literal), während die einfache Zeichenfolge 'vierzehnter März 1879' viel schwieriger von Maschinen zu lesen ist.
Die IRI des Bildes ist bereits maschinenlesbar, das Bild selber so einfach natürlich nicht, obgleich immerhin digital, so braucht man doch sowas wie aufwendige Bilderkennungsprogramme, damit Maschinen eine Chance haben, darauf etwas zu erkennen. Das mag aber bei Albert Einstein sogar ganz gut klappen, der ist relativ bekannt und wirklich neue Bilder von ihm wird es auch nicht mehr geben.

Das Subjekt

[Bearbeiten]

Die Interpretation eines Dokumentes hinsichtlich RDF(a) beginnt im Grunde damit, das Subjekt zu identifizieren. Das anfängliche Subjekt ist repräsentiert durch die IRI des gesamten Dokumentes selbst. Aussagen beziehen sich also erst einmal auf dieses Dokument selbst. Daneben gibt es auch die Möglichkeit, das Subjekt neu zu setzen.

Davon abweichend kann mit xml:base oder mit dem Element base in XHTML auch die Basis-IRI direkt gesetzt sein und damit auch das anfängliche Subjekt.

Bei diesem typischen Beispieldokument gibt im Element meta das Attribut content also den Autor des Dokumentes an. Dass es sich um die Angabe des Autors handelt, wird mit dem Wert von property festgelegt:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    version="XHTML+RDFa 1.0"
    xml:lang="de"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <head>
    <title>Beispieldokument</title>
    <meta property="dc:creator" content="Rainer Teuscher" />
  </head>
  <body>
    <p>...</p>
  </body>
</html>

Auch bei dieser leicht abgewandelten Variante des Eingangsbeispiels beziehen sich die RDFa-Angaben zu Titel und Autor nach wie vor auf das ganze Dokument, auch wenn das Element title etwas anderes für den Titel nahelegt:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    version="XHTML+RDFa 1.0"
    xml:lang="de"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <head>
    <title>Kürzestgeschichten</title>
  </head>
  <body>
<div id="ff"
<h1 property="http://purl.org/dc/terms/title">Anke, bitte komm zurück!</h1>
<div property="http://purl.org/dc/terms/creator">Rainer Teuscher</div>
<div property="http://purl.org/dc/terms/created">2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit Monika ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
Dieter und Petra können das gar nicht gesehen haben. 
Es war alles dunkel.
</p>

<p>Lizenz: 
<a property="http://creativecommons.org/ns#license" 
   href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>
</p>
<address typeof="http://xmlns.com/foaf/0.1/Person">
  <span property="http://xmlns.com/foaf/0.1/name">Rainer Teuscher</span>,
  <a property="http://xmlns.com/foaf/0.1/mbox"
  href="mailto:rainer.teuscher@example.org">rainer.teuscher@example.org</a>
</address>
</div>
  </body>
</html>

Mit about kann nun gezielt angegeben werden, worauf sich die Angaben beziehen:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    version="XHTML+RDFa 1.0"
    xml:lang="de"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <head>
    <title>Kürzestgeschichten</title>
  </head>
  <body>
<div id="ff" about="#ff"
<h1 property="http://purl.org/dc/terms/title">Anke, bitte komm zurück!</h1>
<div property="http://purl.org/dc/terms/creator">Rainer Teuscher</div>
<div property="http://purl.org/dc/terms/created">2010-12-11</div>

<p>
Das sind alles Lügen! 
Mit Monika ist am Samstag ganz ehrlich GAR NICHTS gelaufen.
Dieter und Petra können das gar nicht gesehen haben. 
Es war alles dunkel.
</p>

<p>Lizenz: 
<a property="http://creativecommons.org/ns#license" 
   href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0</a>
</p>
<address typeof="http://xmlns.com/foaf/0.1/Person">
  <span property="http://xmlns.com/foaf/0.1/name">Rainer Teuscher</span>,
  <a property="http://xmlns.com/foaf/0.1/mbox"
  href="mailto:rainer.teuscher@example.org">rainer.teuscher@example.org</a>
</address>
</div>

<div id="ww" about="#ww">
<h1 property="http://purl.org/dc/terms/title">Der Unfall</h1>
<div property="http://purl.org/dc/terms/creator">Waldemar Waldschrat</div>
<div property="http://purl.org/dc/terms/created">2010-12-17</div>

<p>...</p>

</div>
  </body>
</html>

So ist es hier möglich, Rainers Text von Waldemars Text zu trennen. Aussagen darüber, wer für das Dokument zuständig ist, werden nicht erwähnt.

Entsprechend kann man auch Aussagen zu anderen Dokumenten machen:

<p about="http://example.org/svg/lorenz01.svg" 
   xmlns:dc="http://purl.org/dc/elements/1.1/">
Die 
<a href="http://example.org/svg/lorenz01.svg">Abbildung des Lorenzattraktors</a>
habe <span property="dc:creator" content="Daniel Rosenzweig">ich</span>
schon <span property="dc:created">2006</span> fertiggestellt.
</p>

Statt mit about kann auch anders ein neues Subjekt angegeben werden, typisch wird dann mit resource, src oder href etwa angegeben, worauf sich die Relation bezieht. Beim vorherigen Beispiel kann man etwa formulieren:

<div xmlns:dc="http://purl.org/dc/elements/1.1/">
<img src="http://example.org/svg/lorenz01.svg"
     alt="Lorenzattraktor" 
     rel="license" 
     resource="http://creativecommons.org/licenses/by-sa/3.0/"
     property="dc:creator" 
     content="Daniel Rosenzweig" />
</div>

Nach about haben src beziehungsweise href nächsthöhere Priorität bei der Festlegung des Subjekts, hier dreht sich also alles um das SVG-Dokument (in welchem man ebenfalls idealerweise diese Angaben per RDF notieren wird), zu welchem per rel und resource die Lizenz festgelegt wird und mit property auch noch der Autor angegeben wird.

Das Objekt

[Bearbeiten]

Wenn mit property das Prädikat oder die Eigenschaft festgelegt wird, liegt das Objekt zumeist als Inhalt des Elementes vor oder als Wert von content, welcher im Zweifelsfalle hinsichtlich der Maschinenlesbarkeit den Elementinhalt ersetzt.

Auch mit rel oder rev kann zusätzlich oder alternativ zu property ein Prädikat festgelegt werden. Das Objekt kann sich dann aus den IRIs ergeben, die gegebenenfalls mit href, src oder auch mit resource angegeben werden.

Genauer Ablauf der Interpretation von RDFa

[Bearbeiten]

0. Die Interpretation beginnt mit folgenden Voreinstellungen ('Kontext der Evaluation'):

  • Das anfängliche Subjekt ist gegeben durch den Basiswert (IRI des Dokumentes beziehungsweise Angabe per base oder xml:base.
  • Das anfängliche Objekt ist nicht gesetzt.
  • Die anfängliche Liste unvollständiger Tripel ist leer.
  • Die Listen-Abbildung ist leer.
  • Die Sprache ist nicht gesetzt.
  • Die Liste der IRI-Abbildungen ist leer.
  • Die Abbildung der Terme ist leer.
  • Das voreingestellte Vokabular ist leer.

1. Die Interpretation beginnt:

  • Die Ignorierungsmarkierung ist auf falsch gesetzt (Ignorierungsmarkierungen gelten für Elemente, die kein RDFa beinhalten).
  • Das neue Subjekt ist leer.
  • Die aktuelle Objekt-Ressource ist leer.
  • Die Ressource von typeof ist leer.
  • Die lokale Liste der IRI-Abbildungen wird auf die IRI-Abbildungsliste des Kontextes der Evaluation gesetzt.
  • Die Liste unvollständiger Tripel ist leer.
  • Die Listen-Abbildung wird auf die des Kontextes der Evaluation gesetzt.
  • Die aktuelle Sprache wird auf die des Kontextes der Evaluation gesetzt.
  • Die lokale Abbildung der Terme wird auf die des Kontextes der Evaluation gesetzt.
  • Das lokale voreingestellte Vokabular wird auf das des Kontextes der Evaluation gesetzt.

2. Nun wird das aktuelle Element hinsichtlich des zu verwendenden Vokabulars untersucht:

Das voreingestellte Vokabular wird vocab entnommen, sofern vorhanden. Ist der Wert leer, so wird das Vokabular zurückgesetzt. Ist vocab nicht gesetzt, wird das Vokabular beibehalten.

3. Als nächstes wird das aktuelle Element auf IRI-Abbildungen hin untersucht:

Die Abbildungen sind mit prefix oder mit xmlns: definiert, sofern vorhanden. Zuerst werden die xmlns:-Angaben berücksichtigt, dann die Liste in prefix von links nach rechts.

4. Sodann wird die Sprachinformation berücksichtigt:

Sofern mit xml:lang oder lang eine Sprache angegeben ist, wird diese verwendet, sonst die des Elternelementes. (Wenn aufwärts bis zum Wurzelelement keine Sprache notiert ist, ist die Sprache wie gewohnt unbekannt oder undefiniert.)

5. Der nächste Schritt hängt davon ab, ob rel oder rev angegeben sind. Falls nicht, gibt es zwei Möglichkeiten:

a) Es ist property angegeben, aber kein content oder datatype.
b) Sonst

Im Falle a) geht es wie folgt weiter:

Das Subjekt ist jenes, welches per about angegeben ist. Ist about nicht angegeben und es handelt sich um das Wurzelelement, so wird ein leeres about impliziert - es geht dann also um das aktuelle Dokument, beziehungsweise jenes, welches per 'base' oder xml:base angegeben ist. Ist ansonsten about nicht angegeben, gibt es ein Elternelement. Von diesem wird dann das Subjekt übernommen.

Ist typeof angegeben, wird, sofern angegeben, das Subjekt gemäß about zur typisierten Ressource. Ist about nicht angegeben und handelt es sich um das Wurzelelement, wird wie bei einem leeren about vorgegangen, um die typisierte Ressource zu bestimmen. Sonst wird die Ressource von resource verwendet, sofern angegeben, sonst von href, sofern angegeben, sonst von src, sofern angegeben, ansonsten wird als typisierte Ressource ein leerer Knoten angenommen (englisch: blank node oder bnode).

Die aktuelle Objekt-Ressource wird sodann auf die so typisierte Ressource gesetzt.


Im Falle b) geht es wie folgt weiter:

Falls about, resource, href oder src angegeben sind, wird das Subjekt durch den Wert davon bestimmt. Sind mehrere davon angegeben, so ist die Priorität durch die Reihenfolge der obigen Aufzählung gegeben, about hat also die höchste Priorität.

Ansonsten ist keine Ressource angegeben und diese wird wie folgt bestimmt: Handelt es sich um das Wurzelelement, so wird so vorgegangen, als sei ein leeres about gesetzt. Ist sonst typeof gesetzt, so wird ein leerer Knoten angenommen (bnode). Sonst wird die Ressource des Elternelementes übernommen. Falls zudem property nicht angegeben ist, wird die Ignorierungsmarkierung auf wahr gesetzt, das Element wird also hinsichtlich RDFa ignoriert.

Zuletzt in diesem Arbeitsschritt wird, falls typeof angegeben ist, wird die typisierte Ressource auf das neue Subjekt gesetzt.

6. Nun wird der Fall betrachtet, dass rel oder rev angegeben sind:

In diesem Falle ist sowohl das neue Subjekt als auch die aktuelle Objekt-Ressource zu bestimmen.

Das neue Subjekt wird mit about festgelegt, sofern dies angegeben ist. Falls außerdem typeof angegeben ist, wird die typisierte Ressource auf das neue Subjekt gelegt. Falls keine Ressource angegeben ist, gilt folgende Regel: Handelt es sich um das Wurzelelement, wird about verwendet oder ein leeres about angenommen, sofern nicht notiert. Sonst ist ein Elternelement vorhanden und dieses ist das neue Subjekt.

Danach wird die aktuelle Objekt-Ressource gesetzt. Diese wird sofern angegeben folgenden Attributen entnommen, wobei die Reihenfolge folgender Aufzählung die Priorität bestimmt, die höchste Priorität zuerst: resource, href, src. Ist keines davon angegeben, aber typeof ohne about, so wird ein leerer Knoten angenommen (bnode). Setze zudem in dem Falle die typisierte Ressource auf die aktuelle Objekt-Ressource (die leer sein kann, eine IRI oder eine bnode).

7. Sollte in einem der vorherigen Schritte die typisierte Ressource auf etwas gesetzt worden sein, was nicht leer ist, wird es nun als Subjekt einer Typenaussage verwendet.

Ist also typeof angegeben, werden so zusätzliche Tripel erzeugt, mit der typisierten Ressource als Subjekt, mit 'Typ' (http://www.w3.org/1999/02/22-rdf-syntax-ns#type) als Prädikat und als Objekt die IRI die typisierten Ressource.

8. Falls in einem der vorherigen Schritte ein neues Subjekt auf etwas gesetzt worden ist, was nicht leer ist und nicht das elterliche Objekt, so wird die Listenabbildung des Kontextes der Evaluierung auf einen neuen, leeren Wert gesetzt.

9. Ist in einem der vorherigen Schritte die aktuelle Objekt-Ressource auf etwas gesetzt, was nicht leer ist, wird damit ein weiteres Tripel erzeugt und um Einträge in die lokale Listen-Abbildung einzufügen.

Falls das Element sowohl das Attribut inlist hat als auch rel, welches einen oder mehrere Einträge enthalten kann, so ergibt sich daraus eine Listen-Abbildung:
Gibt es die IRI noch nicht in der lokale Listen-Abbildung, so wird eine neue Liste angelegt und zur lokalen Listen-Abbildung hinzugefügt. Zudem wird die aktuelle Objekt-Ressource zu jener neuen Liste hinzugefügt.

Prädikate für die aktuelle Objekt-Ressource können mit den Attributen rel und rev gesetzt werden, bei rel allerdings nur, wenn inlist nicht gesetzt ist, dann gilt ja der vorherige Absatz.

rel kann einen oder mehrere Einträge haben, entsprechend viele Tripel werden dann erzeugt. Subjekt ist dann das neue Subjekt, Prädikat ist die komplette IRI des relEintrages. Objekt ist die aktuelle Objekt-Ressource.

Entsprechend kann rev einen oder mehrere Einträge haben, entsprechend viele Tripel werden dann erzeugt. Subjekt ist dann die aktuelle Objekt-Ressource. Prädikat ist die komplette IRI des revEintrages. Objekt ist das neue Subjekt.

10. Wenn allerdings die aktuelle Objekt-Ressource auf null gesetzt ist (geleert ist), aber ein Prädikat vorhanden ist, so liegt ein unvollständiges Tripel vor. In dem Falle wird auf ein Subjekt gewartet, welches als Objekt dienen kann. Die aktuelle Objekt-Ressource wird auf eine neu erzeugte bnode gesetzt, dann haben unvollständige Tripel ein Subjekt, um sie endgültig in Tripel zu verwandeln.

Prädikate für unvollständige Tripel können mit rel oder rev gesetzt werden:
Sofern rel verwendet wird, so enthält es eine oder mehrere Ressourcen.
Jede davon wird zur lokalen Liste der unvollständigen Tripel hinzugefügt:
Falls inlist angegeben ist, so wird, falls die lokale Listen-Abbildung nicht schon einen Eintrag zur IRI hat, eine neue Liste angelegt und zur lokalen Listen-Abbildung hinzugefügt. Eine Richtung der Liste wird damit nicht festgelegt ('none').
Falls inlist nicht angegeben ist, wird als Prädikat die volle IRI hinzugefügt, die Richtung der Liste wird auf vorwärts gesetzt.

Entsprechend umgekehrt wird bei rev vorgegangen. Sofern rev verwendet wird, so enthält es eine oder mehrere Ressourcen.
Jede davon wird zur lokalen Liste der unvollständigen Tripel hinzugefügt:
Als Prädikat die volle IRI hinzugefügt, die Richtung der Liste wird auf rückwärts gesetzt.

11. Als nächstes wird der aktuelle Eigenschaftswert festgelegt. Prädikate für den aktuellen Eigenschaftswert können mit property gesetzt werden. Der Wert selbst ist einfacher Text. Dafür kann es eine oder mehrere Ressourcen geben.

Eine typisierte Zeichenfolge liegt vor, wenn datatype vorhanden ist und keinen leeren Wert hat. Der Wert darf auch nicht XMLLiteral im Vokabuluar http://www.w3.org/1999/02/22-rdf-syntax-ns# sein.
Entweder ist content angegeben, um die Zeichenfolge anzugeben oder es wird eine Zeichenfolge erzeugt, indem die Textinhalte der Reihe nach aus dem Element und den Kindelementen zusammengesetzt werden.

Ist der Wert von datatype allerdings leer, so handelt es sich um eine einfache Zeichenfolge.
Entweder ist content angegeben, um die Zeichenfolge anzugeben oder es wird eine Zeichenfolge erzeugt, indem die Textinhalte der Reihe nach aus dem Element und den Kindelementen zusammengesetzt werden.

Eine XML-Zeichenfolge liegt vor, falls datatype auf XMLLiteral im Vokabular http://www.w3.org/1999/02/22-rdf-syntax-ns# gesetzt ist. Die XML-Zeichenfolge ist dann der Inhalt des Elementes samt der Kindelemente. Bei der Interpretation sind die Namensraumzuordnungen des Ausgangsdokumentes zu beachten. Sofern bei den Kindelementen explizit angegeben, reduziert sich natürlich die Fehlerwahrscheinlichkeit bei der Interpretation.

Als weitere Möglichkeit ergibt sich, dass content angegeben ist. Dann ist der Wert davon als einfache Zeichenfolge der aktuellen Eigenschaftswert.

Sonst, falls also weder content, rel und rev nicht angegeben sind, wird der Wert von einer Ressource verwendet, sofern angegeben. Die Priorität ergibt sich aus folgender Liste, höchste Priorität zuerst:
ressource, href, src.

Sonst, falls typeof angegeben ist, aber nicht about, ist der Wert der typisierten Ressource der aktuelle Eigenschaftswert.

Sonst liegt eine einfache Zeichenfolge vor:
Falls zusätzlich eine Sprachinformation vorliegt, soll diese mit übernommen werden. Der Wert selber ist dann entweder der Inhalt von content oder der zusammengesetzte Text des Elementes und der Kindelemente in gegebener Reihenfolge.

Steht der aktuelle Eigenschaftswert fest, so wird er wie folgt verwendet:

Falls inlist angegeben ist, wird der aktuelle Eigenschaftswert zur lokalen Listen-Abbildung hinzugefügt:
Falls es zu dem Prädikat noch keine Liste gibt, wird eine neue angelegt und zur lokalen Listen-Abbildung hinzugefügt. Dann wird der aktuelle Eigenschaftswert zu Liste des Prädikats hinzugefügt.

Ohne inlist wird folgendes Tripel erzeugt:
Das Subjekt ist das neue Subjekt. Das Prädikat ist die komplette IRI. Das Objekt ist der aktuelle Eigenschaftswert.


12. Sofern die Ignorierungsmarkierung für das Element auf falsch gesetzt ist und das neue Subjekt auf einen nicht leeren Wert gesetzt ist, werden alle unvollständigen Tripel im aktuellen Bereich komplettiert.

Die Liste der unvollständigen Tripel vom aktuellen Evaluationskontext ist entweder leer oder enthält IRIs als Prädikate. Diese Liste wird nun durchiteriert. Jedes Prädikat wird mit dem jeweiligen Eltern-Subjekt und dem neuen Subjekt verwendet, um ein neues Tripel zu erzeugen. Ein neues Element in der aktuellen Listen-Abbildung kann ebenfalls erzeugt werden.

Jedes unvollständige Tripel hat eine Richtungsangabe, mit diesem wird bestimmt, welches das Subjekt und welches das Objekt ist.

Ist die Richtungsangabe nicht festgelegt ('none'), so wird das neue Subjekt zur Liste der iterierten unvollständigen Tripel hinzugefügt.

Ist die Richtungsangabe vorwärts, so ist das Subjekt das Eltern-Subjekt, das Prädikat das der iterierten Liste der unvollständigen Tripel und das Objekt das neue Objekt.

Ist die Richtungsangabe rückwärts, so ist das Subjekt das neue Subjekt, das Prädikat das der iterierten Liste der unvollständigen Tripel und das Objekt das Eltern-Subjekt.

13. Im nächsten Schritt werden die Kindelemente des aktuellen Elementes interpretiert, dabei wird der aktuelle Evaluationskontext verwendet. Zuerst wird initialisiert:

Falls die Ignorierungsmarkierung wahr ist, so ist der neue Evaluationskontext eine Kopie des aktuellen Kontextes, dabei wird die Sprache und die Liste der IRI-Abbildungen allerdings durch die lokalen Werte ersetzt.

Ist die Ignorierungsmarkierung nicht wahr, sehen die Werte wie folgt aus:

  • Die Basis (base) wird auf den Basiswert des aktuellen Evaluierungskontextes gesetzt.
  • Das Eltern-Subjekt wird auf den Wert des neuen Subjektes gesetzt, falls das nicht leer ist, sonst auf den Wert des Eltern-Subjektes des aktuellen Evaluierungskontextes.
  • Das Eltern-Objekt wird auf den Wert des aktuellen Objekt-Ressource gesetzt, falls das nicht leer ist, sonst auf den Wert des neuen Subjektes, falls das nicht leer ist, sonst auf den Wert des Eltern-Subjektes des aktuellen Evaluierungskontextes.
  • Die Liste der IRI-Abbildungen wird auf die lokale Liste der IRI-Abbildungen gesetzt.
  • Die Liste der unvollständigen Tripel wird auf die lokale Liste der unvollständigen Tripel gesetzt.
  • Die Listen-Abbildung wird auf die lokale Listen-Abbildung gesetzt.
  • Die Sprache wird auf die aktuelle Sprache gesetzt.
  • Das verwendete Vokabular wird auf das lokal verwendete Vokabular gesetzt.

14. Im letzten Schritt wird geguckt ob die lokale Listen-Abbildung einen oder mehrere Abbildungen enthält. Ist das der Fall, werden weitere Tripel erzeugt:

Dazu wird jede IRI in der lokalen Listen-Abbildung betrachtet, falls die äquivalente Liste nicht im Evaluationskontext existiert, wird die Liste wie folgt verwendet, um klarzumachen, dass die Liste beim aktuellen Element erzeugt wurde:

Falls keine Listenpunkte passend zur IRI vorliegen, wird folgendes Tripel erzeugt:
Das Subjekt ist das aktuelle Subjekt. Das Prädikat ist die volle IRI der lokalen Listen-Abbildung, die zur Liste gehört. Objekt ist http://www.w3.org/1999/02/22-rdf-syntax-ns#nil.

Sonst wird ein Feld neuer bnodes erzeugt, eine bnode für jeden Listenpunkt.

Für jedes Paar von bnode und IRI oder Zeichenfolge der Liste wird ein Tripel erzeugt:
Das Subjekt ist eine bnode. Das Prädikat ist http://www.w3.org/1999/02/22-rdf-syntax-ns#first. Das Objekt ist die volle IRI oder die Zeichenfolge.

Für jeden Punkt im Feld der bnodes wird folgendes Tripel erzeugt:
Das Subjekt ist die bnode. Das Prädikat ist http://www.w3.org/1999/02/22-rdf-syntax-ns#rest. Das Objekt ist der nächste Punkt im Feld der bnodes, falls es das gibt, sonst ist es http://www.w3.org/1999/02/22-rdf-syntax-ns#nil.

Ein zusätzliches Tripel wird erzeugt:
Das Subjekt ist das aktuelle Subjekt. Das Prädikat ist die volle IRI oder die lokale Listen-Abbildung, die zur Liste gehört. Das Objekt ist der erste Punkt des Feld der bnodes.


Verweise

[Bearbeiten]

Die einzelnen Vokabelsammlungen können nun hier nicht im Einzelnen erläutert werden. Für die jeweilige sollte es eine Spezifikation geben. Beispiele:

Dublin Core (Beschreibung von Metainformationen von Dokumenten):

Lizenzvokabular (creative commons)

Bibliographischer Vokabelsatz (zitieren und referenzieren von Werken)

Literature Markup Language (Semantische Auszeichnung von Literatur)

XHTML Vokabular

XML-Schema

Web Ontologie

Vokabular von Suchmaschinenanbietern

  • schema.org (leider gibt es dort nur Beispiele für Mikrodata, nicht für RDFa. Die dafür notwendigen Attribute sind allerdings in XHTML+RDFa nicht definiert, sind 2012 erst im Stadium eines Arbeitsentwurfes.

Das Vokabular kann natürlich in RDFa trotzdem verwendet werden, Mikrodata sind redundant, wenn RDFa verwendet wird.)

Offene Vokabularsammlung

Friend of a Friend (Beschreibung personenbezogener Daten und von Beziehungen)


Die Spezifikationen von RDFa selbst: