1

我对 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 吗?

4

1 回答 1

3

在猫头鹰

假设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) }

一般来说

阅读“验证 RDF 数据”

于 2020-08-11T20:33:55.400 回答