Jena支持在SPARQL更新查询期间强制执行OWL约束吗?

Jena支持在SPARQL更新查询期间强制执行OWL约束吗?,sparql,jena,jena-rules,Sparql,Jena,Jena Rules,我试图弄清楚Jena(或任何其他SPARQL更新服务器)是否会强制实施本体约束。例如,我想强制执行只有具有类型x的实体才允许具有属性y,并且属性的值必须具有类型z。我想这是猫头鹰能提供的,但我不确定。另外,特别是,Jena是否会确保如果我尝试编写一个不遵循这些规则的SPARQL更新查询,该更新将无法插入并返回一个错误?关于OWL,您需要了解的是: 属性限制是一种特殊的类描述。它描述了一个匿名类,即满足该限制的所有个体的类。OWL区分了两种属性约束:值约束和基数约束 值约束在应用于此特定类描述时对

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

关于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允许您临时向本体管理器添加一个概念,然后您可以检查本体的一致性。通常,当此检查出错时,您可以将上次未保存的更改删除到本体管理器(通过更改侦听器),如果一切正常,您可以将更改保存到本体管理器中

例如,我想强制执行只有具有类型x的实体才允许具有属性y,并且属性的值必须具有类型z。我想这是猫头鹰能提供的,但我不确定

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

propertyY rdfs:域类型X
propertyY rdfs:域类型Z

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

a物业Y b

猫头鹰推理者可以推断出

rdf:键入typeX
b rdf:typeZ类型

只有当你有其他方法来推断a不能是X类型,或者b不能是Z类型时,这些推论才会成为任何类型的“约束冲突”。然后OWL推理机会识别出不一致性

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

我不知道Jena是否支持这种开箱即用的东西,但你可能可以:

  • 使用连接了推理器的OntModel,并针对该图运行SPARQL更新。然后,您可以查询图形并查看是否发现任何不一致。如何做到这一点将取决于推理机如何发出不一致的信号。这可能并不难,但请记住Jena确实是基于RDF的,对于完整的OWL推理,您需要另一个与Jena集成的推理器(例如Pellet,但我认为还有其他推理器)
  • 或者,您可以使用内置了推理功能的存储,并且可能已经具有这种功能。我认为Stardog具有其中一些特性