我必须编写一个SPARQL查询,该查询返回由这些关系连接的两个节点(:persA和:persD)之间路径的长度:
@prefix : <http://www.example.org/> .
:persA :knows :knowRelation1 .
:knowRelation1 :hasPerson :persB .
:persB :knows :knowRelation2 .
:knowRelation2 :hasPerson :persC .
:persC :knows :knowRelation3 .
:knowRelation3 :hasPerson :persD .
我尝试了这个查询:
PREFIX : <http://www.example.org/>
SELECT (COUNT(?mid) AS ?length)
WHERE
{
:persA (:knows | :hasPerson)* ?mid .
?mid (:knows | :hasPerson)+ :persD .
}
结果似乎是一个无限循环。
有关如何做到的任何建议/示例?
答案 0 :(得分:1)
在您的初始帖子中修复了一些语法错误后,我在GraphDB Free 8.2和BlazeGraph 2.1.1中为我提供了三元组和查询。我已经将这些编辑应用到你的帖子本身。
/
.
(如果您想以@
开头,则需要)
@prefix : <http://www.example.org/> .
:persA :knows :knowRelation1 .
:knowRelation1 :hasPerson :persB .
:persB :knows :knowRelation2 .
:knowRelation2 :hasPerson :persC .
:persC :knows :knowRelation3 .
:knowRelation3 :hasPerson :persD .
PREFIX : <http://www.example.org/>
SELECT (COUNT(?mid) AS ?length)
WHERE
{ :persA (:knows|:hasPerson)* ?mid .
?mid (:knows|:hasPerson)+ :persD
}
结果:
length
"6"^^xsd:integer