I 正在使用 DBpedia 的 Virtuoso SPARQL 端点。我在运行一些测试查询时没有问题,但我的问题是当我在基于实体foaf:name "literal"
的查询上运行时。这是我下面的代码:
prefix db: <http://dbpedia.org/resource/>
prefix dbo: <http://dbpedia.org/ontology/>
prefix foaf: <http://xlms.com/foaf/0.1/>
SELECT ?capital WHERE{
?state dbo:capital ?capital .
?state foaf:name "State of Alaska"@en .
}
我的逻辑是,?state dbo:capital ?capital
指的是DBpedia猫头鹰本体中一个州的首都。?state foaf:name "State of Alaska"@en
应将变量?state
与文本实体Alaska
匹配。当我的查询由未foaf:name
的变量控制时,我没有问题。我已经查找了示例,但看不到我的语法有什么问题。即使我将最后一行编辑为——
?state a foaf:name "State of Alaska"@en .
-- 代码继续失败。我查找了其他示例,但找不到我的具体问题。看起来好像此代码应该根据foaf:name
文字返回阿拉斯加的首都。
我找到了答案。关键是不要在顶部添加此前缀
prefix foaf: <http://xlms.com/foaf/0.1/>
这应该替换为正确的foaf:
前缀声明:
prefix foaf: <http://xmlns.com/foaf/0.1/>
甚至可能跳过,因为foaf:
前缀是预定义的。
所以下面的查询实际上有效:
SELECT ?capital WHERE {
?state dbo:capital ?capital .
?state foaf:name "State of Alabama"@en .
}