2

我试图弄清楚 Jena(或任何其他 SPARQL 更新服务器)是否会强制执行本体约束。例如,我想强制只允许具有类型 x 的实体具有属性 y,并且属性的值必须具有类型 z。我认为这是 OWL 可以提供的,但我不确定。另外,具体来说,Jena 是否会确保如果我尝试编写不遵循这些规则的 SPARQL 更新查询,该更新将无法插入并返回错误?

4

2 回答 2

3

例如,我想强制只允许具有类型 x 的实体具有属性 y,并且属性的值必须具有类型 z。我认为这是 OWL 可以提供的,但我不确定。

你所要求的不是OWL 提供的。在 OWL 中,您可以这样说:

    propertyY rdfs:domain typeX
    propertyY rdfs:domain typeZ

但这并不意味着(至少,按照您所期望的方式),只有 X 类型的东西才能具有 propertyY 的值,并且这些值必须是 Z 类型。这意味着每当您看到使用 propertyY 的断言,例如

    a 属性 Y b

OWL 推理器可以推断

    a rdf:type X
    b rdf:type typeZ

唯一一次这些推论将是任何类型的“违反约束”是如果您有其他方式推断a 不能属于 X 类型,或者b 不能属于 Z 类型。然后 OWL 推理器会识别出不一致。

我试图弄清楚 Jena(或任何其他 SPARQL 更新服务器)是否会强制执行本体约束。…另外,具体来说,Jena 是否会确保如果我尝试编写不遵循这些规则的 SPARQL 更新查询,该更新将无法插入并返回错误?

我不知道 Jena 是否支持这种开箱即用的功能,但您可能也可以:

  1. 使用附有推理器的 OntModel,并针对该图运行 SPARQL 更新。然后,您可以查询图表,看看是否发现任何不一致的地方。如何做到这一点将取决于推理器如何发出不一致的信号。这可能不是那么难,但请记住,Jena 确实是基于 RDF 的,并且对于完整的 OWL 推理,您需要另一个与 Jena 集成的推理器(例如,Pellet,但我认为还有其他推理器)。
  2. 或者,您可以使用内置推理的商店,并且可能已经具有这种功能。我认为 Stardog 具有其中的一些功能。
于 2015-05-28T12:22:27.500 回答
0

关于OWL,你需要了解的是财产限制

属性限制是一种特殊的类描述。它描述了一个匿名类,即所有满足限制的个体的类。OWL 区分了两种属性限制:值约束和基数约束。

约束在应用于此特定类描述时对属性范围施加约束。

在这个特定的类描述的上下文中,基数约束对属性可以取的值的数量施加了约束。

根据您的问题的描述,您需要使用值约束。存在这些值约束:一些 ( someValuesFrom)、仅 ( allValuesFrom) 和完全 ( hasValue)。

例如:

Class: Woman subClassOf: hasGender only Female
Class: Mother subClassOf: hasChild some Child
Class: Employee subClassOf: hasEmployeeID exaclty 1 ID

因此,根据您定义的对个人的限制,这些个人可以由推理器分类到正确的类别下,这将是他们的类型。系统通常不会阻止您输入虚假信息,但该概念将被宣布为无法满足或不一致。在输入与本体中的常量不相容的个体的情况下,本体变得不一致(一切都出错)然后你可以收回我认为的最后一个事实。我不确定 Jena,但是 OWL-API 可以让您暂时向本体管理器添加一个概念,然后您可以检查本体的一致性。通常,当此检查出错时,您可以删除对本体管理器的最后未保存的更改(通过更改侦听器),如果一切正确,

于 2015-05-27T21:08:50.033 回答