是否可以在OWL中定义数据属性的基数? 例如,考虑具有数据属性“Age”的类“Person”,是否有办法声明数据属性“Age”必须具有单个值?
答案 0 :(得分:3)
你使用对象属性(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 .
在某些情况下,使用数据类型属性的精确基数限制实际上比使用对象属性更方便,因为reasoners(应该能够)识别文字之间的不等式(例如,2≠3和“foo”≠ “bar”)自动,而个人可以有多个名字。