Ich habe folgende SPARQL-Abfrage, die eine Unterauswahl enthält. Die Daten enthalten mehrere Grafiken und ich möchte wissen, welche Diagramm die Werte für ?b
und ?m
kommen aus:SPARQL Subquery Graph Namen
select ?b, ?m, ?g1
where {
{
select ?o1, ?o2, ?e
where{
graph ?g{
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> ?o1.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> ?o2.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_iteration> '0'^^xsd:decimal.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_exposureday> ?e.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_pid1> ?o1.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_pid2> ?o2.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_acttype1> '5'^^xsd:decimal.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_acttype2> '5'^^xsd:decimal
}
}ORDER BY ASC(?e) LIMIT 1
}
{
graph ?g1 {
?b <http://ndssl.bi.vt.edu/chicago/vocab/getInfectedBy> ?o1.
?m <http://ndssl.bi.vt.edu/chicago/vocab/getInfectedBy>* ?b.
}
}
}
Das zweite Diagramm Muster eine transitive Eigenschaft Pfad enthält und die Abfrage liefert folgende korrekte Ergebnis:
b m g1
----------------------------------------------------- ----------------------------------------------------- -------------------------------------------------------
<http://ndssl.bi.vt.edu/chicago/person/pid#446734805> <http://ndssl.bi.vt.edu/chicago/person/pid#446753456> <http://ndssl.bi.vt.edu/chicago/dendrogram/replicate1/>
Allerdings möchte ich die Zwischenknoten sehen und die Pfadlänge von transitiven Beziehung zählen. Wenn ich graph ?g1
aus der Abfrage entfernen, dann zeigt es die Zwischenknoteninformationen wie folgt vor:
b m
--------------------------------------------------- ---------------------------------------------------
http://ndssl.bi.vt.edu/chicago/person/pid#446718746 http://ndssl.bi.vt.edu/chicago/person/pid#446718746
http://ndssl.bi.vt.edu/chicago/person/pid#446734805 http://ndssl.bi.vt.edu/chicago/person/pid#446734805
http://ndssl.bi.vt.edu/chicago/person/pid#446734805 http://ndssl.bi.vt.edu/chicago/person/pid#446753456
Der Zweck des Abfragediagrammnamen, um herauszufinden, für den Abgleich ?b
und ?m
ist. Daher möchte ich graph ?g1
verwenden. Ist es möglich, Zwischenknoten anzuzeigen, indem das Schlüsselwort beibehalten wird? Ich benutze Virtuoso.
Off-Topic: Es ist illegal, SPARQL-Syntax mit dem ','. Aus Gründen der besseren Lesbarkeit würde ich vorschlagen, es kompakter zu gestalten, indem Sie die TURTLE-Funktionen verwenden, insbesondere für die erste Unterauswahl. – AKSW