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 ?
}

Example

在 SHACL

:Shape a sh:NodeShape ;
  sh:targetObjectsOf :p ;
  sh:property [
    sh:path [ sh:inversePath :p ] ;
    sh:maxCount 1 
  ] .

Example

纯 SPARQL

ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }

一般

阅读"Validating RDF Data"