我有这个查询。它与任何具有“南方”的东西匹配。但是我只想要一个 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(). 。从这个意义上讲,您的查询引擎被打破了 - 您正在使用哪种查询引擎?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top