Comment faire correspondre les chaînes littérales exactes dans SPARQL?

StackOverflow https://stackoverflow.com/questions/2591719

  •  25-09-2019
  •  | 
  •  

Question

J'ai cette requête. Elle correspond à tout ce qui a « Sud » dans son nom. Mais je ne veux que celui dont foaf:name est exactement « Sud ».

SELECT Distinct ?TypeLabel 
WHERE
{
    ?a     foaf:name   "South" .
    ?a     rdf:type    ?Type .
    ?Type  rdfs:label  ?TypeLabel .
}
Était-ce utile?

La solution

(Briser des commentaires pour cela)

Les problèmes de données

La question est les données, pas votre requête. Si utilisez la requête suivante:

SELECT DISTINCT ?a 
WHERE { 
    ?a foaf:name "Imran Khan" . 
}

Vous trouvez (comme vous dites) "Imran Khan Niazy". Mais en regardant l'entrée de dbpedia Imran Khan , vous verrez à la fois:

foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"

Ceci est parce que RDF permet l'utilisation répétée des propriétés.

Cause

"Sud" a le même numéro (album, artiste, et curieusement 'Luton South'). Ce sont des cas où il y a deux noms familiers ( "Imran Khan", "Sud"), et les plus précis ( "Imran Khan Niazy", "South (album)") aux fins de correction ou homonymie.

Résolution

Si vous voulez essayer de correspondance plus précis en ajoutant un type (par exemple http://dbpedia.org/ontology/ MusicalWork pour l'album).

Beware

Sachez que DBpedia dérive de Wikipédia, et le processus d'extraction est pas parfait. Ceci est une zone vivant avec des données bancal, donc ne présumez pas votre requête ne va pas.

Autres conseils

un peu en retard, mais quand même ... Je pense que c'est ce que vous cherchez:

SELECT Distinct ?TypeLabel Where { 
?a foaf:name ?name . 
?a rdf:type ?Type . 
?Type rdfs:label ?TypeLabel . 
FILTER (?name="South"^^xsd:string)
}

vous pouvez utiliser le filtre avec les types xsd afin de limiter le résultat. J'espère que cela t'aides... cheers!

Cette requête doit correspondre exactement au South littéral et non littéraux simplement contenant South comme une sous-chaîne. Pour les matches partiels que vous iriez à FILTER par exemple REGEX(). Votre moteur de recherche est cassé dans ce sens - quel moteur requête que vous travaillez avec

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