1

假设我想使用 Shex 验证在三重商店中插入公司促销活动。一种可能的方法是将 Shex 编码为:

:Promotion {
   my-onto:has_person @:Person ;
   my-onto:grants_role @:Role ;
}

:Person {
   a [ foaf:Person ] ;
}

:Role {
   a [ my-onto:CompanyRole ] ;
}

这是一个简化。问题是在插入数据时,三元组将是:

:promotion-123 my-onto:has_person :person-456 ;
               my-onto:grants_role :role-CTO .

并且该图不会通过 Shex 验证,因为它缺少所有a三元组。

因此,为了在两个关系中定义和记录正确的 IRI,拥有 Shapes 是有意义的,但在所有现实世界场景中,90% 的数据将如上例所示,没有类型(在本例中)关系,因此将无法验证。

记录复杂和嵌套形状以验证 RDF 但同时“禁用”某些检查图中某些点的正确方法是什么?

我正在考虑的用例是当我需要向已经存在的“形状”添加额外的信息时,使用 IRI 之类owl:NamedIndividuals的或本体中的常量,已经存在的实体,如人员、公司等。

4

1 回答 1

1

您的意思是您插入的数据没有rdf:type( a) 声明,系统通过某种推理系统添加这些声明。

ShEx 不会干扰推理系统,也不会rdf:type以任何特殊方式处理声明。因此,该用例可能有几种方法。

一种方法是在声明中添加一个问号rdf:type

:Promotion {
   my-onto:has_person @:Person ;
   my-onto:grants_role @:Role ;
}

:Person {
   a [ foaf:Person ] ? ;
}

:Role {
   a [ my-onto:CompanyRole ] ? ;
}

这表示 a:Person可以没有rdf:type声明,或者如果它有rdf:type声明,则它必须包含单个 value foaf:Person

另一种方法可能是有两种形状,一种在推理之前检查输入数据,另一种在插入数据之后检查插入过程的正确行为。

请注意,在数据处理管道期间,在不同点作用的相同数据可能具有不同的形状。

于 2020-05-05T05:38:11.297 回答