SHACL 规则中的多路径和存在量化(我应该使用 sh:oneOrMorePath 吗?)
Multiple paths and existential quantification in SHACL rules (should I use sh:oneOrMorePath perhaps?)
我想了解如何在 SHACL 规则中处理多路径和存在量化。让我用示例 ontology.
来举例说明我的问题
ontology包括类“批准”、“法律”、“结果”、“人”和“机器”,所有这些都是不相交的。它有两个属性“has-theme”和“come-from”以及以下个体:
:a rdf:type :Approve ;
:has-theme :r1,:r2 .
:r1 rdf:type :Result ;
:come-from :m1 .
:r2 rdf:type :Result ;
:come-from :m2 .
:m1 rdf:type :Man .
:m2 rdf:type :Machine .
因此:批准操作“:a”有两个主题:“:r1”和“:r2”。前者来自人":m1",后者来自机器":m2"。
我想写一个 SHACL 规则,声明“每个批准行动在其主题中至少有一个来自人的结果是合法的”。
我试过了,不将“:a”分类为合法(但它应该):
:testRule rdf:type sh:NodeShape;
sh:rule [rdf:type sh:TripleRule;
sh:condition :conditionTest;
sh:subject sh:this;
sh:predicate rdf:type;
sh:object ontology:Legal
];
sh:targetClass ontology:Approve.
:conditionTest
rdf:type sh:NodeShape;
sh:property
[
#IF the theme of the Approve action is a Result come from a Man
sh:path (ontology:has-theme ontology:come-from);
sh:class ontology:Man
].
问题是“:a”有两个 主题,一个来自人,另一个来自机器。
然后我在网上阅读了有关 sh:oneOrMorePath 的内容,并在 sh:property 中尝试了以下变体:
sh:oneOrMorePath (ontology:has-theme ontology:come-from);
sh:path ([sh:oneOrMorePath ontology:has-theme] ontology:come-from);
sh:path (ontology:has-theme [sh:oneOrMorePath ontology:come-from]);
无事可做,这些变体也不起作用。
另一方面,如果我删除三元组“:r2 :come-from :m2”或三元组“:a :has-theme :r2”
它起作用了,因为 ontology 中不再有从“:a”到非人的分支。
你们中的任何人都可以帮助我吗?
谢谢!
利维奥
你的要求是“在它的主题中至少有一个来自男人的结果”,这对我来说听起来像是一个存在主义的约束。所以你不能在这里真正使用 sh:class,但你可能更想使用限定值约束。
我没试过,但这样的方法可能有用:
:conditionTest
rdf:type sh:NodeShape ;
sh:property [
sh:path (ontology:has-theme ontology:come-from) ;
sh:qualifiedMinCount 1 ;
sh:qualifiedValueShape [
sh:class ontology:Man ;
]
] .
这应该意味着路径has-theme/come-from的至少一个值必须符合限定值形状,这意味着它必须是Man的一个实例。
有关 SHACL 中 QVC 的规范,请参见https://www.w3.org/TR/shacl/#QualifiedValueShapeConstraintComponent。
如果你可以使用 SHACL-SPARQL 并导入破折号命名空间,你也可以简单地写成 dash:hasValueWithClass ontology:Man,参见 http://datashapes.org/constraints.html#HasValueWithClassConstraintComponent
我想了解如何在 SHACL 规则中处理多路径和存在量化。让我用示例 ontology.
来举例说明我的问题ontology包括类“批准”、“法律”、“结果”、“人”和“机器”,所有这些都是不相交的。它有两个属性“has-theme”和“come-from”以及以下个体:
:a rdf:type :Approve ;
:has-theme :r1,:r2 .
:r1 rdf:type :Result ;
:come-from :m1 .
:r2 rdf:type :Result ;
:come-from :m2 .
:m1 rdf:type :Man .
:m2 rdf:type :Machine .
因此:批准操作“:a”有两个主题:“:r1”和“:r2”。前者来自人":m1",后者来自机器":m2"。
我想写一个 SHACL 规则,声明“每个批准行动在其主题中至少有一个来自人的结果是合法的”。
我试过了,不将“:a”分类为合法(但它应该):
:testRule rdf:type sh:NodeShape;
sh:rule [rdf:type sh:TripleRule;
sh:condition :conditionTest;
sh:subject sh:this;
sh:predicate rdf:type;
sh:object ontology:Legal
];
sh:targetClass ontology:Approve.
:conditionTest
rdf:type sh:NodeShape;
sh:property
[
#IF the theme of the Approve action is a Result come from a Man
sh:path (ontology:has-theme ontology:come-from);
sh:class ontology:Man
].
问题是“:a”有两个 主题,一个来自人,另一个来自机器。
然后我在网上阅读了有关 sh:oneOrMorePath 的内容,并在 sh:property 中尝试了以下变体:
sh:oneOrMorePath (ontology:has-theme ontology:come-from);
sh:path ([sh:oneOrMorePath ontology:has-theme] ontology:come-from);
sh:path (ontology:has-theme [sh:oneOrMorePath ontology:come-from]);
无事可做,这些变体也不起作用。
另一方面,如果我删除三元组“:r2 :come-from :m2”或三元组“:a :has-theme :r2” 它起作用了,因为 ontology 中不再有从“:a”到非人的分支。
你们中的任何人都可以帮助我吗?
谢谢!
利维奥
你的要求是“在它的主题中至少有一个来自男人的结果”,这对我来说听起来像是一个存在主义的约束。所以你不能在这里真正使用 sh:class,但你可能更想使用限定值约束。
我没试过,但这样的方法可能有用:
:conditionTest
rdf:type sh:NodeShape ;
sh:property [
sh:path (ontology:has-theme ontology:come-from) ;
sh:qualifiedMinCount 1 ;
sh:qualifiedValueShape [
sh:class ontology:Man ;
]
] .
这应该意味着路径has-theme/come-from的至少一个值必须符合限定值形状,这意味着它必须是Man的一个实例。
有关 SHACL 中 QVC 的规范,请参见https://www.w3.org/TR/shacl/#QualifiedValueShapeConstraintComponent。
如果你可以使用 SHACL-SPARQL 并导入破折号命名空间,你也可以简单地写成 dash:hasValueWithClass ontology:Man,参见 http://datashapes.org/constraints.html#HasValueWithClassConstraintComponent