Protégé3.4を使用して設計された単純なオントロジーがあります。Tableクラスの定義のように、いくつかの「必要十分」条件を導入しました。
http://postimage.org/image/f37xliqad/
最初の2つの条件を忘れて、3番目の条件は理解しやすいです:)
生成されるOWLコードは次のとおりです。
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"
xmlns:assert="http://www.owl-ontologies.com/assert.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:sqwrl="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#"
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
xmlns="http://www.owl-ontologies.com/Ontology1317586695.owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:swrla="http://swrl.stanford.edu/ontologies/3.3/swrla.owl#"
xml:base="http://www.owl-ontologies.com/Ontology1317586695.owl">
<owl:Ontology rdf:about="">
<owl:imports rdf:resource="http://swrl.stanford.edu/ontologies/3.3/swrla.owl"/>
<owl:imports rdf:resource="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl"/>
</owl:Ontology>
..。
<owl:Class rdf:ID="Table">
<owl:disjointWith>
<owl:Class rdf:ID="Chair"/>
</owl:disjointWith>
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Resource">
<rdf:first>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="has_coarseArea"/>
</owl:onProperty>
<owl:someValuesFrom>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#MMAround09"/>
<owl:Class rdf:about="#MMAround1"/>
<owl:Class rdf:about="#MMAround12"/>
<owl:Class rdf:about="#MMAround15"/>
<owl:Class rdf:about="#MMAround2"/>
</owl:unionOf>
</owl:Class>
</owl:someValuesFrom>
</owl:Restriction>
</rdf:first>
<rdf:rest rdf:parseType="Resource">
<rdf:first>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#MMAround07"/>
<owl:Class rdf:about="#MMAround08"/>
</owl:unionOf>
</owl:Class>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:ID="has_coarseCentroidHeight"/>
</owl:onProperty>
</owl:Restriction>
</rdf:first>
<rdf:rest>
<rdf:List>
<rdf:first>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class rdf:about="#Horizontal"/>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#has_orientation"/>
</owl:onProperty>
</owl:Restriction>
</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:List>
</rdf:rest>
</rdf:rest>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:subClassOf>
<owl:Class rdf:ID="Furniture"/>
</rdfs:subClassOf>
</owl:Class>
私がよく理解していれば、これらの条件は制限として解釈され、Tableクラスのスーパークラスとして管理されます。
したがって、オントロジーとクラステーブルをイエナでロードすると、次のようになります。
1. String NS = "http://www.owl-ontologies.com/Ontology1317586695.owl#";
2. OntModel model = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC);
3. model.read(OWL_FILE_NAME);
4. OntClass Table = model.getOntClass( NS + "Table" );
Table OntClassが正しくロードされているため、NS変数の値は正しいです。次に、次のコードを実行しているときに、10行目に到達する必要がありますが、そうではありません。
5. for (Iterator<OntClass> supers = Table.listSuperClasses(true); supers.hasNext(); ) {
6. OntClass superClass = supers.next();
7.
8. if (superClass.isRestriction())
9. {
10. System.out.println("Restriction found");
11. }
12. }
Table.listEquivalentClasses()も試してみましたが、成功しませんでした。
私が邪魔をしているものについて何か考えはありますか?
アップデート
Ianによって適切に実装され、ここで共有されているコードをテストします:https ://gist.github.com/4065533 、正常に動作します。しかし、変化する
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF );
に
OntModel m = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );
動作を停止します。ペレットは制限をクラスのスーパークラスとして認識していないようです。