Rdf 尝试基于两个限制查找所有属性

Rdf 尝试基于两个限制查找所有属性,rdf,sparql,Rdf,Sparql,我试图通过SPARQL端点编译三重存储中所有属性的列表(摘录)。以下两个查询中的每一个都会产生有希望的结果: A: SELECT DISTINCT ?prop WHERE { [] ?prop []. } LIMIT 25 SELECT DISTINCT ?prop WHERE { ?prop a rdf:Property. } LIMIT 25 SELECT DISTINCT ?prop WHERE { [] ?prop []. ?prop a rdf:Property.

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

A:

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

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  ?prop a rdf:Property.
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
  ?prop a rdf:Property.
}
LIMIT 25
正如预期/希望的那样,两个查询的结果集中都出现了一些项。因此,根据我目前对SPARQL的理解,结合这些限制应该会再次产生这些项目:

C:

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  ?prop a rdf:Property.
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
  ?prop a rdf:Property.
}
LIMIT 25
但实际上,这个查询几乎不会产生任何结果这是为什么?

我不知道我做错了什么,并且似乎提出了一种类似的技术,将这两种限制结合起来(理论上是多余的,在非常整洁的本体论中)作为前进的方向


测试用例:

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  ?prop a rdf:Property.
}
LIMIT 25
SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
  ?prop a rdf:Property.
}
LIMIT 25
  • :查询AB都返回24个属性,例如,或。然而,queryC的结果集是空的
  • :查询AB各返回9个结果,其中5个结果包含在两个结果集中(,)。查询C仅产生收益
有趣的是,由和由的SPARQL端点的行为与我预期的一样,查询C的结果集是非空的,并且使用查询AB返回的属性填充(达到我施加的
限制)

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

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

这可能是因为DBpedia超时了

WHERE {
   [] ?prop [].
   ?prop a rdf:Property .
}
这可能是一个非常昂贵的查询,具体取决于执行策略。第一部分说“得到所有的三倍”。什么时候

SELECT DISTINCT ?prop
WHERE {
  [] ?prop [].
}
LIMIT 25
结果是受限流。添加
?prop a rdf:Property
时,需要一个DB join来查找公共的?prop。由于这是一种非常不寻常的模式,优化器的支持可能会减少

目前,我的手机有超时

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

这对DBpedia来说是有意义的,但不能解释文献端点上的结果,因为结果似乎很快就会回来。我不确定它是否解释了这些结果,但有一些原因表明,
[]?prop[]的交叉点
?prop a rdf:Property
与它们的并集不同:声明一个属性(与
a rdf:Property
)并不意味着该属性在数据集中用作属性,并且在数据集中用作属性并不意味着该属性被声明为属性。通常,它们的交点可以小于它们的并集。这在DBpedia上确实起到了作用,其中有些属性没有声明为
rdf:Property
s。@JoshuaTaylor:谢谢您的解释。然而,我知道A和B的结合与A或B都不一样;我想知道为什么A和B的交集不包含A和B中的所有元素。是的,我确实理解这一点(并看到了先前的注释,现在已删除,答案),但重点是问题的开头“我正在尝试编译(摘录)“通过SPARQL端点(带有两个有希望的查询)在三重存储中列出所有属性的列表”,因为我希望一些发现问题的人会寻找结果的联合。为什么十字路口没有被退回来更令人费解。@JoshuaTaylor:啊,对了。我不相信我的问题在这方面措辞得体。那么澄清这一点是个好主意。(我的实际用例有些不同;我开始尝试获取所有谓词和某些标签,当结果集为空时,即使我可以看到满足这两个要求的实体,我也会通过在问题中提供一个不太复杂的查询来消除一些混乱,该查询将重现相同的问题。)