我正在尝试通过 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
但实际上,这个查询几乎不会产生任何结果。这是为什么?
我不知道我做错了什么,并且对这个问题以及对那个问题的回答似乎暗示了一种类似的技术,可以将这两个(理论上是多余的,在非常整洁的本体中)限制结合起来作为要走的路。
测试用例:
- DBpedia:查询A和B 都返回 24 个属性,例如
!bgcolor
、!logo
或#FuelElements
。然而,查询C的结果集是空的。 - 英语文学简短传记词典 (RKBExplorer):查询A和B各返回 9 个结果,其中 5 个包含在两个结果集中 (
rdfs:comment
,rdfs:subClassOf
,rdfs:subPropertyOf
,rdfs:label
,rdfs:isDefinedBy
)。查询C只 产生rdfs:comment
.
有趣的是, JES & Co.和奥地利 Alpine Ski Racers的 SPARQL 端点的行为与我预期的一样,查询C的结果集是非空的,并且填充了(对我强加的)查询ALIMIT
返回的属性和B。 _
那么:为什么两个结果集的交集实际上不是交集?所描述的端点是否存在问题(不太可能......),或者我对 SPARQL 的理解是否存在缺陷(可能)?