SPARQL UPDATE验证

时间:2015-12-15 11:38:26

标签: semantic-web ontology sesame triplestore

我有一个Sesame triplestore,其中导入了一个本体。

我知道我可以通过插入实例,删除实例和更新内容和东西来对其执行SPARQL Update操作。

但是如果以错误的方式使用这些操作会怎么样,比如插入一个没有逻辑且不遵守本体规则的无效三元组。三重像:

foo:Anna foo:likesToEat foo:arsenic.  

本体看起来像这样:

@prefix foo: <http://www.foo.org/ontologies/example#>.

foo:Anna rdf:type foo:Person.
foo:Anna rdf:type owl:NamedIndividual.
foo:Food rdf:type owl:Class.
foo:Metal rdf:type owl:Class.
foo:Person rdf:type owl:Class.
foo:arsenic rdf:type foo:Metal.
foo:arsenic rdf:type owl:NamedIndividual.
foo:likesToEat rdf:type owl:ObjectProperty.
foo:likesToEat rdfs:domain foo:Person.
foo:likesToEat rdfs:range foo:Food.
foo:pizza rdf:type foo:Food.
foo:pizza rdf:type owl:NamedIndividual.

你可以看到三重奏&#34; foo:Anna foo:likesToEat foo:arsenic&#34;是无效的,因为不尊重objectProperty的范围。

我的问题是:

有没有办法验证这些类型的更新,以便只有在尊重本体时才会执行更新操作?有没有办法设置三重存储来验证这些东西,还是必须手动完成?

2 个答案:

答案 0 :(得分:2)

  

正如你所看到的那样,三重“foo:Anna foo:likesToEat foo:arsenic”无效,因为不尊重objectProperty的范围。

这不是(RDF(S))本体的工作原理。从本体论的角度来看,三元组是完全有效的。将add_body_filter的范围定义为类foo:likesToEat这一事实只是意味着我们可以推断出foo:Food属于foo:arsenic类型。你的本体论中没有任何内容可以使它无效或不一致:毕竟你已经说过什么都不能两者食物和金属。

更一般地说:RDF Schema中的域/范围语句不是“关闭”可以使用的属性。 RDF的语义相反:对属性foo:Food的域/范围限制指定如果某个人P使用属性X,我们可以推断P属于X的域/范围类。

Sesame中没有内置功能来执行您要求的验证类型,主要是出于这个原因。

然而,如果你真的想要,你当然可以实现拒绝或警告何时插入你认为无效的三元组(无论出于何种原因)。根据您的使用情况,您有以下几种选择:

  1. 实施PSail(Connection)Wrapper来拦截插入操作并进行必要的验证。
  2. 实现执行验证的Repository(Connection)Wrapper(例如RDFHandler的子类),并使用该处理程序添加/验证数据(而不是直接使用标准RDFInserter方法)。
  3. 这两种方法都允许您检查每个传入的三元组,在数据库中快速查找其谓词,检查是否存在域/范围限制,以及三元组“违反”该限制是否会引发错误。第二种方法可能最容易做,而且最灵活:您可以在代码中的某些用例中使用此验证,并且可以在您不知道不需要的地方完全跳过它(因为很明显,这种验证会有性能损失。)

答案 1 :(得分:2)

Jeen在他描述RDFS或OWL如何在这种情况下起作用的时候很有用。

正如他所提到的,要执行验证,您需要一个封闭的世界,这不是您通常使用RDFS或OWL语义获得的。

话虽如此,想要验证您的数据是一件非常合理的事情! W3C正试图在这个area中定义一些东西,但是它还没有标准化。 iirc,TopBraid对它有一些支持,但随着工作组发展标准,它可能会成为一个移动目标。我不知道是否有芝麻API,我认为TopBraid使用Jena,但它可能值得一看。

Stardog附带Integrity Constraint Validation(可用教程here),这是使用OWL,SPARQL或规则进行数据验证的不同方法,作为定义约束的语法。免责声明是我在这方面的工作,但它是相关的,因为a)它确实像你正在寻找的验证和b)它支持Sesame API。