【发布时间】:2014-08-19 13:48:21
【问题描述】:
假设我像this一样查询DBPedia:
select * where
{
?x ?y ?z .
filter (?x = <http://dbpedia.org/resource/Abracadabra>)
}
结果得到了很多三元组:
x y z
http://dbpedia.org/resource/Abracadabra http://www.w3.org/2002/07/owl#sameAs http://de.dbpedia.org/resource/Abrakadabra
http://dbpedia.org/resource/Abracadabra http://www.w3.org/2002/07/owl#sameAs http://fr.dbpedia.org/resource/Abracadabra
http://dbpedia.org/resource/Abracadabra http://www.w3.org/2002/07/owl#sameAs http://ko.dbpedia.org/resource/아브라카다브라
...
是否可以检测出每个三元组来自these datasets 中的哪一个?
我想下载并在本地使用其中一些数据集,但首先我必须根据它们包含的三元组找出其中哪些对我有用。
在最坏的情况下,我想知道哪些数据集包含 rdfs:labels。
附: This 方法不起作用,?g 始终为 http://dbpedia.org
【问题讨论】:
-
附带说明,
{ ?x ?y ?z filter( ?x = <...> ) }有点代码味道。执行{ <...> ?y ?z }或{ values ?x { <...> } ?x ?y ?z }。 -
我知道这很糟糕,但我无法快速弄清楚如何同时约束和打印 ?x。稍后会阅读一些 SPARQL 标准 -_-
-
我提到的第二个选项,
values ?x { <...> } ?x ?y ?z将?x绑定到指定的值。一个好的优化器应该认识到像这样的过滤器具有相同的效果,但在我看来,values使意图更加清晰。