2013-08-21 9 views
5

Dodaj tylko ten jeden quad do pustego sklepu:Single quad + najbardziej podstawowe zapytanie SPARQL = 1 powoduje Jena, 2 wyniki w Sesame - kto ma rację?

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

następnie wykonać to zapytanie SPARQL (wzięte z za książki Boba Ducharme za „uczenie sparql”, więc musi to być standardowe sparql do pobierania wszystkie quady poprzek dataset, niezależnie od implementacji, prawda !?):

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

Ale Jena i Sezame odpowiadają różnymi odpowiedziami !!? Oto co widzę: (! Wersji 2.10.0 - out-of-the-box, bez zmiany konfiguracji) -

konsolę

Jena fuseki na Tomcat 6.0.37 (poprawna odpowiedź jak rozumiem rzeczy):

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

Sesame Workbench na Tomcat 6.0.37 (wersja 2.7.3 - natychmiast po zainstalowaniu, bez zmian konfiguracji!): Wystarczy użyć funkcji "Dodaj" w warsztacie, aby ręcznie dodać powyższy quad (za pomocą 'N -Kontrola "wybrana w polu" Format danych "), w polu edycji" Wprowadź dane RDF, które chcesz przesłać ", a następnie wykonaj powyższe zapytanie:

-------------------------------------------------------------- 
| 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 | 
-------------------------------------------------------------- 

To trochę przerażające dla kogoś, kto zaczyna przyglądać się RDF - czego tu brakuje? Zakładam, że Sesame nie może być "zepsuty" - więc to chyba moja "interpretacja" (lub zapytanie Boba nie jest "standardowym SPARQL", a więc różne implementacje mogą zwrócić różne wyniki) - każde oświecenie byłoby bardzo Witamy :) !

+3

Lewa strona zapytań 'UNION' na domyślnym wykresie.Podejrzewam, że różnica wynika z zawartości domyślnego wykresu w tych dwóch systemach. Na przykład, być może w Jenie domyślny wykres jest pusty, chyba że dodamy trzyosobowe, a w Sezamie domyślnym wykresem jest związek nazwanych wykresów? –

Odpowiedz

7

Jak zaznacza @Joshua Taylor w swoim komentarzu, przyczyną jest to, że Sesame i Jena używają innej interpretacji domyślnego wykresu.

W Sezamie całe repozytorium jest uważane za domyślny wykres: wszystkie wyciągi we wszystkich nazwanych wykresach oraz wszystkie wyciągi bez określonego wykresu. Dlatego pierwszy argument waszego związku, który wyszukuje domyślny wykres, kończy się sukcesem i wiąże się (ale nie musi). Drugi argument waszego związku oczywiście również się powiódł, ponieważ oryginalny quad jest oczywiście na nazwanym wykresie, a zatem otrzymujemy dwie odpowiedzi.

Domyślnie Jena używa domyślnego wykresu "wyłącznego": tylko instrukcje, które nie są jawnie dodane do żadnego konkretnego wykresu o nazwie, znajdują się na domyślnym wykresie. Dlatego w Jenie pierwsza część twojego związku nie powiedzie się (nie ma zgodnych stwierdzeń na domyślnym wykresie Jeny), druga część się powiedzie, a ty otrzymujesz tylko 1 wynik.

Dziwne, jak może się wydawać, obie są poprawne. Różnica polega po prostu na tym, w jaki sposób zestaw danych, na którym wykonywane jest zapytanie.

Oczywiście istnieją sposoby radzenia sobie z tym. Zarówno w Jenie, jak i Sezamie można dodać klauzule FROM (NAMED), aby wyjaśnić, czym jest kwestionowany zestaw danych (Sezam oferuje nazwę wykresu sesame:nil, aby jawnie wyszukiwać te instrukcje, które nie mają skojarzonego wykresu nazwanego). Alternatywnie można programowo zmodyfikować definicję zbioru danych, w której wykonywane jest zapytanie. Dokładne mechanizmy w Jenie i Sezamie są nieco inne, ale obie mają opcję (w Sezamie możesz utworzyć i dostarczyć obiekt Dataset z zapytaniem przed wykonaniem, w Jenie wierzę, że możesz przekonfigurować rzeczywisty sklep lub model, na którym wykonujesz zapytanie, aby zachowywać się inaczej).

+4

Po opublikowaniu wcześniejszego komentarza, zajrzałem do sposobów, aby uzyskać domyślne i połączone wykresy w Jenie. [Dokumentacja] (http://jena.apache.org/documentation/tdb/datasets.html) opisuje dwa specjalne wykresy: 'urn: x-arq: UnionGraph' oraz' urn: x-arq: DefaultGraph'. –

+4

Nie muszę być w zapytaniu: jeśli ustawisz przez kontekst TDB.getContext() .set (TDB.symUnionDefaultGraph, true); wtedy domyślny wykres zapytania jest połączeniem nazwanych wykresów. Zobacz http://jena.apache.org/documentation/tdb/datasets.html – AndyS

Powiązane problemy