题
我有这个查询。它与任何具有“南方”的东西匹配。但是我只想要一个 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" .
}
您发现(如您所说)“ Imran Khan Niazy”。但是看DBPEDIA条目 伊姆兰·汗(Imran Khan), ,您会看到两者:
foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"
这是因为RDF允许重复使用属性。
原因
“南方”也有相同的问题(专辑,艺术家和奇怪的是'South Luton')。在这些情况下,出于正确性或歧义的目的,都有两个熟悉的名称(“ Imran Khan”,“ South”)和更精确的名称(“ Imran Khan Niazy”,“ South(Permable)”)。
解析度
如果您想要更精确的匹配,请尝试添加类型(例如 http://dbpedia.org/ontology/musicalwork 专辑)。
谨防
请注意,DBPEDIA源自Wikipedia,而提取过程并不完美。这是一个活着的带有怪异数据的区域,因此不要以为您的查询已经出错。
其他提示
有点迟了,但无论如何...我认为这是您想要的:
SELECT Distinct ?TypeLabel Where {
?a foaf:name ?name .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
FILTER (?name="South"^^xsd:string)
}
您可以将过滤器与XSD类型一起使用,以限制结果。希望这会有所帮助...欢呼!
该查询应该完全匹配字面 South
而不是仅仅包含 South
作为子字符串。对于部分比赛,您要去 FILTER
与例如 REGEX()
. 。从这个意义上讲,您的查询引擎被打破了 - 您正在使用哪种查询引擎?
不隶属于 StackOverflow