Wie passt ich genaue Zeichenfolgenliterale in Sparql?
-
25-09-2019 - |
Frage
Ich habe diese Frage. Es passt zu allem, was in seinem Namen "Süden" hat. Aber ich will nur den, dessen foaf:name
ist genau "südlich".
SELECT Distinct ?TypeLabel
WHERE
{
?a foaf:name "South" .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
}
Lösung
(Ausbrechen aus Kommentaren dafür)
Datenprobleme
Das Problem sind die Daten, nicht Ihre Abfrage. Wenn Sie die folgende Abfrage verwenden:
SELECT DISTINCT ?a
WHERE {
?a foaf:name "Imran Khan" .
}
Sie finden (wie Sie sagen) "Imran Khan Niazy". Aber betrachten Sie den dbpedia -Eintrag für Imran Khan, Sie werden beides sehen:
foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"
Dies liegt daran, dass RDF die wiederholte Verwendung von Eigenschaften ermöglicht.
Weil
"South" hatte die gleiche Ausgabe (Album, Künstler und seltsamerweise 'South Luton'). Dies sind Fälle, in denen es beide bekannte Namen ("Imran Khan", "South") und genauere Namen ("Imran Khan Niazy", "South (Album)") zum Zwecke der Korrektheit oder Disambusion gibt.
Auflösung
Wenn Sie eine genauere Übereinstimmung wünschen, versuchen Sie einen Typ hinzuzufügen (z. http://dbpedia.org/ontology/musicalwork für das Album).
In acht nehmen
Seien Sie sich bewusst, dass dbpedia aus Wikipedia stammt und der Extraktionsprozess nicht perfekt ist. Dies ist ein Bereich, der lebendig mit wackeligen Daten lebt. Gehen Sie also nicht davon aus, dass Ihre Abfrage schief gelaufen ist.
Andere Tipps
Ein bisschen spät aber trotzdem ... ich denke, das ist es, wonach du suchst:
SELECT Distinct ?TypeLabel Where {
?a foaf:name ?name .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
FILTER (?name="South"^^xsd:string)
}
Sie können den Filter mit den XSD -Typen verwenden, um das Ergebnis einzuschränken. Hoffe das hilft ... Prost!
Diese Abfrage sollte genau dem wörtlichen übereinstimmen South
und nicht Literale, die nur enthalten South
als Substring. Für teilweise Übereinstimmungen würden Sie gehen FILTER
mit zB REGEX()
. Ihr Abfragemotor ist in diesem Sinne gebrochen - mit welcher Abfrage -Engine arbeiten Sie?