0

我的任务是在 owl 中构建两个类。Base 类描述了包含多个属性的资源,例如 p1、p2 和 p3。另一个类,Sub,应描述类似于 Base 类的资源,但有限制,即它们不包含其属性之一,例如 p1,而仅包含 p2 和 p3。例如,类 Car 将描述包含一些属性的车辆,其中之一是“hasMotor”。自行车类也将描述具有限制的车辆,即它们没有马达。

我使用基数限制来定义这样的类:

@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 中应该如何描述提到的两个类?

4

1 回答 1

4

公理是什么意思……</h2>

但我无法理解 Pellet reasoner 产生的推理结果。对财产存在的限制似乎不起作用。如何定义这样的类?

您还没有说 Pellet 产生的推理结果是什么因此很难具体解释它们。但是,我们仍然可以看看你的公理在说什么。OWL 类真的很像集合,您定义的限制是对这些集合的元素进行断言。例如,当你说

Base ⊑ ∃prop.String

你说的是那个

1.如果某个xBase存在一些 String s,例如prop(x,s)

现在,您还有两个公理:

Sub ⊑ Base
Sub ⊑ =0 prop.String

这些说

2.如果某个xSub那么 x也是Base
3.如果某个x是一个Sub那么在prop(x,s)的地方正好有零个字符串s

…以及为什么Sub是其他所有事物的子类。

此外,您能否解释一下为什么 Sub 类被推断为 ObjProp 的子类。

您的本体不是不一致的,但是您确实具有通常不受欢迎的事态,即您的一个类Sub不能拥有成员。为什么会这样?好吧,假设某些xSub。然后,因为xSub,所以它的字符串正好为零。当然,每个Sub也是一个Base,所以x也是一个Base。既然它是Base,那么它必须至少有一个字符串。它不能有零和至少一个,所以我们实际上不能有任何Sub实例。由于Sub是空类(即相当于owl:Nothing) 它是所有其他类的子类

于 2014-02-06T21:03:12.847 回答