SHACL/ShEX 约束以创建 属性 以构建层次结构(即树)
SHACL/ShEX constraint to make a property to build a hierarchy (i.e. a tree)
我对SHACL和ShEx知之甚少
我一直在阅读它们并弄清楚我是否可以在 属性 上创建约束以使其定义层次结构(即树状结构)。
我想我正在寻找的是一种指定方法,对于给定的 属性 p
,
a) 这 可以 发生 (o1 != o2
):
s p o1 .
s p o2 .
...
s p oN
b) 但这个 不能 (s1 != s2
):
s1 p o .
s2 p o
我想 a) 我应该对 p
的基数使用某种约束,对吗?
不知道如何指定 b),甚至不知道是否可以使用 SHACL 或 ShEX。我应该使用 OWL 吗?
在OWL
假设DifferentIndividuals: :s1, :s2
等:
ObjectProperty: :p
Characteristics: InverseFunctional
在上海
形状贴图如{_ :p FOCUS} @ :Shape
:
:Shape {
^:p IRI ?
}
在 SHACL
:Shape a sh:NodeShape ;
sh:targetObjectsOf :p ;
sh:property [
sh:path [ sh:inversePath :p ] ;
sh:maxCount 1
] .
纯 SPARQL
ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }
一般
我对SHACL和ShEx知之甚少
我一直在阅读它们并弄清楚我是否可以在 属性 上创建约束以使其定义层次结构(即树状结构)。
我想我正在寻找的是一种指定方法,对于给定的 属性 p
,
a) 这 可以 发生 (o1 != o2
):
s p o1 .
s p o2 .
...
s p oN
b) 但这个 不能 (s1 != s2
):
s1 p o .
s2 p o
我想 a) 我应该对 p
的基数使用某种约束,对吗?
不知道如何指定 b),甚至不知道是否可以使用 SHACL 或 ShEX。我应该使用 OWL 吗?
在OWL
假设DifferentIndividuals: :s1, :s2
等:
ObjectProperty: :p
Characteristics: InverseFunctional
在上海
形状贴图如{_ :p FOCUS} @ :Shape
:
:Shape {
^:p IRI ?
}
在 SHACL
:Shape a sh:NodeShape ;
sh:targetObjectsOf :p ;
sh:property [
sh:path [ sh:inversePath :p ] ;
sh:maxCount 1
] .
纯 SPARQL
ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }
一般