我的任务是在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中描述两个提到的类?
答案 0 :(得分:4)
但我无法理解Pellet产生的推断结果 推理。对财产存在的限制似乎不是 上班。我该如何定义这样的类?
你还没有说过Pellet产生的推理结果 ,所以特别难以解释它们。但是,我们仍然可以看看你的公理所说的话。 OWL类非常类似于集合,您定义的限制是对这些集合的元素进行断言。例如,当你说那个
时Base⊑⊑prop.String
你所说的是
1。 如果某些 x 是 Base ,那么就会有一些String s 支柱(X,S)
现在,你还有两个公理:
Sub⊑Base
Sub⊑= 0 prop.String
这就是说
2。 如果某些 x 是 Sub ,那么 x 也是基。
3. 如果某些 x 是 Sub ,那么就有零字符串 s 其中 prop(x,s)。
此外,请您解释为什么推断Sub类是ObjProp的子类。
您的本体并不矛盾,但您的某个类 Sub 不能拥有成员通常会产生通常不受欢迎的事态。为什么会这样?好吧,假设一些 x 是 Sub 。然后,因为 x 是 Sub ,所以它的字符串正好为零。当然,每个 Sub 也是 Base ,因此 x 也是 Base 。由于它是 Base ,因此它必须至少有一个字符串。它不能有零和至少一个,所以我们实际上不能有 Sub 的任何实例。由于 Sub 是空类(即相当于 owl:Nothing ),因此它是每个其他类的子类。