2

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 );

動作を停止します。ペレットは制限をクラスのスーパークラスとして認識していないようです。

4

1 に答える 1

0

このような問題の最も一般的な原因は、URI が正確に一致しないことです。実際のデータのフラグメントを Turtle または RDF XML として含めていて、値が何であるかを述べていた場合NS、それは決定的に除外または除外できます。

一般的に言えば、編集ツールのユーザー インターフェイスのスクリーンショットを投稿することは、ソース自体を投稿することほど、あなたを助けたい人にとって役に立ちません。

アップデート

まあ、それは私のために働く。(ヒント: 実行可能な) コードを gist に入れましたhttps://gist.github.com/4065533。私のコードとあなたのコードの間で見つけられる唯一の違いは、OWL_FILE_NAMEvar (正しい入力ソースをロードしていることを確認したと思われますか?) と、現時点では使用できない Pellet の使用です。問題の原因が Pellet ではないことを Jena ルール推論器に交換することで確認できますが、Pellet が要因になるとは思えません。

私の要旨コードを試して、それが問題の解明に役立つかどうかを確認してください。それでもコードが機能しない場合は、実行可能な最小限のテスト ケースを投稿してください。不足している情報を推測したり埋めたりしなくても実行できる必要があります。

于 2012-11-13T10:11:33.240 に答える