1

连接到这个问题(及其以前的问题):

使用 sh:maxExclusive 比较两个数据类型属性(的值)

我创建了一个包含三个类的小型本体:DataSubject、MemberState 和 Minor。有两种数据类型属性:has-age 和 has-minimalage。前者是从 DataSubject(s) 到整数,后者是从 MemberState(s) 到整数。然后有一个对象属性 has-member-state 从 DataSubject(s) 到 MemberState(s)。

现在我们有以下个人:

ontology:John
  rdf:type ontology:DataSubject ;
  ontology:has-age "20"^^xsd:positiveInteger ;
  ontology:has-member-state ontology:Spain ;
.
ontology:Spain
  rdf:type ontology:MemberState ;
  ontology:has-minimalage "16"^^xsd:positiveInteger ;
.

我想写一个SHACL规则,说每个年龄小于其会员国最小年龄的DataSubject也是Minor类的个体。

根据我对其他问题的答复,我尝试了:

  sh:rule [
      rdf:type sh:TripleRule ;
      sh:condition [
        sh:property [
          sh:path ontology:has-age ;
          sh:lessThan (ontology:has-member-state ontology:has-minimalage)
        ] ;
      ] ;
      sh:subject sh:this ;
      sh:predicate rdf:type;
      sh:object ontology:Minor ;
  ] ;

哪个不起作用:它将 John 分类为 Minor,但 20小于 16。当然我尝试了许多其他变体,例如,“sh:lessThan[sh:node[sh:path (ontology:has-member-state ontology :has-minimalage)];];",其中许多可能没有任何意义,但它们都不起作用。

有人可以建议我如何在 sh:lessThan 的参数中嵌入路径吗?

如果我开始对所有这些问题感到恼火,我很抱歉 :-( 我是 SHACL 和 SPARQL 的新手,但我真的在尽我所能从网上找到的所有东西中学习它们。

谢谢利维奥

4

1 回答 1

0

官方规范(希望)非常清楚,值必须是 IRI,即只允许直接属性。但是,您可以尝试还原逻辑并使用属性形状的路径。否则,回退到 SPARQL。

于 2020-09-29T23:07:38.627 回答