私の仕事は、フクロウで 2 つのクラスを構築することです。Base クラスは、p1、p2、p3 などの複数のプロパティを含むリソースを記述します。もう 1 つのクラスである Sub は、Base クラスと同様のリソースを記述しますが、そのプロパティの 1 つ (p1 など) を含まず、p2 と p3 のみを含むという制限があります。たとえば、クラス Car は、いくつかのプロパティを含む車両を記述し、そのうちの 1 つが「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
]
)
] .
しかし、Sub クラスは、Pellet reasoner によって Nothing と同等であると結論付けられます。上記の 2 つのクラスは、フクロウでどのように記述されるべきですか?