Rdf SHACL/ShEX约束,用于生成属性以构建层次结构(即树)

Rdf SHACL/ShEX约束,用于生成属性以构建层次结构(即树),rdf,owl,ontology,shacl,shex,Rdf,Owl,Ontology,Shacl,Shex,我对沙克和舍克斯知之甚少 我一直在阅读有关它们的文章,并想知道是否可以对属性创建约束,使其定义层次结构(即树状结构) 我想我要寻找的是一种方法来指定,对于给定的属性p a) 这种情况可以发生(o1!=o2): b) 但是这个不能(s1!=s2): 我想对于a)我应该对p的基数使用某种约束,对吗 不知道如何指定b),甚至不知道是否可以使用SHACL或ShEX。我应该使用OWL吗?在OWL中 :Shape a sh:NodeShape ; sh:targetObjectsOf :p ; sh

我对沙克和舍克斯知之甚少

我一直在阅读有关它们的文章,并想知道是否可以对属性创建约束,使其定义层次结构(即树状结构)

我想我要寻找的是一种方法来指定,对于给定的属性
p

a) 这种情况可以发生(
o1!=o2
):

b) 但是这个不能
s1!=s2
):

我想对于a)我应该对
p
的基数使用某种约束,对吗


不知道如何指定b),甚至不知道是否可以使用SHACL或ShEX。我应该使用OWL吗?

在OWL中

:Shape a sh:NodeShape ;
  sh:targetObjectsOf :p ;
  sh:property [
    sh:path [ sh:inversePath :p ] ;
    sh:maxCount 1 
  ] .
ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }
假设
不同的个体::s1,:s2
等:

ObjectProperty: :p
  Characteristics: InverseFunctional
在ShEx中

使用类似于
{up:FOCUS}@:shape
的形状贴图:

:Shape { 
  ^:p IRI ?
}

在沙克尔

:Shape a sh:NodeShape ;
  sh:targetObjectsOf :p ;
  sh:property [
    sh:path [ sh:inversePath :p ] ;
    sh:maxCount 1 
  ] .
ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }

在纯SPARQL中

:Shape a sh:NodeShape ;
  sh:targetObjectsOf :p ;
  sh:property [
    sh:path [ sh:inversePath :p ] ;
    sh:maxCount 1 
  ] .
ASK { ?o ^:p ?s1, ?s2 . FILTER (?s1 != ?s2) }
一般来说


阅读。

在OWL中:虽然OWL公理不是约束,而是用于推理。因此,拥有一个反函数属性axiom只会推断出
s1 owl:sameAs s2
,只有当您明确地将
s1
s2
区分开来(或与其他公理不同)@unformeduser准确地说,owl似乎不太关心约束,而更关心为推理添加信息时,才会出现矛盾。这就是为什么我在研究SHACL或ShEx的这些约束条件……根据@StanislavKralin的建议,我发现:
sh:inversePath上的sh:maxCount 1
在中建议。我会试着看看这是否解决了我的问题。