2011-01-30 16 views
5

Sto cercando di fare una richiesta che utilizza sia bibleontology e DBpedia database semantico:Iscriviti endpoint semantici nella query SPARQL

PREFIX bibleontology: <http://bibleontology.com/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 

SELECT ?art ?abstract WHERE { 
bibleontology:Ezra owl:sameAs ?art . 
?art dbo:abstract ?abstract . 
} 

Questo tipo di richiesta lavora né il bibleontology SPARQL endpoint, né sul SPARQL DBpedia endpoint. Le singole parti delle richieste funzionano bene su ciascun endpoint SPARQL.

È possibile unire i database in questo modo?

+1

Come è possibile eseguire query tra, quando il modello non viene fusa . Potrebbe essere possibile eseguire personalmente la raccolta dati, unendo i due archivi rdf (modelli), ma non è possibile eseguire una query incrociata. –

+0

Quindi RDF fornisce collegamenti ai luoghi in cui sono descritti i modelli, ma mai ai dati stessi? Pensavo che uno degli obiettivi del web semantico fosse quello di consentire query distribuite su vari set di dati? –

+0

Forse non ho capito il commento, come nel modello che viene unito. La stessa voce per la bontontologia: Ezra fornisce un collegamento a una voce dbo. Questo è ciò che mi ha fatto pensare che sarebbe stato possibile unirmi a loro. –

risposta

6

Quella richiesta non funziona su né dbpedia o bibleontology perché le informazioni sono memorizzate in due diversi database e quando si esegue una query che si SPARQL fondamentalmente ha colpito uno o l'altro. Ciò significa che devi scaricare i dati da entrambi i database per metterli in un triplo store locale per poter eseguire una query SPARQL come quella che hai mostrato. Un'altra opzione è usare una libreria che lo faccia per te.

The Semantic Web Client Library seguirà tutti gli URI presenti nella query SPARQL e scaricherà i dati RDF da ciascuna risorsa in modo che possa unire tutti i tripli motivi visualizzati nella query dell'utente e fornire le risposte.

È possibile eseguire la query con alcune lievi modifiche:

PREFIX bibleontology: <http://bibleontology.com/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX dbpedia: <http://dbpedia.org/ontology/> 

SELECT * WHERE { 
bibleontology:Ezra owl:sameAs ?art . 
?art dbpedia:abstract ?abstract . 
FILTER langMatches(lang(?abstract), "EN") 
} 

Spiegazione delle modifiche:

  1. Incluso owl e dbpedia namespace
  2. ?art dbpedia:abstract ?abstract . è necessario abbinare il dbpedia:abstract predicato per ottenere l'abstract al posto di bibleontology:abstract per ottenere l'abstract da dbpedia
  3. Ho anche incluso uno filter per recuperare solo gli abstract in inglese, questo è ovviamente facoltativo.

Una volta scaricato "Il Web Semantico Biblioteca" e si mette la query in un file (ad esempio: query.sparql) è possibile eseguire il seguente comando per verificare la vostra query:

./semwebquery -sparqlfile query.sparql -retrieveduris -maxsteps 5 

Tutto il i parametri di comando sono illustrati nella documentazione della libreria client Web semantica.

si otterrebbe il seguente output:

| ?art        | ?abstract 
| <http://dbpedia.org/resource/Ezra> | "Ezra is a major .... "@en | 

Successfully dereferenced URIs: 

http://www.w3.org/2002/07/owl 
http://bibleontology.com/data/Ezra 
http://dbpedia.org/data/Ezra.xml 
http://dbpedia.org/data3/abstract.n3 

ho omesso il lungo astratta da DBpedia per semplicità. L'elenco di "URI con esito positivo senza referenze" sono i documenti recuperati dalla libreria per rispondere alla tua domanda. Nella documentazione della libreria vedrai come eseguire query in modo programmatico in Java.

+0

Questo è interessante, sebbene lo strumento sia piuttosto lento. Per qualche ragione, questo strumento sembra restituire solo un risultato, anche se la richiesta dovrebbe restituire più di un risultato, come ad esempio 'PREFIX bo: PREFIX bop: PREFIX dbo: PREFIX gufo: PREFISSO dbpedia: SELECT DISTINCT? Parent? Abstract WHERE { bo: Moses bop: hasParents? Parent. ? Parent gufo: sameAs? Art. ? Art dbpedia: abstract? Abstract. FILTER (LANG (? Abstract) = "en") } ' –

+0

In realtà, se cerco solo i genitori, mi dà una lista di due voci, ma se cerco gli abstract, elenca solo gli abstract per il primo genitore, non il secondo. –

6

Tutte le altre risposte sono corrette nel dire che non è possibile effettuare la query poiché i dati non sono combinati in un singolo endpoint SPARQL. Se uno dei punti finali supporta SPARQL 1.1 Federati Interrogazione allora si può essere in grado di utilizzare la parola chiave SERVICE in questo modo:

PREFIX bibleontology: <http://bibleontology.com/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

SELECT ?art ?abstract 
WHERE 
{ 
    bibleontology:Ezra owl:sameAs ?art . 
    SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . } 
} 

È piacerebbe presentare la domanda di cui sopra per la bibleontology SPARQL endpoint ea condizione che supporta la parola chiave SERVICE invia parte della query all'endpoint SPARQL di DBPedia.

Anche se il punto finale SPARQL supporta la parola SERVICE allora siete ancora affidamento sui dati pertinenti che sono nei due set di dati cioè l'ontologia Bibbia ha bisogno di avere un owl:sameAs che punta a una risorsa DBPedia in modo che la clausola SERVICE effettivamente trovare nulla.

alternativa

Se nessuna di endpoint supportano la parola SERVICE quindi è possibile configurare un endpoint locale o utilizzare uno strumento a riga di comando che supporta la parola SERVICE (Tirerò alcuni link su se' ri interessati) e quindi eseguire il seguente:

PREFIX bibleontology: <http://bibleontology.com/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

SELECT ?art ?abstract 
WHERE 
{ 
    SERVICE <http://bibleontology.com/sparql> { bibleontology:Ezra owl:sameAs ?art . } 
    SERVICE <http://dbpedia.org/sparql?default-graph-uri=http://dbpedia.org> { ?art dbo:abstract ?abstract . } 
} 

Se il locale strumento/endpoint supporta SERVICE allora sarà in grado di inviare le parti pertinenti della query agli endpoint rilevanti e fare l'unione a livello locale e la speranza pienamente restituire i risultati che sono dopo

+0

Sembra molto interessante, ma non funziona per nessuno dei due endpoint SPARQL che ho provato. Continuerò a provare su altri endpoint. Come si installa un endpoint locale? –

+0

Sì, in precedenza, SPARQL 1.1 non è stato ancora adottato in modo definitivo – RobV

+0

Mi sto solo avvicinando a SPARQL e così via. Potresti darmi degli endpoint locali che supportano SPARQL 1.1? – Karsten

10

Sono Engineer per bibleontology.com

bibleontology.com adottato SPARQL1.1

PREFIX bibleontology: <http://bibleontology.com/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT ?art ?abstract 
WHERE { 
SERVICE <http://bibleontology.com/sparql/> { bibleontology:Ezra owl:sameAs ?art . } 
SERVICE <http://dbpedia.org/sparql> { ?art dbo:abstract ?abstract . } } 
+0

Grazie wonseok oh :-) –