2011-12-20 14 views
9

Soy un principiante de SPARQL y me preguntaba si habría alguna consulta que me pueda ayudar a restablecer las relaciones transitivas. Por ejemplo, el archivo n3 a continuación me gustaría una consulta que devuelva "a es el sameas c" o algo así. GraciasSPARQL Query Transitive

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

Respuesta

13

Puede utilizar rutas de propiedad si está utilizando un motor convenientemente habilitado SPARQL 1.1, que lo ha insertado en cuestión Jena, así que supongo que está utilizando su motor de ARQ que soporta esta característica.

para que pueda escribir una consulta como la siguiente:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

Nota del + después del predicado, que se utiliza para indicar que se debe buscar relaciones compuestas por uno/más pasos.

La sintaxis de las rutas de propiedades se puede encontrar here y es una expresión muy regular como. La única desventaja de las consultas que utilizan esto es que no se obtiene información acerca de cuánto duran las rutas o cuáles son los nodos intermedios.

+0

Gracias de nuevo por la ayuda. Verifique definitivamente el enlace en la sintaxis SPARQL – Sam

+3

Si lo que está consultando admite el razonamiento OWL, específicamente un perfil de OWL que incluye transitividad y ha definido la propiedad como una Propiedad Transitiva, entonces no necesita ningún SPARQL especial sintaxis, puede usar la propiedad normalmente y el razonador hará lo correcto. – Michael

4

Mientras que RobV's answer es correcto en su caso, creo que la naturaleza bidireccional de owl: sameAs vale la pena mencionar.

Vamos a ampliar su ejemplo, por el siguiente:

:a owl:sameAs :d. 
:e owl:sameAs :d. 

En ese caso, un simple owl:sameAs+ no sería suficiente para encontrar :e, así que tal vez usar algo como (owl:sameAs|^owl:sameAs)+ encontrar todo el árbol de equivalencia. Tenga en cuenta que, dependiendo del punto final, esto podría causar bucles.

También puede haber extensiones específicas de implementación para manejar owl:sameAs razonamiento, como en Virtuoso:

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

regresar también ?p y ?o que se emiten para :b, :c, :d y :e.