Ich versuche herauszufinden, wie Jena TDB SPARQL-Abfragen mit mehreren FROM
Klauseln auf dem physischen Abfrageplan-Ebene behandelt. Ich würde gerne wissen, wie Jena TDB die Ausführung einer Abfrage über verschiedene Graphen behandelt.Jena TDB physischen Abfrageplan mit mehreren FROM-Klauseln
Ich habe ein paar kleine Experimente gemacht und die Abfragealgebra betrachtet, es ist mir jedoch nicht klar, wie die FROM
Klauseln die Algebra beeinflussen. Es sieht so aus, als ob die FROM-Klauseln in der Algebra verworfen werden. Ich erwarte, dass die Algebra über die Vereinigung der Graphen ausgewertet wird, aber ich möchte sicher sein.
Ich habe folgende Quads:
<http://example.com/book2/> <http://example.com/price> "5"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.com/A> .
<http://example.com/book2/> <http://example.com/title> "Lord of the Rings" <http://example.com/B> .
und die folgende Abfrage:
SELECT (AVG(?price) as ?total)
FROM <http://example.com/A>
FROM <http://example.com/B>
WHERE {
?book <http://example.com/price> ?price .
?book <http://example.com/title> ?title .
}
./tdbquery --loc test --query test.sparql --explain
Die Abfrage Algebra sieht wie folgt aus:
INFO exec :: ALGEBRA
(project (?total)
(extend ((?total ?.0))
(group() ((?.0 (avg ?price)))
(bgp (triple ?book <http://example.com/price> ?price)))))
Wenn ich ausführen die Abfrage über die Daten Ich erhalte das erwartete Ergebnis.
In dem oben dargestellten Fall müssen die Datensätze irgendwann zusammengeführt werden, damit die Abfrage beantwortet werden kann. Die Abfrage wird keine Antwort liefern, wenn sie über Graph A und dann Graph B ausgeführt wird. Ich würde gerne wissen, wie das konkret funktioniert. –
Aha! TDB hat eine spezielle Eigenschaft: [dynamische Datensätze] (https://jena.apache.org/documentation/tdb/dynamic_datasets.html), weshalb Ihre Abfrage funktioniert. – user205512
Ich weiß, wissen Sie, wann das dynamische Dataset erstellt wurde? Ist es einmal getan, bevor die Abfrage beantwortet wird oder für jedes "Blatt" im Abfrageplan? Mein Beispiel oben ist, um dieses Problem einfach zu zeigen, wenn meine Bedeutung nicht klar ist, dann werde ich eine neue Frage posten, um das Problem mit einem Beispiel zu erklären. –