连接到这个问题(及其以前的问题):
使用 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 的新手,但我真的在尽我所能从网上找到的所有东西中学习它们。
谢谢利维奥