2011-02-11 10 views
7

Estoy buscando utilizar SPARQL para una tarea relativamente básica: dado un gráfico FOAF, me gustaría analizar los elementos que encuentro ahí, obtener sus etiquetas (si existen) y luego, utilícelos como nuevos gráficos para encontrar información sobre esas personas.Usando la palabra clave 'GRAPH' en SPARQL para buscar gráficos remotos

Así, por ejemplo, podría imaginarse un caso de uso simple donde quiero ejecutar una consulta SPARQL para enumerar todos mis alimentos favoritos (según mi archivo FOAF), y también los alimentos favoritos de todos mis amigos.

Esto es lo que parece en este momento. Tenga en cuenta que para fines de prueba, por el momento, todo lo que trato de hacer con la siguiente consulta es buscar el nombre del amigo, a través de la variable? Name3. La ejecución de esta consulta no arroja ningún resultado para? Graph y? Name3, aunque sé que rdfs: seeAlso también enlaza con algunos archivos RDF válidos, de los cuales al menos dos deberían tener un atributo de nombre. Gracias por cualquier aporte que pueda tener!

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?name1 ?name2 ?graph ?name3 
FROM <my-rdf-file> 
WHERE { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
    OPTIONAL { 
     ?person2 rdfs:seeAlso ?graph . 
     GRAPH ?graph { 
      ?person3 foaf:name ?name3 .   
     } 
    }  
} 

Respuesta

4

GRÁFICO no implícitamente obtener los datos remotos en la tienda, que serían demasiado de un riesgo para la seguridad. Puede haber algunos sistemas donde puede habilitar esto, pero no es estándar.

Sin embargo, en SPARQL 1.1 Update, hay un CARGA palabra clave, que hace esto, sin embargo, se puede escribir:

LOAD <uri> 

para que se capturen la gráfica en la tienda, por lo que se podría escribir:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?graph 
FROM <my-rdf-file> 
WHERE { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
    OPTIONAL { 
     ?person2 rdfs:seeAlso ?graph . 
    }  
} 

Alimente los enlaces para? Gráfico en un conjunto de instrucciones LOAD, y luego ejecute su consulta original.

N.B. en algunos sistemas, p. 4store necesita habilitar LOAD, no está permitido por defecto, por lo tanto, consulte la documentación de la tienda que está utilizando.

+0

Gracias Steve! Supongo que tiene sentido que este "autodescubrimiento" de los gráficos RDF podría ser un problema, especialmente si conduce a un crecimiento explosivo en el tamaño del gráfico en cuestión. Aún así, parece que sería una técnica muy poderosa en consultas SPARQL. De todos modos, encontré una alternativa que hace el truco para mi problema relativamente simple. – Geoffroy

5

En lugar de usar LOAD, una vez que haya descubierto los gráficos que necesita incluir, como el ejemplo de Steve anterior, ¿no sería razonable utilizar FROM NAMED, indicando todos los gráficos relevantes en la consulta resultante, es decir,

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?name1 ?name2 ?name3 
FROM <my-rdf-file> 
FROM NAMED <discovered-graph-URI-1> 
FROM NAMED <discovered-graph-URI-n> 
WHERE { 
GRAPH <my-rdf-file> { 
    ?person1 foaf:knows ?person2 . 
    ?person1 foaf:name ?name1 . 
    ?person2 foaf:name ?name2 . 
} 
    OPTIONAL { 
     ?person2 rdfs:seeAlso <discovered-graph-URI-1> . 
     GRAPH <discovered-graph-URI-1> { 
      ?person3 foaf:name ?name3 .   
     } 
     ?person2 rdfs:seeAlso <discovered-graph-URI-n> . 
     GRAPH <discovered-graph-URI-n> { 
      ?person3 foaf:name ?name3 .   
     } 
    }  
} 

De esta forma se soluciona los problemas de seguridad y no tiene que mantener los datos en su propio almacén múltiple.

+0

Eso suena como una sabia solución. ¿Lo has probado? Lo intentaré la próxima vez que abra JENA. Gracias William. – Geoffroy

+0

Geoffroy - analiza bien, pero no lo ha intentado con gráficos reales –

Cuestiones relacionadas