1

我想使用 SHACL 验证子图中谓词的顺序。从理论上讲,我认为我必须对每个链接在一起的谓词使用 SHACL 形状,然后定义一个条件语句来检查第一个谓词是否存在,然后继续遍历图形以获取下一个谓词。

例如:

<bob> foaf:knows <emma>.
<emma> ontology1:gender <woman>.
<woman> ontology1:species <human>.
<human> ontology2:category <earth>.

在此,我想检查谓词的顺序:-

foaf:知道->本体1:性别->本体1:物种->本体2:类别

我已经翻阅了大量的文档,但还没有找到一个例子。知道如何使用 SHACL 核心功能来做到这一点吗?甚至使用 SHACL-SPARQL?

4

2 回答 2

2

如果ontology1:gender并且ontology1:species不能有多个值,则使用objects-of targetssequence paths。像这样:

:FellowShape
   sh:targetObjectsOf foaf:knows ;
   sh:property [
      sh:path (ontology1:gender ontology1:species ontology2:category) ;
      sh:message "Property chain is broken" ;
      sh:minCount 1
   ] .

游乐场

于 2020-11-03T06:49:39.383 回答
0

作为替代方案,重要的一点是目标必须是启动属性链的三元组的一部分。在这种情况下,这是 foaf:knows 的对象。有几种方法可以做到这一点,包括:

:FellowShape
   sh:targetNode :emma ;
   sh:property [
      sh:path (ontology1:gender ontology1:species ontology2:category) ;
      sh:message "Property chain is broken" ;
      sh:minCount 1
   ] .

请注意,sh:targetNode :emma使用 代替sh:targetObjectsOf foaf:knows,两者都告诉 Shape 规范以 开头foaf:knows :emma

于 2021-09-14T16:58:27.673 回答