2013-08-21 5 views
5

In nur diesen einen Quad zu einem leeren Speicher:Single Quad + einfachste SPARQL Abfrage = 1 Ergebnis in Jena, 2 Ergebnisse in Sesame - wer hat Recht?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

diese SPARQL Query Dann führen (aus pro Bob Ducharme Buch ‚SPARQL Lernen‘, so dass diese für die Beschaffung von alle Quads über die Standard-SPARQL sein muss Datensatz, unabhängig von der Implementierung, richtig??):

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

Aber Jena und Sesame antworten mit anderen Antworten !!? Hier ist, was ich sehe: (! Version 2.10.0 - out-of-the-Box, ohne Konfigurationsänderungen) -

Jena Fuseki Konsole auf Tomcat 6.0.37 (die richtige Antwort wie ich sie verstehe Dinge):

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Sesame Workbench auf Tomcat 6.0.37 (Version 2.7.3 - out-of-the-box, keine Konfigurationsänderungen!): Verwenden Sie einfach die Funktion 'Hinzufügen' in der Workbench, um manuell das obige Quad hinzuzufügen (mit 'N Klicken Sie in der Dropdown-Box "Datenformat" auf "Vierfach", geben Sie im Eingabefeld "Geben Sie die RDF-Daten ein, die Sie hochladen möchten" folgende Abfrage:

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Das ist für jemanden, der sich mit RDF beschäftigt, ein wenig gruselig - was fehlt mir hier? Ich nehme an, Sesam kann nicht "falsch" sein - also muss es meine "Interpretation" sein (oder Bobs Anfrage ist nicht "Standard-SPARQL", und so können verschiedene Implementierungen unterschiedliche Ergebnisse liefern) - jede Erleuchtung wäre sehr herzlich willkommen :) !

+3

Die linke Seite Ihrer 'UNION' fragt nach dem Standardgraphen ab.Ich vermute, dass sich der Unterschied aus dem ergibt, was in diesen beiden Systemen im Standardgraphen enthalten ist. Zum Beispiel ist vielleicht in Jena das Standarddiagramm leer, es sei denn, Tripel werden hinzugefügt, und in Sesam ist das Standarddiagramm die Vereinigung der benannten Graphen? –

Antwort

7

Wie @Joshua Taylor in seinem Kommentar darauf hinweist, ist die Ursache, dass Sesame und Jena eine andere Interpretation des Standardgraphen verwenden.

In Sesam wird das gesamte Repository als Standardgraph betrachtet: alle Anweisungen in allen benannten Graphen sowie alle Anweisungen ohne einen benannten Graphen. Daher ist das erste Argument Ihrer Union, die das Standarddiagramm abfragt, erfolgreich und bindet ?s, ?p und ?o (aber nicht ?g). Das zweite Argument Ihrer Vereinigung ist natürlich auch erfolgreich, weil das ursprüngliche Quad natürlich in einem benannten Graphen ist und Sie daher zwei Antworten erhalten.

Jena verwendet standardmäßig ein "exklusives" Standarddiagramm: Nur die Anweisungen, die keinem bestimmten benannten Diagramm explizit hinzugefügt wurden, befinden sich im Standarddiagramm. In Jena scheitert daher der erste Teil Ihrer Vereinigung (in Jena's Standardgraph gibt es keine übereinstimmenden Aussagen), der zweite Teil ist erfolgreich, und Sie erhalten daher nur 1 Ergebnis.

Seltsam wie es klingen mag, sind beide richtig. Der Unterschied besteht einfach darin, wie die Datenmenge, auf der die Abfrage ausgeführt wird, eingerichtet wird.

Natürlich gibt es Möglichkeiten, damit umzugehen. Sowohl in Jena als auch in Sesam können Sie FROM (NAMED)-Klauseln hinzufügen, um das abgefragte Dataset explizit zu machen (Sesame bietet den Graphennamen sesame:nil an, um explizit jene Anweisungen abzufragen, die keinem benannten Graphen zugeordnet sind). Alternativ können Sie die Dataset-Definition, für die eine Abfrage ausgeführt wird, programmgesteuert ändern. Die genauen Mechanismen in Jena und Sesam sind ein wenig anders, aber beide haben die Option (in Sesame, können Sie ein Dataset Objekt erstellen und liefern mit Ihrer Abfrage vor der Ausführung, in Jena glaube ich, dass Sie den tatsächlichen Laden oder das Modell neu konfigurieren können Sie führen die Abfrage aus, um sich anders zu verhalten).

+4

Nachdem ich den früheren Kommentar gepostet habe, habe ich nach Wegen gesucht, wie man in Jena die Standard- und Vereinigungsgraphen bekommen kann. [Die Dokumentation] (http://jena.apache.org/documentation/tdb/datasets.html) beschreibt zwei spezielle Graphen, urn: x-arq: UnionGraph und urn: x-arq: DefaultGraph. –

+4

Ich muss nicht in der Abfrage sein: Wenn Sie über Kontext setzen TDB.getContext(). Set (TDB.symUnionDefaultGraph, true); dann ist das Abfrage-Standarddiagramm die Vereinigung der benannten Graphen. Siehe http://jena.apache.org/documentation/tdb/datasets.html – AndyS

Verwandte Themen