SPARQL-Abfragen mehrerer der Gebiete in äußerster Randlage in den gleichen filter
Ok nehmen wir an ich habe 5 Datentyp-Eigenschaften mit Integer-Werten. Diese Eigenschaften geltend gemacht werden zu Individuen, die zur Klasse "WWS". Diese Klasse hat wie 4 Personen. Aber nur einige der Datentyp-Eigenschaften sind bei diesen Personen.
Wie kann ich die Abfrage der Individuen dieser Klasse erfüllen wie der Wert 5. Ich möchte die variable zeigt nur diejenigen Personen, deren Eigenschaften erfüllt sind, der rest soll nicht angezeigt werden.
Ich hoffe das ist klar!
Danke!
Daten:
datatype properties (range:integers): #greaterthantoc #lessthantoc #lowerlimtoc #upperlimtoc #equalstoc
individuals: #ww1, #ww2, #ww3 , #ww4 belong to class #WWS
#ww1 has #greaterthantoc "0"^^xsd:integer
#ww2 has #lessthantoc "5"^^xsd:integer
#ww3 has #greaterthantoc "5"^^xsd:integer
#ww4 has #lowerlimtoc "9"^^xsd:integer and #upperlimtoc "10"^^xsd:integer
Conditions for each property (filter?):
#greaterthantoc <= "a number"
#lessthantoc >= "a number"
#lowerlimtoc <= "a number" && #upperlimtoc >= "a number"
#equalstoc = "a number"
Ergebnisse sollten die WWS Personen, die erfüllen diese Bedingungen. Zum Beispiel, wenn die Nummer 4 ist dann sollte das WW1 und WW2
Ich vermute, ich brauche sowas für meinen Fall, aber es immer noch nicht Ergebnisse zurück:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ww:<#>
SELECT ?str
WHERE {?str rdf:type ww:WWS .
OPTIONAL { ?str ww:greaterthantoc ?gr; ww:lessthantoc ?les ; ww:lowerlimtoc ?low ; ww:upperlimtoc ?up ; ww:equalstoc ?eq . }
FILTER ( ?les >= 3 || ?gr <= 3 || (?low <= 3 && ?up >=3) || ?eq = 3)
}
ww:
im Unterschied Beispiele ist eine große rote fahne, wenn. Bis es bearbeitet wird, diese Frage konnte geschlossen werden, um den Grund: "für Diese Frage zu sein scheint off-topic, weil es nicht genügend Informationen, um das problem zu diagnostizieren. Beschreiben Sie Ihr problem im detail, oder eine minimal-Beispiel in der Frage selbst."Ich aktualisierte das Thema. Ist es klarer jetzt?
Eigentlich, Sie entfernt eine Menge von der Frage, und das verändert den Kontext, denke ich. In deinem original-posting, Sie hatte
filter ( ... || ... || ... )
", das bedeutet "halten Sie Lösungen, die befriedigen, x oder y oder z". Jetzt hast du filter ... filter ... filter ...
, was bedeutet, "zu halten-Lösungen erfüllen x und y und z", die ganz anders ist. Sie benötigen zum anzeigen der Daten und die Ergebnisse, die Sie zu erreichen versuchen, und Sie haben das nicht getan noch.Aber was die update nicht hinzufügen, und ich denke, dass dies wichtig ist, ist, dass nicht für jeden einzelnen, der die Werte für jede Eigenschaft. Das bedeutet, dass Sie gehen zu müssen einige optionalen, dazu passenden. Das ist nicht allzu schwer. Ich werde aktualisieren, meine Antwort...
Wusste nicht, dass mehrere Filter bedeutet "und... und". So || ist die richtige für meinen Fall. Und ja, nicht jeder Mensch hat Werte für jede Eigenschaft. Das ist, warum, während ich die Abfrage, die Sie als singles es gibt Ergebnisse zurück, aber wenn ich Ihnen versuche, mehrere auf die gleiche Abfrage wird es nicht reagieren. Ich werde den Beitrag aktualisieren, Daten und gewünschten Ergebnisse
InformationsquelleAutor user3211165 | 2014-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie haben nicht gezeigt, Ihre Daten und Ihre Abfragen ändern auf seltsame Weise (z.B. mit einer anderen URI für den
ww:
Präfix), so ist es schwer zu sagen, was die Abfragen, die Sie haben, vorausgesetzt, Sie tatsächlich zurück. Es ist jedoch durchaus möglich, mit mehr als einer Bedingung mit||
in einer SPARQL-filter., Wenn die Individuen haben Werte für alle Eigenschaften
Mithilfe der
values
konstruieren, können wir einige Daten in der Abfrage und zu sehen, dass ein multi-way||
funktioniert:Beachten Sie, dass die Werte im Zusammenhang mit
:s6
und:s7
müssen nicht alle Werte, die größer als zwei, so dass wir nicht erwarten, zu sehen in der Ausgabe. Den rest haben jeweils einen Wert, der eine der disjuncts wahr. Hier sind die Ergebnisse der Abfrage:Wenn die Bedingungen die gleichen
In dem obigen Beispiel, wie in der ursprünglichen version der Frage, die Einschränkung auf jede variable die gleiche war. Wenn das der Fall ist, kann man diese Abfrage kürzer, indem eine disjunktive Eigenschaft der Pfad, oder mit
values
. Mit einer disjunktiven Eigenschaft der Pfad, man könnte schreiben:Mithilfe von Werten, könnten Sie schreiben:
Da Sie erwähnten Interaktion mit
optional
beachten Sie, dass jede dieser hat den Vorteil, dass?s
nicht haben, um Werte für alle die Eigenschaften, sondern wenn?s
einen Wert hat, der größer als zwei für alle der angegebenen Eigenschaften, Sie werden in der Lage sein, um es zu finden. In einigen Ihrer ursprünglichen Abfragen, wo Sie Muster Analog zuerhalten Sie nur Bindungen für
?s
für Ressourcen, die einen Wert für:prop1
und einen Wert für:prop2
und einen Wert für:prop3
., Wenn der Mensch nicht Wert Werte für alle Eigenschaften
In dem Fall, dass die Individuen nicht alle Werte für alle Eigenschaften, die Dinge ein bisschen schwieriger, weil Sie brauchen, um Optional entsprechen den Werten, da einige nicht anwesend sein. Dies ist nicht viel schwieriger, wenn. Legen Sie einfach die Teile, die möglicherweise nicht vorhanden sein, innerhalb von
optional
Blöcke:OK, also die echte Abfrage kann nicht verdichtet werden, so schön. Auch so, die erste Abfrage, die explizit mit mehreren Bedingungen funktioniert, richtig?
Wie Sie sagte, nicht alle Menschen haben alle Eigenschaften geltend gemacht werden. So funktioniert es nicht wirklich für diesen Fall. Plus, es ist ein bisschen kompliziert, um die Ergebnisse zu kombinieren (Individuen der Klasse:WWS, die diese Bedingungen erfüllen von verschiedenen Eigenschaften) in die gleiche variable.
Richtig, ich verstehe, dass jetzt, aber Ihre ursprüngliche Beispiel nicht zeigen, dass die Werte hatten unterschiedliche Bedingungen, so sah es aus wie ein leichter problem. Ich werde aktualisieren, die Antwort bald zu zeigen, wie dies mit
optional
.OK, ich habe aktualisiert die Antwort. Es enthält Beispiele mit
optional
.InformationsquelleAutor Joshua Taylor