问题描述
已连接到该问题(及其先前的问题):
Using sh:maxExclusive to compare (the values of) two datatype properties
我创建了一个具有三个类的小型本体:DataSubject,MemberState和Minor。有两个数据类型属性:has-age和has-minimalage。前者是从DataSubject到整数,后者是从MemberState到整数。然后有一个对象属性具有从DataSubject到MemberState的成员状态。
现在我们有以下个人:
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分类为次要,但20不小于16。当然,我尝试了许多其他变体,例如“ sh:lessthan [sh:node [sh:路径(本体论:具有成员状态本体论:具有最小限度)];];”,其中许多可能没有任何意义,但是它们都不起作用。
有人可以建议我如何在sh:lessthan参数中嵌入路径吗?
很抱歉,如果我开始烦恼所有这些问题:-(我是SHACL和SPARQL的新手,但是我真的想尽我最大的努力从网络上找到的东西中学习它们。
谢谢 Livio
解决方法
(希望)官方规范非常清楚,值必须为IRI,即仅允许直接属性。但是,您可以尝试还原逻辑并在属性形状处使用路径。否则,请退回到SPARQL。