Question

Je cherche à utiliser SparqL pour une tâche relativement élémentaire: étant donné un graphique FOAF, j'aimerais analyser les éléments que je trouve là-bas, obtenir leurs étiquettes (s'ils existent), puis les utiliser comme nouveaux graphiquesd'où trouver des informations sur ces personnes.

Donc, par exemple, vous pouvez imaginer un cas d'utilisation simple où je souhaite exécuter une requête SPARQL pour répertorier tous mes aliments préférés (conformément à mon fichier FOAF), ainsi que les aliments préférés de tous mes amis.

Voici ce que cela ressemble au moment.Notez que, à des fins de test, à l'heure actuelle, tout ce que j'essaie de faire avec la requête ci-dessous est d'extraire le nom de l'ami, via la variable? Nom3.Exécution de cette requête ne renvoie aucun résultat pour? Graphique et? Nom3, même si je sais que les RDFS: SeealSo Lien vers certains fichiers RDF valides, dont au moins deux devraient avoir un attribut de nom.Merci pour toute entrée que vous pourriez avoir!

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

Était-ce utile?

La solution

graphique ne récupère pas implicitement des données distantes dans le magasin, ce serait une trop grande quantité de risque de sécurité.Il peut y avoir des systèmes où vous pouvez l'activer, mais il n'est pas standard.

Toutefois, dans la mise à jour de SPARQL 1.1, il y a une charge de mots clés, ce qui le fait cependant, vous pouvez écrire:

LOAD <uri>

qui va chercher le graphique dans le magasin afin que vous puissiez écrire:

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

Alimez les fixations pour? Graphique dans un ensemble d'instructions de charge, puis exécutez votre requête d'origine.

n.b.Dans certains systèmes, par exemple4store Vous devez activer la charge, ce n'est pas autorisé par défaut, alors vérifiez la documentation du magasin que vous utilisez.

Autres conseils

Au lieu d'utiliser la charge, une fois que vous avez découvert les graphiques que vous devez inclure, selon l'exemple de Steve ci-dessus, ne seriez-vous pas raisonnable de l'utiliser à partir de nommé, indiquant tous les graphiques pertinents de la requête résultante, c'est-à-dire

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 cette façon, vous obtenez les problèmes de sécurité et vous n'avez pas à entretenir les données de votre propre triplestore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top