节点之间的路径长度,允许多种关系类型(SPARQL)

时间:2017-08-15 14:09:31

标签: sparql

我必须编写一个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 .
}

结果似乎是一个无限循环。

有关如何做到的任何建议/示例?

1 个答案:

答案 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

enter image description here