【发布时间】:2019-01-20 16:36:22
【问题描述】:
我可以根据我的本体中定义的基数规则来限制在 graphdb 中插入数据吗?
我在带有“owl-max”规则集的 graphdb 存储库中加载了以下本体。基于讨论here。我试图限制一个人只能拥有一个“年龄”财产。
@prefix : <http://stackoverflow.com/q/24188632/1281433/people-have-exactly-one-age#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:Person a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:cardinality "1"^^xsd:nonNegativeInteger ;
owl:onProperty :hasAge
] .
<http://stackoverflow.com/q/24188632/1281433/people-have-exactly-one-age>
a owl:Ontology .
:hasAge a owl:DatatypeProperty .
我现在插入如下人员记录
prefix : <http://stackoverflow.com/q/24188632/1281433/people-have-exactly-one-age#>
prefix data: <http://data.example.com/>
Insert DATA {
data:dow a :Person ;
:hasAge 26 .
}
下次我为那个人插入更新的年龄时,
Insert DATA {
data:dow :hasAge 27 .
}
我预计 27 岁的三倍会覆盖 26 岁的三倍,否则我会收到插入错误。然而,这两个年龄都是为这个人存储的。
data:dow a <http://stackoverflow.com/q/24188632/1281433/people-have-exactly-one-age#Person> ;
<http://stackoverflow.com/q/24188632/1281433/people-have-exactly-one-age#hasAge> "26"^^xsd:integer , "27"^^xsd:integer .
【问题讨论】:
-
这不是一般最大基数的工作方式。在 OWL 中没有这样的 constraint 概念,例如数据库。 OWL 用于推理。另一方面,对于默认情况下彼此不同的文字,您的情况应该导致逻辑不一致。您是否在存储库中启用了check-for-inconsistency param?
-
嗨@AKSW,我在一个新的存储库中启用了检查不一致,并尝试了本体和具有不同值的“年龄”数据属性的多个插入。但是在插入语句期间仍然没有错误。