我对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
在ShEx中
具有类似{_ :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) }
一般
读取";验证RDF数据";。