试图找到基于两个限制的所有属性

时间:2013-10-22 08:01:33

标签: rdf sparql

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

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

B:

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

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

C:

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

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

我不认识我做错了什么,answers to this question以及to that question似乎提出了一种类似的技术,将这两者(理论上多余的,非常整齐的本体论)限制结合起来的方式去吧。


测试用例:

有趣的是,rdfs:isDefinedByrdfs:comment的SPARQL端点的行为与我预期的一样,查询 C 的结果集非空并填充(对于LIMIT我强加了)查询 A B 返回的属性。

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

1 个答案:

答案 0 :(得分:2)

  

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

这可能是因为DBpedia有超时。

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

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

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

结果是受限制的流。当你添加?prop a rdf:Property时,需要一个DB连接来共同找到?prop。由于它是一种相当不寻常的模式,优化器的支持可能会减少。

此刻,我得到超时

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