У меня есть этот запрос. Это соответствует чему-либо, что имеет "Юг" на его имя. Но я только хочу тот чей foaf:name
является точно "Южным".
SELECT Distinct ?TypeLabel
WHERE
{
?a foaf:name "South" .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
}
(Прекращение комментариев по этому поводу)
Проблема в данных, а не в вашем запросе. Если использовать следующий запрос:
SELECT DISTINCT ?a
WHERE {
?a foaf:name "Imran Khan" .
}
Вы найдете (как вы говорите) «Имран Хан Ниази». Но посмотрев запись в dbpedia для Имрана Хана , вы увидите оба:
foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"
Это потому, что RDF допускает многократное использование свойств.
«Юг» имел ту же проблему (альбом, исполнитель и, как ни странно, «Южный Лутон»). Это случаи, когда есть как знакомые имена («Имран Хан», «Юг»), так и более точные имена («Имран Хан Ниази», «Юг (альбом)») в целях правильности или устранения неоднозначности.
Если вы хотите более точное совпадение, попробуйте добавить тип (например, http://dbpedia.org/ontology/MusicalWork для альбома).
Имейте в виду, что DBpedia является производным от Википедии, и процесс извлечения не идеален. Это область с нестабильными данными, поэтому не думайте, что ваш запрос пошел не так.
Этот запрос должен точно соответствовать литералу South
, а не литералам, просто содержащим South
в качестве подстроки. Для частичных совпадений перейдите к ФИЛЬТР
, например, REGEX ()
. В этом смысле ваша система запросов не работает - с какой системой запросов вы работаете?