J'essaie d'écrire une requête Sparql qui devrait me donner tous Je ne peux pas voir un façon d'appliquer Cette construction en option / lié à ce problème, Parce que toutes les propriétés telles que J'ai essayé ceci: P> FOAF: agents code> qui ne sont pas
foaf: personnes code>.
rdfs: sous-classes code> et
rdf: type code> sont transitifs et réflexifs. P>
SELECT * WHERE {
?x rdf:type foaf:Agent
OPTIONAL { ?y rdf:type foaf:Person }
FILTER ( !BOUND(?y) ) }
5 Réponses :
La raison pour laquelle cela ne fonctionne pas est que vous avez deux liaisons variables distinctes ( mise à jour: dans une requête idéale, il n'y aurait pas besoin de L'approche de @kingsley Idehen (à l'aide d'extensions SPARQL tiers) devrait vous aider à résoudre le problème à court terme. p> p> ? x code> et
? y code>) qui ne sont pas liés dans votre requête. Donc
? X code> doit être lié à apparaître dans le jeu de résultats (ce que vous voulez), mais si
? Y code> est non lié, vous n'avez rien appris de nouveau sur
? x code>.
? y code> du tout; Vous pouvez tester les Edeg entrants / sortants de
? x code> directement. Ceci est difficile (impossible?) À faire dans SPARQL 1.0 lorsque vous souhaitez vérifier si un bord n'existe pas sur une liaison variable donnée. Cependant, SPARQL 1.1 fournira un support à la négation: P> < Pré> xxx pré>
Mais comment puis-je configurer une relation entre? X et? Y?
SPARQL 1.1 va certainement avoir une négation, le groupe de travail du groupe de travail à Iswc 2009 était clair sur ce
Notez que SPARQL 1.1 Syntaxe (comme spécifié dans le lien) est en réalité filtre n'existe pas code> (nécessite le filtre
code> mot-clé à l'avance)
VIA VIRTUOSO SPARQL Extensions Point de terminaison de vérification http://lod.openlinksw.com/sparql (instance de cache de nuage LOD) p>
xxx pré> xxx pré> blockQuote>
Pour ce faire dans SPARQL 1.0, vous devez écrire:
SELECT * WHERE { ?x rdf:type foaf:Agent OPTIONAL { ?y rdf:type foaf:Person . FILTER (?x = ?y) . } FILTER ( !BOUND(?y) ) }
Voici le (projet) SPARQL 1.1 SPECT pour la négation: http: // www. w3.org/tr/sparql11-query/#negation p>
Ce qui suit fonctionne maintenant, avec la courtoisie de SPARQL 1.1:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT DISTINCT COUNT(?agent) WHERE { ?agent rdf:type foaf:Agent . FILTER (NOT EXISTS { ?agent rdf:type foaf:Person . }) }