2

我正在尝试通过 SPARQL 端点编译(摘录)三重存储中所有属性的列表。以下两个查询中的每一个都会产生有希望的结果:

A:

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25

乙:

SELECT DISTINCT ?prop
WHERE {
  ?prop a rdf:Property.
}
LIMIT 25

正如预期/希望的那样,两个查询的结果集中都出现了一些项目。因此,结合限制应该,根据我目前对 SPARQL 的理解,再次产生这些项目:

C:

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
  ?prop a rdf:Property.
}
LIMIT 25

但实际上,这个查询几乎不会产生任何结果。这是为什么?

我不知道我做错了什么,并且对这个问题以及对那个问题的回答似乎暗示了一种类似的技术,可以将这两个(理论上是多余的,在非常整洁的本体中)限制结合起来作为要走的路。


测试用例:

有趣的是, JES & Co.奥地利 Alpine Ski Racers的 SPARQL 端点的行为与我预期的一样,查询C的结果集是非空的,并且填充了(对我强加的)查询ALIMIT返回的属性和B。 _

那么:为什么两个结果集的交集实际上不是交集?所描述的端点是否存在问题(不太可能......),或者我对 SPARQL 的理解是否存在缺陷(可能)?

4

1 回答 1

2

DBpedia:查询 A 和 B 都返回 24 个属性,例如 !bgcolor、!logo 或 #FuelElements。然而,查询 C 的结果集是空的。

这可能是由于 DBpedia 有超时。

WHERE {
   [] ?prop [].
   ?prop a rdf:Property .
}

可能是一个非常昂贵的查询,具体取决于执行策略。第一部分说“获得所有三元组”。当刚

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25

结果是受限制的流。当您添加时,?prop a rdf:Property需要一个数据库连接才能找到共同的 ?prop。由于这是一种非常不寻常的模式,优化器的支持可能较少。

目前,我得到了超时

SELECT  ?prop
WHERE {
   ?prop a rdf:Property .
   [] ?prop [].
}
LIMIT 1
于 2013-10-22T12:26:12.683 回答