我想使用SPARQL查询检索空白节点。我使用DBpedia作为我的数据集。例如,当我使用以下查询时,我得到了大约340万个结果。
PREFIX prop:<http://dbpedia.org/property/>
select count(?x) where {
?x prop:name ?y
}
当我使用DISTINCT
解决方案修饰符时,我得到大约220万个结果。
PREFIX prop:<http://dbpedia.org/property/>
select count(DISTINCT ?x) where {
?x prop:name ?y
}
我有两个问题:
答案 0 :(得分:5)
这样的查询可用于检索(最多10个)空白节点:
select ?bnode where {
?bnode ?p ?o
filter(isBlank(?bnode))
}
limit 10
然而,我没有结果。它看起来不像DBpedia数据中有空白节点(无论如何)。
您的查询返回不同数量的结果的原因是?x
有多个名称。像你的第一个查询:
select count(?x) where { ?x prop:name ?y }
对数据如:
<somePerson> prop:name "Jim" .
<somePerson> prop:name "James" .
会生成2
,因为有两种方法可以匹配?x prop:name ?y
。 ?x
在<somePerson>
中都绑定?y
,但select count(DISTINCT ?x) where { ?x prop:name ?y }
绑定了不同的名称。在像你的第二个查询:
?x
您明确只计算{{1}}的不同值,并且我的示例数据中只有其中一个。这是一种最终可以得到不同数量结果的方法,它不需要任何空白节点。