我正在试图弄清楚Jena(或任何其他SPARQL更新服务器)是否会强制执行本体约束。例如,我想强制只允许具有类型x的实体具有属性y,并且该属性的值必须具有类型z。我认为这是OWL可以提供的,但我不确定。另外,具体来说,Jena会确保如果我尝试编写不遵循这些规则的SPARQL更新查询,那么该更新将无法插入并返回错误吗?
答案 0 :(得分:2)
例如,我想强制只允许具有x类型的实体具有属性y,并且该属性的值必须具有类型z。我认为这是OWL可以提供的,但我不确定。
您要求的是不 OWL提供的内容。在OWL中,您可以这样说:
propertyY rdfs:domain typeX
propertyY rdfs:domain typeZ
但是不意味着(至少,就像你期望的那样),只有X类型的东西可以有propertyY的值,并且值必须是Z型这意味着每当你看到一个使用propertyY的断言时,比如
a propertyY b
OWL推理者可以推断
rdf:type typeX
b rdf:输入typeZ
这些推论唯一一次是任何类型的“约束违规”,如果您有其他方式推断 a 不能属于X型,或者 b 不能属于Z.然后OWL推理器会识别出不一致。
我正在试图弄清楚Jena(或任何其他SPARQL更新服务器)是否会强制执行本体约束。 ...另外,特别是Jena会确保如果我尝试编写不符合这些规则的SPARQL更新查询,那么该更新将无法插入并返回错误吗?
我不知道Jena是否支持这样的开箱即用,但你可能也可能:
答案 1 :(得分:0)
您需要了解的关于OWL的内容是property restriction:
属性限制是一种特殊的类描述。它描述了一个匿名类,即满足限制的所有个体的类。 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允许您临时向本体管理器添加一个概念,然后您可以检查本体的一致性。通常,当此检查出错时,您可以删除最后未保存的更改到本体管理器(通过更改侦听器),如果一切正确,您可以将更改保存在本体管理器中。