2

我想用 SPARQL 查询检索空白节点。我使用 DBpedia 作为我的数据集。例如,当我使用以下查询时,我得到了大约 340 万条结果。

PREFIX prop:<http://dbpedia.org/property/>
select count(?x) where {
?x prop:name ?y
}

SPARQL 结果

当我使用DISTINCT解决方案修改器时,我得到了大约 220 万个结果。

PREFIX prop:<http://dbpedia.org/property/>
select count(DISTINCT ?x) where {
?x prop:name ?y
}

SPARQL 结果

我有两个问题:

  1. 在第二个查询中消除的 120 万条记录是重复的还是空白节点或其他?
  2. 如何从 DBpedia 检索空白节点及其值?
4

1 回答 1

5

获取空白节点

像这样的查询可用于检索(最多 10 个)空白节点:

select ?bnode where {
  ?bnode ?p ?o
  filter(isBlank(?bnode))
}
limit 10 

但是,我没有得到任何结果。DBpedia 数据中似乎没有空白节点(无论如何作为主题)。

使用 DISTINCT 和重复结果

您的查询返回不同数量的结果的原因是?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,并且我的示例数据中只有其中一个。这是一种可以得到不同数量结果的方法,并且不需要任何空白节点。

于 2013-11-20T13:05:22.523 回答