2013-08-21 11 views
5

Aggiungere solo questa quad a un negozio vuoto:Quadrupla singola + query SPARQL di base = 1 risultato in Jena, 2 risultati in Sesame - chi ha ragione?

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

quindi eseguire la query SPARQL (tratto da per libro di Bob DuCharme 'Imparare SPARQL', quindi questo deve essere standard SPARQL per il recupero tutti quad in tutto il set di dati, a prescindere dalla realizzazione, a destra !?):

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

Ma Jena e sesamo rispondere con risposte differenti !!? Ecco quello che vedo: (! Versione 2.10.0 - out-of-the-box, senza modifiche di configurazione) -

console

Jena Fuseki su Tomcat 6.0.37 (la risposta corretta a quanto mi risulta le cose):

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

Sesame Workbench su Tomcat 6.0.37 (versione 2.7.3 - out-of-the-box, nessuna modifica alla configurazione!): È stata utilizzata la funzione 'Aggiungi' nel workbench per aggiungere manualmente il quad precedente (con 'N -Quad 'selezionato nella casella a discesa' Formato dati '), nella casella di modifica' Inserisci i dati RDF che desideri caricare ', quindi eseguendo la query sopra:

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

Quindi questo è piuttosto spaventoso per qualcuno che inizia a guardare RDF - cosa mi manca qui? Presumo che Sesame non possa essere 'sbagliato' - quindi deve essere la mia 'interpretazione' suppongo (o la query di Bob non è 'standard SPARQL', e implementazioni così diverse sono libere di restituire risultati diversi) - qualsiasi chiarimento sarebbe molto benvenuto :) !

+3

Il lato sinistro delle query 'UNION' rispetto al grafico predefinito.Sospetto che la differenza derivi da ciò che è contenuto nel grafico predefinito in questi due sistemi. Ad esempio, forse in Jena il grafico predefinito è vuoto a meno che non siano aggiunte le triple, e in Sesame il grafico predefinito è l'unione dei grafici nominati? –

risposta

7

Come @Joshua Taylor fa notare nel suo commento, la causa è che Sesame e Jena usano una diversa interpretazione del grafico predefinito.

In Sesame, l'intero repository è considerato il grafico predefinito: tutte le istruzioni in tutti i grafici nominati e tutte le istruzioni senza un grafico con nome. Pertanto, il primo argomento della tua unione, che esegue una query sul grafico predefinito, ha esito positivo e vincola ?s, ?p e ?o (ma non ?g). Il secondo argomento della tua unione ovviamente ha successo anche perché il quad originale è ovviamente in un grafo chiamato, e quindi ottieni due risposte.

Jena utilizza un grafico predefinito "esclusivo" per impostazione predefinita: solo le istruzioni che non sono esplicitamente aggiunte a un particolare grafico con nome si trovano nel grafico predefinito. Pertanto, in Jena, la prima parte del tuo sindacato fallisce (non ci sono dichiarazioni corrispondenti nel grafico predefinito di Jena), la seconda parte ha esito positivo e pertanto ottieni solo 1 risultato.

Per quanto strano possa sembrare, entrambi sono corretti. La differenza consiste semplicemente nel modo in cui viene impostato il set di dati su cui viene eseguita la query.

Naturalmente, ci sono modi per affrontare questo. Sia in Jena che in Sesame, è possibile aggiungere le clausole FROM (NAMED) per rendere esplicito il set di dati interrogato (Sesame offre il nome del grafico sesame:nil per interrogare esplicitamente le istruzioni a cui non è associato un grafico con nome). In alternativa, è possibile modificare a livello di codice la definizione del set di dati su cui viene eseguita una query. I meccanismi precisi in Jena e Sesame sono un po 'diversi, ma entrambi hanno l'opzione (in Sesame, puoi creare e fornire un oggetto Dataset alla tua query prima dell'esecuzione, in Jena credo che tu possa riconfigurare il negozio o il modello reale su cui si esegue la query per comportarsi in modo diverso).

+4

Dopo aver postato il commento precedente, ho esaminato i modi per ottenere i grafici di default e di unione in Jena. [La documentazione] (http://jena.apache.org/documentation/tdb/datasets.html) descrive due grafici speciali, 'urna: x-arq: UnionGraph' e' urn: x-arq: DefaultGraph'. –

+4

Non è necessario che sia presente nella query: se si imposta tramite il contesto TDB.getContext(). Set (TDB.symUnionDefaultGraph, true); quindi il grafico di default della query è l'unione dei grafici nominati. Vedi http://jena.apache.org/documentation/tdb/datasets.html – AndyS

Problemi correlati