我正在尝试通过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似乎提出了一种类似的技术,将这两者(理论上多余的,非常整齐的本体论)限制结合起来的方式去吧。
测试用例:
!bgcolor
,{{3} }或!logo
。但是,查询 C 的结果集为空。#FuelElements
:查询 A 和 B 各返回9个结果,其中5个包含在两个结果集中({ {3}},A Short Biographical Dictionary of English Literature (RKBExplorer),rdfs:comment
,rdfs:subClassOf
,rdfs:subPropertyOf
)。查询 C 仅产生 <{em> rdfs:label
。有趣的是,rdfs:isDefinedBy
和rdfs:comment
的SPARQL端点的行为与我预期的一样,查询 C 的结果集非空并填充(对于LIMIT
我强加了)查询 A 和 B 返回的属性。
所以:为什么两个结果集实际上不应该是交集?描述的端点是否有错误(不太可能......),或者我对SPARQL的理解是否存在缺陷(可能)?
答案 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