2011-01-30 18 views
5

que estoy tratando de hacer una solicitud que utiliza tanto bibleontology y DBpedia bases de datos semánticas:Únete extremos semánticos en consulta 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 . 
} 

Este tipo de solicitud funciona en ni el bibleontology SPARQL punto final, ni en el SPARQL DBpedia punto final Las partes individuales de las solicitudes funcionan bien en cada punto final SPARQL.

¿Es posible unir bases de datos de esta manera?

+1

¿Cómo se puede realizar la consulta cruz, cuando el modelo no se fusiona . Puede ser que usted mismo pueda realizar la recopilación de datos fusionando las dos tiendas de rdf (modelos), pero tal como está, no puede realizar una consulta cruzada. –

+0

¿Entonces RDF proporciona enlaces a los lugares donde se describen los modelos, pero nunca a los datos mismos? Pensé que uno de los objetivos de la web semántica era permitir consultas distribuidas en varios conjuntos de datos. –

+0

Quizás no entendí el comentario, como en el modelo que se está fusionando. La misma entrada para bibleontología: Ezra sí da un enlace a una entrada dbo. Esto es lo que me hizo pensar que sería posible unirme a ellos. –

Respuesta

6

Esa consulta no funciona ni en dbpedia ni en bibleontology porque la información se almacena en dos bases de datos diferentes y cuando ejecuta una consulta SPARQL, básicamente golpea una u otra. Esto significa que debe descargar los datos de ambas bases de datos para colocarlos en una tienda local triple con el fin de poder ejecutar una consulta SPARQL como la que mostró. Otra opción es usar una biblioteca que lo haga por usted.

The Semantic Web Client Library seguirá todos los URI que tenga en su consulta SPARQL y descargará los datos RDF de cada recurso para que pueda unir todos los patrones triples que aparecen en su consulta y dar las respuestas.

Se puede ejecutar la consulta con algunos cambios menores:

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") 
} 

Explicación de los cambios:

  1. Incluido owl y dbpedia espacios de nombres
  2. ?art dbpedia:abstract ?abstract . Es necesario que coincidan el predicado dbpedia:abstract para obtener el resumen en lugar de bibleontology:abstract para obtener el resumen de dbpedia
  3. También he incluido un filter para recuperar resúmenes en inglés, esto es por supuesto opcional.

Una vez que descargue "La Biblioteca Web Semántica" y poner su consulta en un archivo (es decir: query.sparql) puede ejecutar el siguiente comando para poner a prueba su consulta:

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

Todo el los parámetros de comando se explican en la documentación de la biblioteca de cliente de Web Semántica.

se llega a la siguiente salida:

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

He omitido el largo abstracción de DBpedia por simplicidad. La lista de "URI correctamente desreferenciados" es documentos recuperados por la biblioteca para responder a su consulta. En la documentación de la biblioteca, verá cómo ejecutar consultas programáticamente en Java.

+0

Eso es interesante, aunque la herramienta es bastante lenta. Por alguna razón, esta herramienta parece solo devolver un resultado, incluso si la solicitud debe devolver más de un resultado, como 'PREFIX bo: PREFIJO bop: PREFIX dbo: PREFIX owl: PREFIX dbpedia: SELECT DISTINCT? Parent? Abstract WHERE { bo: Moses bop: hasParents? Parent. ? Búho padre: sameAs? Art. ? Art dbpedia: abstract? Abstract. FILTER (LANG (? Abstract) = "en") } ' –

+0

En realidad, si solo busco los padres, me da una lista de dos entradas, pero si busco los resúmenes, solo se enumeran los resúmenes para el primer padre, no para el segundo. –

6

Todas las otras respuestas son correctas al decir que no se puede hacer la consulta tal como está, porque los datos no se combinan en un único punto final SPARQL. Si uno de los criterios de valoración apoya SPARQL 1.1 Federados Consulta a continuación, es posible que pueda utilizar la palabra clave SERVICE así:

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

te había enviar la consulta anterior a la bibleontology SPARQL punto final y siempre que admita la palabra clave SERVICE envía parte de su consulta al punto final DBPedia SPARQL.

Incluso si su SPARQL endpoint es compatible con la palabra clave SERVICE entonces usted está todavía dependen de los datos relevantes que están en los dos conjuntos de datos, es decir, la Biblia ontología tiene que tener un owl:sameAs que apunta a un recurso DBPedia con el fin de que la cláusula SERVICE realidad encontrar cualquier cosa.

Alternativamente

Si ninguno de los puntos finales apoyar la palabra clave SERVICE entonces se puede establecer un punto final local o utilizar una herramienta de línea de comandos que admite la palabra clave SERVICE (Cavaré algunos enlaces para arriba si usted' está interesado) y luego emitir el siguiente:

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

Si su herramienta/extremo local apoya SERVICE entonces será capaz de enviar las partes pertinentes de la consulta a las variables relevantes y hacer la unión local y la esperanza plenamente devolver los resultados que está después

+0

Eso se ve muy interesante, pero no funciona para ninguno de los dos puntos finales SPARQL que probé. Seguiré probando en otros puntos finales. ¿Cómo instalo un endpoint local? –

+0

Sí, por desgracia, lo anterior es SPARQL 1.1, por lo que no se ha adoptado ampliamente aún – RobV

+0

Estoy entrando en SPARQL y demás. ¿Podría darme algunos puntos finales locales compatibles con SPARQL 1.1? – Karsten

10

Soy Ingeniero de bibleontology.com

bibleontology.com adoptó 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

Gracias wonseok oh :-) –