【发布时间】:2014-08-03 00:40:31
【问题描述】:
是否可以在 OWL 中定义数据属性的基数? 例如考虑具有数据属性“Age”的类“Person”,有没有办法声明数据属性“Age”必须有一个值?
【问题讨论】:
是否可以在 OWL 中定义数据属性的基数? 例如考虑具有数据属性“Age”的类“Person”,有没有办法声明数据属性“Age”必须有一个值?
【问题讨论】:
您可以像使用对象属性一样使用公理(DL 和曼彻斯特语法):
人 ⊑ =1.hasAge
人 subClassOf hasAge 正好 1
这是一个包含这些公理的小型本体:
@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 .
在某些情况下,对数据类型属性使用精确基数限制实际上比对对象属性更方便一些,因为推理器(应该能够)识别文字之间的不等式(例如,2 ≠ 3 和“foo”≠ "bar") 自动,而个人可以有多个名称。
【讨论】: