6

我有这个查询。它匹配任何名称中带有“South”的东西。但我只想要一个foaf:name完全是“南”的人。

SELECT Distinct ?TypeLabel 
WHERE
{
    ?a     foaf:name   "South" .
    ?a     rdf:type    ?Type .
    ?Type  rdfs:label  ?TypeLabel .
}
4

3 回答 3

5

有点晚了,但无论如何......我认为这就是你要找的:

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

您可以将 FILTER 与 xsd 类型一起使用以限制结果。希望这会有所帮助......干杯!

于 2010-07-21T16:50:13.250 回答
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 允许重复使用属性。

原因

“南方”也有同样的问题(专辑、艺术家和奇怪的“南卢顿”)。在这些情况下,出于正确或消除歧义的目的,既有熟悉的名称(“Imran Khan”、“South”),也有更精确的名称(“Imran Khan Niazy”、“South (album)”)。

解析度

如果您想要更精确的匹配,请尝试添加类型(例如专辑的http://dbpedia.org/ontology/MusicalWork)。

谨防

请注意,DBpedia 源自 Wikipedia,提取过程并不完美。这是一个充满不稳定数据的区域,所以不要假设您的查询出错了。

于 2010-04-07T13:37:16.843 回答
3

该查询应与文字完全匹配,South而不是仅包含South作为子字符串的文字。对于部分匹配,您可以FILTER使用 eg REGEX()。从这个意义上说,您的查询引擎已损坏-您正在使用哪个查询引擎?

于 2010-04-07T11:14:56.060 回答