Utilizzo della parola chiave "grafico" in sparql per recuperare i grafici remoti
-
12-11-2019 - |
Domanda
Sto cercando di usare Sparql per un compito relativamente semplice: dato un grafico FOAF, vorrei analizzare gli elementi che trovo lì dentro, ottenere i loro tag (se esistono) e poi usali come nuovi grafici da cui a Trova informazioni su quelle persone.
Quindi, ad esempio, potresti immaginare un semplice caso d'uso in cui voglio eseguire una query Sparql per elencare tutti i miei cibi preferiti (secondo il mio file foaf) e anche i cibi preferiti di tutti i miei amici.
Ecco come appare in questo momento. Si noti che ai fini del test, al momento tutto quello che sto cercando di fare con la query di seguito è prendere il nome dell'amico, attraverso la variabile? Name3. L'esecuzione di questa query non restituisce alcun risultato per? Grafico e? Nome3, anche se so che il collegamento RDFS: Seealso ad alcuni file RDF validi, di cui almeno due dovrebbero avere un attributo Nome. Grazie per qualsiasi input che potresti avere!
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 .
}
}
}
Soluzione
Il grafico non prendono implicitamente dati remoti nel negozio, sarebbe troppo un rischio per la sicurezza. Potrebbero esserci alcuni sistemi in cui è possibile abilitarlo, ma non è standard.
Tuttavia, nell'aggiornamento di Sparql 1.1, c'è un caricamento delle parole chiave, che lo fa, puoi scrivere:
LOAD <uri>
Che prenderà il grafico nel negozio, in modo da poter scrivere:
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 .
}
}
Nutri i legami per? Grafico in un set di istruzioni di carico, quindi eseguire la query originale.
NB In alcuni sistemi, ad esempio 4store devi abilitare il caricamento, non è consentito per impostazione predefinita, quindi controlla la documentazione del negozio che stai utilizzando.
Altri suggerimenti
Invece di usare il carico, una volta scoperti i grafici che devi includere, secondo l'esempio di Steve sopra, non sarebbe ragionevole usare in alternativa da denominato, indicando tutti i grafici pertinenti nella query risultante IE
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 .
}
}
}
In questo modo ti aggiri i problemi di sicurezza e non devi mantenere i dati nel tuo triplestore.