我有这个查询。它匹配名称中包含“South”的任何内容。但我只想要那个foaf:name
正是“南方”的人。
SELECT Distinct ?TypeLabel
WHERE
{
?a foaf:name "South" .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
}
答案 0 :(得分:5)
有点迟了但无论如何......我认为这就是你要找的东西:
SELECT Distinct ?TypeLabel Where {
?a foaf:name ?name .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
FILTER (?name="South"^^xsd:string)
}
您可以将FILTER与xsd类型一起使用以限制结果。 希望这可以帮助... 干杯!
答案 1 :(得分:4)
(打破对此的评论)
问题是数据,而不是您的查询。如果使用以下查询:
SELECT DISTINCT ?a
WHERE {
?a foaf:name "Imran Khan" .
}
你发现(正如你所说)“Imran Khan Niazy”。 但是查看Imran Khan的dbpedia条目,您会看到两者:
foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"
这是因为RDF允许重复使用属性。
如果您想要更精确的匹配,请尝试为相册添加类型(例如http://dbpedia.org/ontology/MusicalWork)。
请注意,DBpedia来自维基百科,并且提取过程并不完美。这是一个存在数据不稳定的区域,因此不要认为您的查询出错了。
答案 2 :(得分:3)
该查询应该与文字South
完全匹配,而不是仅包含South
作为子字符串的文字。对于部分匹配,您可以转到FILTER
,例如REGEX()
。从这个意义上说,您的查询引擎已被破坏 - 您正在使用哪个查询引擎?