2016-03-25 12 views
3

Angenommen, wir haben die TripelSPARQL Eigenschaft Pfad, 1. Teil ist einzigartig, Pfad wiederholt sich nach

a1 blah <http://foo.com/f> 
a1 pt c1 
c1 pt d1 

Wie würde ich eine SPARQL-Abfrage erstellen a1 oder c1 oder d1 wählen? Ich muss in der Lage sein, ein blah Prädikat oder mehrere pt Prädikate zu gehen.

So a1 kann Teil eines dreifach wie: a1 blah <http://foo.com/f> aber ich weiß nicht, wie man den Fall angeben, in dem es nicht a1, sondern seine Aufgabe verbunden über einen anderen Weg in die andere Richtung a1. Aber ich muss auch den Weg behalten blah verwenden, da das ist, was a1 oder f1 zum Objekt von

Hier verbunden ist, ist, wie ich es zu arbeiten, aber es ist nicht recht:

select * from 
{ 
    # other sparql stuff before it 
    { ?s blah <http://foo.com/f> 
    ?s pt+ <c1> } 
    UNION 
    { <c1> blah <http://foo.com/f> } 
} 

ich kann ändere 'c1' zu 'a1' oder 'd1' und das obige sparql funktioniert immer noch

+0

Sie benötigen den Sequenzoperator '/' anstelle des alternativen Operators '|'. – AKSW

+0

Wollen Sie die * spezifischen * Prädikate ** blah ** und ** pt **, oder wollen Sie eine Sequenz von "diesem Prädikat und dann Wiederholungen dieses Prädikats"? –

+0

Es muss nicht ein bestimmtes Predciate sein. Ich versuche, irgendein Thema zu bekommen, das durch eines dieser Prädikate verbunden ist. Das Prädikat "blah" verbindet nur ein Subjekt mit einem Objekt, aber das Prädikat "pt" kann Objekte mit N Verbindungen verbinden. Ich werde den Sequenzoperator ausprobieren und Sie wissen lassen. –

Antwort

3

AKSW's comment war genau richtig, du brauchst eine Sequenz, keine Alternative. Basierend auf Ihrem Beispiel klingt es so, als ob Sie tatsächlich Objekte wollen, die mit einem bestimmten Objekt durch eine Kette von null oder einem Vorkommen von "blah" verbunden sind, und dann null oder mehr Vorkommen von "pt".

Wenn Sie dies für bestimmte Prädikate p und q tun wollen, dass Sie mit IRI Referenzen angeben können, dann ist es nur

?x p?/q* ?y 

Die * nach dem q bedeutet Null oder mehr, und die ? folgende p bedeutet null oder eins.

Allerdings, wenn Sie nicht wissen, die spezifischen IRIs im Voraus, zum Beispiel möchten Sie Variablen verwenden, in so etwas wie:

?x (?p)?/(?q)* ?y 

dann können Sie von Glück. SPARQL-Eigenschaftenpfade unterstützen keine Variablen. ! S, da jeder URI entweder s oder ist es nicht, aber es gibt keine Bestimmung wiederholbar Variablen in Immobilien Wege für die Umsetzung | Sie können Platzhalter in Immobilien Pfade mit so etwas wie s bekommen.

+0

Ich habe die Beschreibung aktualisiert. Entschuldigung, wenn ich es nicht gut beschreibe. Grundsätzlich gibt es einen Pfad, der eine der IRIs mit foo.com/f verbindet, aber ich weiß nicht, wie man einen Pfad aus mehreren Richtungen verbindet –

Verwandte Themen