【发布时间】:2014-02-06 19:54:45
【问题描述】:
我的任务是在owl 中构造两个类。 Base 类描述了包含多个属性的资源,例如p1、p2 和 p3。另一个类 Sub 应描述类似于 Base 类的资源,但有限制,即它们不包含其属性之一,例如p1,但只有 p2 和 p3。例如,类 Car 将描述包含一些属性的车辆,其中之一是“hasMotor”。 Bicycle 类也将描述具有限制的车辆,即它们没有马达。
我使用基数限制来定义这样的类:
@prefix : <http://sample.org/test#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://sample.org/test> .
<http://sample.org/test> rdf:type owl:Ontology ;
owl:versionInfo "0.2"^^xsd:string .
:p1 rdf:type owl:DatatypeProperty .
:p2 rdf:type owl:DatatypeProperty .
:p3 rdf:type owl:DatatypeProperty .
:Base rdf:type owl:Class ;
rdfs:subClassOf [ rdf:type owl:Restriction ;
owl:onProperty :p3 ;
owl:someValuesFrom xsd:string
] ,
[ rdf:type owl:Restriction ;
owl:onProperty :p2 ;
owl:someValuesFrom xsd:string
] ,
[ rdf:type owl:Restriction ;
owl:onProperty :p1 ;
owl:someValuesFrom xsd:string
] .
:Sub rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:intersectionOf ( :Base
[ rdf:type owl:Restriction ;
owl:onProperty :p1 ;
owl:qualifiedCardinality "0"^^xsd:nonNegativeInteger ;
owl:onDataRange xsd:string
]
)
] .
但是,Pellet 推理器得出的 Sub 类等同于 Nothing。 owl中提到的这两个类应该如何描述?
【问题讨论】:
-
类在 OWL 中没有属性;它不是面向对象的编程语言。属性可能有域和范围,但属性在任何意义上都与类无关。
-
什么“推理结果由 Pellet 推理器产生”没有意义?我已经解释了my answer 中的公理是什么意思,以及为什么你会得到你所做的子类关系,但你没有提到你好奇的特定结果,所以我不知道我们是否已经是否解决了他们。
-
我修改了原文
-
新文本与原始文本有很大不同。不过我会重申;属性不属于类。逻辑含义是“继承的”。如果您说 Vehicle 至少有两个轮子,然后将 Unicycle 定义为车辆的子类并说它只有一个轮子,那么 Unicycle 将等同于 owl:Nothing,因为它不能有任何实例(因为没有任何东西可以有至少两个轮子并且正好是一个轮子)。我在回答中给出的解释仍然成立。
标签: owl restriction protege inference pellet