2015-02-23 6 views
9

Ich bin auf der Suche nach einer Turtle-Syntax für den anonymen Knoten aufrufen, die einen anderen anonymen Knoten aufrufen.Gibt es eine Syntax zum Definieren der zyklischen Referenz zwischen anonymen Knoten in Turtle RDF?

Zum Beispiel möchte ich diesen Code reproduzieren:

:Instance0 a Class0; 
    :property0 :Instance1. 

:Instance1 a Class1; 
    :property1 :Instance2. 

:Instance2 a Class2; 
    :property2 :Instance1. 

Mit so etwas wie:

:Instance0 a Class0; 
    :property0 [ 
     a Class1; 
     :property1 [ 
      a Class2; 
      :property2 [ 
       ## The syntax to call the parent, the instance of :Class1 
      ]; 
     ]; 
    ]. 

Gibt es eine Schildkröte Syntax für diesen Zweck?

+0

Dies ist eine ** gute Frage **. Es ist eine einfache Antwort ("Nein"), aber es ist etwas, von dem ich viele Leute * fragen * gehört habe. In Common Lisp gibt es eine zyklische Objektnotation. ZB kann eine zirkuläre Liste als "# 1 = (abc. # 1 #)" geschrieben werden, und diese Notation funktioniert für jedes wiederholte Zeug, zB kann eine Liste der Länge zwei mit dem wiederholten Element "" sein (# 1 = (abc) # 1 #) '. Ich wünschte wirklich, Turtle hätte so etwas. –

Antwort

6

Das Datenmodell von RDF ist graphbasiert, nicht hierarchisch, daher gibt es keine Vorstellung von Eltern/Kind-Beziehungen zwischen Ressourcen und daher keine integrierte Syntax, um bei Verschachtelung anonymer Ressourcenbeschreibungen mit der auf "übergeordnete" Knoten zu verweisen Konstrukt (das ist wirklich nur syntaktischer Zucker, um eine Gruppe von Tripeln zu gruppieren, die dasselbe anonyme Thema teilen).

Davon abgesehen, Schildkröte Syntax ist in der Lage jedes konforme RDF Graph der Serialisierung. Um die Graphenstruktur zu erreichen, die Sie beschreiben, müssen Sie die _: Syntax verwenden, anstatt die kompaktere [] Syntax zur Definition von anonymen Knoten.

Situationen, in denen Sie die _: Syntax leere Knoten Etiketten stattdessen manuell zuweisen verwenden, müssen die [] Bequemlichkeit Syntax verwenden, umfassen:

  • Zyklen in einem Diagramm mehr als einen anonymen Knoten beteiligt sind.
  • Multiple verdreifacht die gleichen anonymen Knoten als das Objekt aufweist.

_: Die Syntax ermöglicht manuell eine Knotenkennung zugeordnet, die man auf den Rohling Knoten aus dem Subjekt oder Objekt Position irgendeines beliebigen triple beziehen können. Die Knotenkennung, die Sie zuweisen hat keine Bedeutung außerhalb der Kontext des Turtle Dokument, in dem es erscheint, und so müssen nicht global eindeutig sein. Knoten, die auf diese Weise identifiziert wurden, sind immer noch anonym, da sie nicht global referenziert werden können. Jedoch bezieht sich bei jedem Vorkommen des gleichen Rohlings Knotenlabel innen das gleiche Dokument auf die gleiche Ressource, so dass der Verfasser des Dokuments ist für leere Knoten Etiketten Zuteilen und Verfolgen ihrer Verwendung innerhalb des gleichen Dokuments.

Ihr Dokument würde dann aussehen, so etwas wie:

:Instance0 a Class0; 
    :property0 _:instance1. 

_:instance1 a Class1; 
    :property1 [ 
     a Class2; 
     :property2 _:instance1; 
    ]. 

Siehe 2.6 RDF Blank Nodes in RDF 1.1 Schildkröte, Terse RDF Triple-Sprache für weitere Details.

+2

Aber am Ende bin ich verpflichtet, manuell einen leeren Knotennamen '_: instance1' zu definieren, um darauf zu verweisen, auch wenn es die" Eltern "-Instanz ist. OK. –

+3

Ja - das Label "instance1" hat außerhalb des Turtle-Dokuments selbst keine Bedeutung, aber der Verfasser des Dokuments ist verantwortlich für das Zuweisen leerer Knotenetiketten und das Verfolgen ihrer Verwendung.RDF ist kein hierarchisches Datenmodell, daher gibt es keine Vorstellung von einer "übergeordneten" Ressource. – Alex

+0

Das war das problematische Konzept. Vielen Dank. –

Verwandte Themen