我的任务是在 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 中应该如何描述提到的两个类?