RDF-Daten in HTML-Dokumenten

Rund um den Begriff Semantic Web ist in den letzten Jahren immer mehr publiziert worden. Die Idee hinter Semantic Web lässt sich vielleicht mit einem Satz zusammenfassen: Das Ergänzen von Webseiten um Informationen über Struktur und Zusammenhänge.

Eine sehr grundlegende – und in meinen Augen leider vollkommen unterschätzte – Funktion bietet schon HTML 1.0. Gemeint sind die so genannten LINK-Tags im META-Header. Hierzu möchte ich aber auf einen anderen Artikel von mir verweisen. Sehr schön an den LINK-Headern ist, dass sie inzwischen von diversen Suchmaschinen (GoogleAltavista, etc.) sowie einigen Browsern (Opera, ältere Versionen von Netscape) unterstützt werden.

Ein ganz anderes und – dank höherer Flexibilität – weitaus mächtigeres Mittel zur Klassifizierung und Strukturierung von Daten stellen die so genannten RDF-Tags dar. Federführend steht das World Wide Web Consortium (W3C) hinter dieser Entwicklung. Auf ihrer Homepage finden sich zahllose Spezifikationen und Diskussionspapiere zum Thema.

RDF steht für Resource Description Framework und baut auf XML auf. Prinzipiell lassen sich RDF-Angaben sehr flexibel und theoretisch auch individuell unter Beachtung der XML-Regeln gestalten. Es macht aber keinen Sinn, wenn jeder Webseitenbetreiber seine eigenen RDF-Schemata für seine Beschreibungen kreiert, da dies nur wieder eine Indizierung durch Suchmaschinen oder ähnliche Systeme erschweren bis unmöglich machen würde. Es empfiehlt sich also der Einsatz von Schemata zur Beschreibung von Ressourcen, die am besten schon von der W3C offiziell abgesegnet wurden und auch schon etwas häufiger in Verwendung sind.

Eine Aussage in RDF besteht prinzipiell immer aus einem so genannten Triplet von Subjekt, Prädikat und Objekt (subject, predicate, object). Ein Beispiel wäre die Aussage “bild.jpg ist ein Foto“. Da solche Aussagen maschinell kaum auslesbar wären, benötigt man für ein RDF-Dokument stets ein Schema, das die genaue Gestaltung der Ausprägungen bestimmt.

Ich möchte in diesem Text nicht darauf eingehen, wie ein Schema selbst erstellt werden kann. Solche Informationen finden sich reichlich auf der W3C Homepage. Stattdessen möchte. Vielmehr möchte ich wieder einmal ein Beispiel aus meiner Bildergalerie bemühen. Ich möchte hierbei darstellen, wie sich ausführliche Informationen zu einem Bild in eine RDF-Beschreibung packen lassen.

Eins möchte ich noch vorwegnehmen: Ich zähle mich selbst nicht zu den Experten zu diesem Thema. Mein Interesse für Semantic Web resultierte nur aus einer Vorlesung im Rahmen des Moduls “E-Business”. Ich habe versucht mich weitestgehend in das Thema einzulesen. Einen Anspruch auf Vollständigkeit habe ich jedoch nicht – insbesondere da es bislang keine Unterstützung von Seiten der Browser oder Suchmaschinen gibt.

Übersicht über die RDF-Description eines Bildes

Die RDF-Description befindet sich auf der gleichen HTML-Seite, die auch das zu beschreibende Bild eingebunden hat. Man könnte natürlich auch die Beschreibung in ein externes Dokument einbinden und durch einen LINK-Tag im META-Header verknüpfen. Mir ist die direkte Einbindung in die jeweilige Seite der Bildergalerie jedoch weitaus lieber, da ich die für die Beschreibung notwendigen Daten ohnehin schon für die Seite aus der Datenbank und den EXIF-Daten des Bildes ziehe.

Zunächst aber als Übersicht ein Ausschnitt aus einer typischen RDF-Description innerhalb meiner Bildergalerie. Bitte beachten, dass der RDF-Bereich jeweils mit den Tags für einen HTML-Kommentar eingeschlossen werden (<!– und –>), da sonst die meisten Browser an dieser Stelle etwas sinnlosen Zeichensalat anzeigen würden.

<!--
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:image="http://jibbering.com/vocabs/image/#"
  xmlns:exif="http://www.w3.org/2003/12/exif/ns#"
  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
>
 <rdf:Description rdf:about="/images/image.jpg">
  <dc:description>Innenhof des Schloss Ludwigsburg</dc:description>
  <dc:creator>1996-2004 Stefan Plogmann</dc:creator>
  <dc:rights>1996-2004 Stefan Plogmann</dc:rights>
  <dc:identifier>/images/image.jpg</dc:identifier>
  <dc:date>2004-06-14T11:16:38Z</dc:date>
  <dc:date.created>2004-06-13</dc:date.created>
  <dc:coverage>
   <rdf:Bag>
    <rdf:li>Ludwigsburg</rdf:li>
    <rdf:li>Barock / Rokoko</rdf:li>
    <rdf:li>Schloss / Palast</rdf:li>
   </rdf:Bag>
  </dc:coverage>
  <image:height>526</image:height>
  <image:width>700</image:width>
  <dc:format>image/jpeg</dc:format>
  <exif:make>FUJIFILM</exif:make>
  <exif:model>FinePix S602 ZOOM</exif:model>
  <exif:exposureTime>10/6800</exif:exposureTime>
  <exif:fNumber>800/100</exif:fNumber>
  <exif:isoSpeedRatings>200</exif:isoSpeedRatings>
  <exif:shutterSpeedValue>940/100</exif:shutterSpeedValue>
  <exif:apertureValue>600/100</exif:apertureValue>
  <exif:exposureProgram>Normal program</exif:exposureProgram>
  <geo:Point>
    <geo:lat>48.9000</geo:lat>
    <geo:long>9.1833</geo:long>
  </geo:Point>
 </rdf:Description>
</rdf:RDF>
-->

Anschließend soll nun kurz auf Bedeutung der einzelnen Elemente der RDF-Description eingegangen werden.

Festlegung der zugrunde liegenden Schemata

Zu Beginn des RDF-Bereichs wird erst einmal festgelegt, welche Schemata für die Beschreibung zugrunde liegen.

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:image="http://jibbering.com/vocabs/image/#"
  xmlns:exif="http://www.w3.org/2003/12/exif/ns#"
  xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
>

Die Syntax funktioniert folgendermaßen: “xmlns:” besagt, dass eine Schemadefinition folgt. Danach wird wird ein Name für das Schema festgelegt, der im weiteren Verlauf des RDF-Dokuments verwendet werden soll (z.B. “rdf“). Danach wird die URL zur Schemadefinition genannt (z.B. “http://www.w3.org/1999/02/22-rdf-syntax-ns#“).

Ich möchte kurz die Funktion der hier eingebundenen Schemata erläutern. Hierzu verwende ich einfach den Namen, den ich in der Defintion vergeben habe.

  • rdf” ist das grundlegende Schema für RDF-Dokumente. Es definiert Aufbau und Syntax von RDF an sich.
  • dc” ist die Spezifikation nach Dublin-Core. Diese Beschreibungen finden schon seit Ewigkeiten in Meta-Headern Verwendung und beinhalten standardisierte Elemente, wie Titel, Beschreibung, Autor, Datum, etc.
  • image” ist eine noch nicht standardisierte Beschreibung von allgemeinen Daten über ein Bild (Breite, Höhe)
  • exif” spezifiziert die Darstellung von EXIF-Metadaten aus Bildern
  • geo” legt die Kennzeichnung von Objekten mit Geodaten (Länge, Breite, Höhe) fest

Eigentliche Beschreibung des Bildes

Da sich die die RDF-Description auf ein Bild und nicht die aktive HTML-Seite bezieht, muss zu Beginn angegeben werden, welche Ressource mit der Beschreibung gemeint wird.

<rdf:Description rdf:about="/images/image.jpg">

Es folgen dann die einzelnen Tags mit den Kennzeichen des Bildes. Wichtig ist, dass jeder Tag nur einmal pro Bild vorkommen darf. Es dürfen zum Beispiel nicht mehrere Tags mit dem Titel <dc:description> vorkommen. Sollten mehrere Einträge gewünscht sein, lässt sich dies durch standardisierte Formulierungen realisieren.

Das Bild soll zum Beispiel mehreren Themen (<dc:coverage>) zugewiesen werden. Hier kann man den Container <bag> verwenden, der für eine unstrukturierte Liste steht.

  <dc:coverage>
   <rdf:Bag>
    <rdf:li>Ludwigsburg</rdf:li>
    <rdf:li>Barock / Rokoko</rdf:li>
    <rdf:li>Schloss / Palast</rdf:li>
   </rdf:Bag>
  </dc:coverage>

Ist eine bestimmte Reihenfolge für die Liste relevant, sollte statt <bag> der Tag <seq>verwendet, der für Sequenz steht. In diesem Fall würde das Beispiel dann so aussehen.

  <dc:coverage>
   <rdf:Seq>
    <rdf:li>Ludwigsburg</rdf:li>
    <rdf:li>Barock / Rokoko</rdf:li>
    <rdf:li>Schloss / Palast</rdf:li>
   </rdf:Seq>
  </dc:coverage>

Wenn ich Aliase (also zum Beispiel gleichwertige Synonyme) nennen möchte, bietet sich der Tag <alt> an.

Ausnahmen aus der Regel mit den Container Tags bestehen zum Beispiel bei verschiedenen Sprachversionen. So ließen sich verschiedene Description nach Dublin Core auch folgendermaßen hinterlegen:

<dc:description xml:lang="de">Schönes Bild</dc:description >
<dc:description xml:lang="en">Nice picture</dc:description >

Bitte generell noch beachten, dass die Codierungsrichtlinien sich bei XML und HTML voneinander unterscheiden. Umlaute und Sonderzeichen können nicht in der HTML-Codierung eingefügt werden. Die HTML-Codierung “&uuml;” für ein “ü”” würde zum Beispiel als Fehler angesehen werden, da XML alle Strings mit Beginnenem “&” als Entitäten versteht. Zu Decodierung kann man unter Umständen einfach den PHP-Befehl “html_entity_decode” verwenden.

Ich möchte hierbei erneut gerne auf meine Bildergalerie verweisen. Das hier genannte Beispiel findet sich ebenfalls dort. Ich übernehme aber keine Garantie auf Vollständigkeit und Richtigkeit meiner RDF-Descriptions!!

Weitere Informationen zum Thema gibt es unter anderem unter: