Primer: Getting into RDF & Semantic Web using N3
Deutsche Übersetzung

Original:
http://www.w3c.org/2000/10/swap/Primer.html
$ Id: Primer.html,v 1.55 2003/04/15 23:57:30 sandro Exp $
Diese Übersetzung:
http://www.bitloeffel.de/DOC/2003/N3-Primer-20030415-de.html
$Id: N3-Primer-20030415-de.html,v 1.5 2004/03/15 12:30:54 hawe Exp $
Übersetzer:
Hans-Werner Heinzen, Bitloeffel.de , Hans-Werner.Heinzen@Bitloeffel.de

Dieses Dokument ist eine deutsche Übersetzung eines W3C -Textes. Sie enthält möglicherweise Fehler. Sie hat keinerlei durch das W3C legitimierte normative Wirkung. Das maßgebende Dokument ist das englische Original.

Der Übersetzer freut sich über Hinweise auf Fehler der deutschen Fassung, und ist als Neuling auf diesem Gebiet auch für Übersetzungstips dankbar.


W3C | Semantic Web | Advanced Development | SWAP | Tutorial | Primer

Erste Schritte ins Semantische Netz - RDF mithilfe von N3

Die Welt des Semantischen Netzes (englisch: Semantic Web), soweit sie auf RDF basiert, ist im Grunde recht einfach. Dieser Artikel bietet Ihnen den Einstieg mithilfe einer einfachen Lehrsprache, "Notation 3" oder auch "N3" genannt, die gleichwertig zur XML-Syntax von RDF ist, nur einfacher zu schreiben!

Subjekt, Prädikat, Objekt

Information ist in RDF eine Sammlung einfacher Sätze, die jeweils bestehen aus Subjekt, Prädikat und Objekt - nichts weiter. Und in N3 schreiben Sie ein RDF-Tripel genauso hin - mit einem Punkt am Ende:

    <#alex> <#kennt> <#jojo> .

Jeder Teil des Satzes, also Subjekt, Prädikat oder Objekt, wird durch eine URI (Universal Resource Identifier) bezeichnet, also etwa durch <http://www.w3.org/> oder <http://www.w3.org/2000/10/swap/test/s1.n3#includes>. Wenn nichts vor dem "#" steht wie bei <#alex>, so beschreibt die URI etwas zum aktuellen Dokument gehöriges.

Eine Ausnahme gibt es: das Objekt, und nur dieses, darf ein Literal sein, also eine Zeichenkette oder eine Ganzzahl.

    <#alex> <#kennt> <#jojo> .
    <#alex> <#alter> "24" .

Das Prädikat "kennt" wird in RDF "Eigenschaft" (englisch: property) genannt und man denkt es sich als Nomen, das die Relation zwischen Subjekt und Objekt ausdrückt. Um den Satz lesbarer zu machen, können sie alternativ zu

    <#alex> <#kind> <#max> .

entweder

    <#alex> hat <#kind> <#max> .

oder auch

    <#max> ist <#kind> von <#alex> .

schreiben.

Es gibt zwei Abkürzungen für mehrere Sätze mit einem Subjekt. Das Semikolon ";" leitet eine neue Eigenschaft desselben Subjekts, das Komma "," ein weiteres Objekt zum selben Subjekt und selben Prädikat ein.

    <#alex> <#kind>  <#max>, <#lilli>, <#moni> ;
            <#alter> "24" ;
            <#augenfarbe> "blue" .

Genauso könnte man den Inhalt der Tabelle

Alter Augenfarbe
Alex 24 blau
Max 3 grün
Jojo 5 grün

so schreiben:

    <#alex>  <#alter> "24";  <#augenfarbe> "blau" .
    <#max>   <#alter>  "3";  <#augenfarbe> "grün" .
    <#jojo>  <#alter>  "5";  <#augenfarbe> "grün" .

Manchmal brauchen Sie einen Satzteil, dem Sie keinen Bezeichner geben wollen. Sie wissen, es gibt einen, aber Sie wollen nur seine Eigenschaften bezeichnen. Dann schreiben Sie das als die Eigenschaften innerhalb von eckigen Klammern "[...]".

    <#alex> <#kind> [ <#alter> "4" ] , [ <#alter> "3" ].

Das könnte man etwa lesen als: #alex hat #kind welches hat #alter "4" und #kind welches hat #alter "3". Zwei wichtige Punkte sollten Sie sich merken.

Wenn wir wirklich Namen hätten benutzen wollen, hätten wir den Inhalt der obigen Tabelle so geschrieben:

  [ <#name> "Alex" ; <#alter> "24";  <#augenfarbe> "blau" ].
  [ <#name> "max"  ; <#alter>  "3";  <#augenfarbe> "grün" ].
  [ <#name> "Jojo" ; <#alter>  "5";  <#augenfarbe> "grün" ].

Eckige Klammern kann man auf vielfältige Weise miteinander kombinieren. Wie, das können Sie den späteren Beispielen entnehmen. Zu N3 gibt es nun nicht mehr allzuviel zu sagen - gehen wir also einen Schritt weiter.

Gemeinsame Konzepte

Das Semantische Netz kann nicht in einem einzelnen Dokument Bedeutung definieren. So etwas können Sie mit der natürlichen Sprache (manchmal mit der mathematischen Sprache) tun. Wenn wir nun kommunizieren und dabei das Konzept "Titel" benutzen, müssen wir eine Vorstellung von "Titel" teilen. Im Semantischen Netz geschieht das, indem alle für das Konzept "Titel" exakt diegleiche URI verwenden.

Versuchen wir den Titel eine Dokuments zum Thema N3 anzugeben mit

    <> <#titel>  "Ein einfaches N3-Beispiel".

(Dabei verweist <>, eine leere URI, immer auf das Dokument, in dem es sich befindet) <#titel> verweist auf das Konzept #titel, wie es vom Dokument selbst definiert ist. Das sagt dem Leser zunächst einmal nicht viel.

Eine Gruppe von Leuten hat indes schon eine Liste von Eigenschaften erstellt, den sogenannten Dublin Core. Darin befindet sich auch deren Vorstellung von Titel, der sie den Bezeichner <http://purl.org/dc/elements/1.1/title> gegeben haben. Damit können wir einen besser definierten Satz bilden, indem wir schreiben

    <> <http://purl.org/dc/elements/1.1/title>
        "Erste Schritte ins Semantische Netz - RDF mithilfe von N3".

Das ist narürlich etwas umständlich; stellen Sie sich nur einmal vor, die Bezeichner für die Konzepte #alter oder #augenfarbe wären genauso lang. Deshalb erlaubt N3 einen Präfix als Kürzel für den länglichen Teil, den wir Namensraum (englisch: namespace) nennen. Den legen Sie fest, indem Sie "@prefix" benutzen, so wie hier:

    @prefix dc: <http://purl.org/dc/elements/1.1/> .
    <> dc:title
        "Erste Schritte ins Semantische Netz - RDF mithilfe von N3".

Beachten Sie, dass, wenn der Präfix benutzt wird, zwischen dc und title ein Doppelpunkt ":" und kein Gartenzaum "#" steht, und dass die spitzen Klammern "<" und ">" wegfallen. Das ist viel schneller zu schreiben, und so werden Sie es auch bei fast allen Ihren Prädikaten tun. Einmal festgelegt, kann der Präfix für den Rest des Dokuments genutzt werden.

Es entstehen mehr und mehr RDF-Vokabularien, die Sie nutzen können - schauen Sie auf der RDF Homepage und bei den dort hinterlegten Links nach. Damit können Sie sich das Vokabular für Ihre eigene Anwendung sehr einfach zusammenstellen.

Ab hier werden wir einige bekannte Namensräume benutzen, und um Platz zu sparen werden wir folgende Präfixe voraussetzen:

    @prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix owl:  <http://www.w3.org/2002/07/owl#> .

Das sind die Namensräume von RDF, RDF Schema und von OWL. Sie legen Kernbegriffe fest, mit denen wir uns ins Semantische Netz einklinken können. Ich werde ebenfalls voraussetzen, dass der leere Präfix für das Dokument steht, in dem es sich befindet. In N3 schreiben wir das so:

    @prefix : <#> .

Damit können wir jetzt das Beispiel von weiter oben umformen und schreiben als

    :alex :kind [ :alter "4" ] , [ :alter "3" ].

... wobei wir noch ein paar Zeichen eingespart haben. Jetzt, da Sie wissen, wie man Fakten in N3 ausdrückt, können Sie anfangen, Ihre eigenen Vokabularien zu erstellen; schließlich bestehen die auch nur aus Fakten.

Ein Vokabular erstellen

Etwas wie dc:title ist eine RDF-Eigenschaft. Wenn Sie ein neues Vokabular definieren wollen, definieren Sie neue Klassen von irgentetwas sowie neue Eigenschaften. Wenn Sie ausdrücken wollen, von welchem Typ etwas ist, nennen Sie die Klasse, zu der es gehört

Diejenige Eigenschaft, die aussagt, von welchem Typ etwas ist, heißt rdf:type, was man in N3 einfach abkürzen kann mit a (englisch für: ein). So definiert man eine Klasse Person folgendermaßen:

    :Person a rdfs:Class.

Im selben Dokument können wir eine konkrete Person einführen:

    :alex a :Person.

Klassen sagen etwas über die Ojekte aus, die in ihnen enthalten sind. Ein Objekt kann sich in vielen Klassen befinden. Dabei müssen diese keine hierarchischen Beziehungen zueinander haben; denken Sie an Klassen wie Person, Lebewesen, Tier, GroßePerson, Freund, usw.. Gibt es doch eine Beziehung zwischen zwei Klassen, so können Sie das als Satz ausdrücken; schauen sie sich dazu die Klasseneigenschaften in den Vokabularien von RDF Schema und OWL an.

    :Frau a rdfs:Class; rdfs:subClassOf :Person .

Eine Eigenschaft beschreibt eine Beziehung zwischen zwei Dingen.

    :schwester a rdf:Property.

Manchmal können Sie in einer Beziehung zwischen zwei Dingen etwas erkennen, was Sie als Klasse ausdrücken können. Wenn (in einem Satz) das Subjekt Instanz einer Klasse ist, dann heißt diese Klasse Domäne (englisch: domain) des Prädikats. Wenn das Objekt eine Instanz einer Klasse ist dann heißt diese Klasse Reichweite (enlisch: range) des Prädikats. Eine Eigenschaft kann viele Domänen und Reichweiten haben, aber typischerweise genügt jeweils eine, um das Prädikat zu spezifizieren.

    :schwester rdfs:domain :Person;
        rdfs:range :Frau.

Beachten Sie, dass die Klassenbezeichner mit Großbuchstaben die Eigenschaften mit Kleinbuchstaben beginnen. Das ist keine Vorschrift, aber gute Konvention. Beachten Sie außerdem: Weil die Domäne von rdfs:domain (und auch von rdfs:range) eine Eigenschaft, also rdf:Property, ist, ist dann auch :schwester eine Eigenschaft, ohne dass dies explizit gesagt werden muss.

Äquivalenz

Es wird Ihnen oft passieren, dass Sie ein Vokabular definieren, und einer oder mehrere Ihrer Begriffe - ob Sie es bemerken oder auch nicht - haben exakt dieselbe Bedeutung wie ein Begriff aus einem anderen Vokabular. Das ist natürlich ein sehr nützliches Stück Information für jede Maschine und jede Person, die damit arbeitet. Die Eigenschaft "Äquivalenz" ist für N3 so nützlich und grundlegend, dass es dafür eine Abkürzung gibt, nämlich das Gleichheitszeichen "=".

    :Frau = xyz:WeiblicheErwachsene .
    :titel a rdf:Property; = dc:title .

Tip: Nutzen Sie anderer Leute Vokabular, wo immer möglich; das hilft dem Datenaustausch. Wenn Ihr Vokabular Synonyme enthält, halten Sie die Äquivalenzen fest. Auch das wird gegenwärtigen und zukünftigen Prozessoren dabei helfen Ihre Daten und die anderer sinnvoll zu nutzen.

Wahl eines Namensraums und Veröffentlichen Ihres Vokabulars

Eine gute Online-Dokumentation für die Begriffe Ihres Vokabulars hilft Menschen beim Lesen und Schreiben von RDF-Daten. Der Schreiber muss erkennen können, wie ein Begriff benutzt werden soll, der Leser muss erkennen können, was ein Begriff bedeutet. Wer Software entwickelt, die diese Begriffe benutzt, muss in allen Einzelheiten wissen, was jede URI bedeutet.

Ihre Dokumentation wird maschinenlesbar, wenn sich Ihr Vokabular auf das von RDF Schema und OWL stützt. Genaueres finden Sie unter Dokumentation eines Vokabulars. Diese Art von RDF-Dokumentation im RDF-Format wird "Schema" oder auch "Ontologie" genannt.

Es gibt eine einfache Methode, anderen zu helfen, Ihre Dokumentation zu finden. Sorgen Sie dafür, dass die URIs, die Sie als Begriffe in Ihrem Vokabular definieren, auch in einem Web-Browser funktionieren. Wenn Sie unseren Namenskonventionen folgen, geschieht das automatisch: Das Dokument mit Ihrem Vokabular enthält zum Beispiel eine URI wie http://beispiel.com/begriffe und benutzt einen Begriff wie <#Frau>. Zusammen mit der @prefix-Deklaration (s.o.) ergibt sich http://beispiel.com/begriffe#Frau, was jeden Browser anweisen sollte, das Vokabular-Dokument anzuzeigen.

Idealerweise veröffentlichen Sie Ihr Vokabular auf dem Server einer Organisation, die sich verpflichtet, es auch in Zukunft zu erhalten. So wird für viele Jahre sichergestellt, dass RDF-Daten mit den von Ihnen definierten Begriffen dokumentiert und potenziell verständlich bleiben. Eine weitere Konvention, das laufende Jahr als Bestandteil der URI einzufügen, befördert die Stabilität weiter. Es könnte ja jemand versucht sein, irgentwann einmal, sagen wir, http://beispiel.com/lebensmittel für etwas Neues zu verwenden. Wenn hingegen nur eine Erweiterung der Dokumentation beabsichtigt ist, wird man auch nur http://beispiel.com/2003/lebensmittel anfassen. Unter Umständen können Sie die Stabilität erhöhen, indem Sie eigene Domainnamen speziell für den Zweck benutzen, der dann unabhängig ist von möglichen Organisations-Namensänderungen und -Namensrechten.

Natürlich, zum Ausprobieren genügt eine Datei, sagen wir meinedb.n3, im selben Verzeichnis wie auch der Rest der Arbeit. Dann wird einfach <mydb.n3#> zum Namensraumbezeichner, denn in N3 können, genauso wie in HTML, URIs relativ zum aktuellen Verzeichnis geschrieben werden.

Darüberhinaus

Für den Anfang wissen Sie nun genug, um mit eigenen Vokabularien zu beginnen. Und, ich habe Ihnen Hinweise gegeben, wo Sie mehr finden können. Aber Sie müssen nicht weiter lesen, denn mit dem jetzigen Wissen können Sie bereits neue Anwendungen erstellen, und neue Schemata und Dateien. Und Programme, die Daten im Semantischen Netz austauschen und manipulieren können.

Jetzt sollten Sie den Dreh raushaben und bereits bei der Arbeit sein. Trotzdem: Zusätzliche Ideen finden Sie in der längeren Liste komplexer Beispiele . Dort gibt's allerdings weniger Erklärungen.

Oder aber, Sie machen weiter mit der Einführung in weitere Aspekte der Sprache N3, wo erklärt wird, wie sie man eigene Daten verarbeitet und fremde Daten benutzt. In dem Fall geht's weiter mit Abkürzungen und Umwege .


Verweise

Tim BL, with his director hat off