2017-07-05 5 views
0

OWL 2の新機能で、OWL APIで ".ttl"ファイルを解析したいが、OWL APIがAPI Iと同じではないことがわかった前に使用されました。 OWLAxiomやOWLEntityなどでコンテンツを取得したい場合は、「訪問者」を作成する必要があります。私はいくつかのチュートリアルを読んだが、私はそれを行う適切な方法を得ていない。また、検索されたチュートリアルでは古いバージョンのowl apiが使用されていました。ですから、インスタンスを解析し、そのコンテンツをJavaクラスに格納する詳細な例が必要です。.ttlファイルを解析してJavaクラスにマップする


私はいくつかの試みを行いましたが、私のコードは次のとおりですが、私は続行するつもりはありません。


OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 

File file = new File("./source.ttl"); 

OWLOntology localAcademic = manager.loadOntologyFromOntologyDocument(file); 

Stream<OWLNamedIndividual> namedIndividualStream = localAcademic.individualsInSignature(); 

Iterator<OWLNamedIndividual> iterator = namedIndividualStream.iterator(); 

while (iterator.hasNext()) { 

    OWLNamedIndividual namedIndividual = iterator.next(); 

} 

インスタンス、例えば以下の通りです。特に、 "ecrm:P3_has_note"のオブジェクトに "@en"を格納したい。


<http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896> 
    a      mus:M42_Performed_Expression_Creation ; 
    ecrm:P3_has_note  "Créée par Teodoro Anzellotti, son commanditaire, en novembre 1995 à Rotterdam"@en ; 
    ecrm:P4_has_time-span <http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896/time> ; 
    ecrm:P9_consists_of [ a      mus:M28_Individual_Performance ; 
          ecrm:P14_carried_out_by "Teodoro Anzellotti" 
          ] ; 
    ecrm:P9_consists_of [ a      mus:M28_Individual_Performance ; 
          ecrm:P14_carried_out_by "à Rotterdam" 
          ] ; 
    efrbroo:R17_created <http://data.doremus.org/expression/2fdd40f3-f67c-30a0-bb03-f27e69b9f07f> ; 
    efrbroo:R19_created_a_realisation_of 
      <http://data.doremus.org/work/907de583-5247-346a-9c19-e184823c9fd6> ; 
    efrbroo:R25_performed <http://data.doremus.org/expression/b4bb1588-dd83-3915-ab55-b8b70b0131b5> . 

次のように私が欲しいの内容は以下のとおりです。


class Instance{ 
    String subject; 
    Map<String, Set<Object>> predicateToObject = new HashMap<String,Set<Object>>(); 
} 

class Object{ 
    String value; 
    String type; 
    String language = null; 
} 

私が使用していますowlapiのバージョンは5.1.0です。 jarとdocをthereからダウンロードします。私は、Javaクラスで必要なコンテンツを取得する方法を知りたいだけです。


方法について説明するチュートリアルがある場合は、教えてください。

ありがとうございます。


アップデート:私はそれを行う方法を知っている、私はそれを終了するとき、私は答えを書きますが、私はそれがOWLAPIの後発を助けることができると思います。


もう一度ありがとう。

答えて

1

個人がいれば、データプロパティのアサーション公理を取得し、各プロパティに対してアサートされたリテラルを収集します。だから、

、あなたのコードのループのために:

// Let's rename your Object class to Literal so we don't get confused with java.lang.Object 
Instance instance = new Instance(); 
localAcademic.dataPropertyAssertionAxioms() 
    .forEach(ax -> instance.predicateToObject.put(
     ax.getProperty().getIRI().toString(), 
     Collections.singleton(new Literal(ax.getObject)))); 

このコードは、プロパティは1度だけ表示を前提と - あなたの特性が複数回表示される場合は、セットがすでにプロパティに存在するかどうかを確認する必要がありますマップの値を置き換えるのではなく、単にそれに追加するだけです。私は例を単純化するためにそれを残しました。

関心のある公理のタイプと、どのような方法でそれを呼び出すかを知っているので、このシナリオでは訪問者は必要ありません。 OWLAxiomVisitorvisit(OWLDataPropertyAssertionAxiom)しか実装していない可能性がありますが、この場合には利点はほとんどありません。

+0

ありがとうございます。しかし、私は訪問者を使ってデータを取得することができます。それはOWLAnnonatiomAssiAxiomです。あなたの意見は何ですか? – ciferlv

+0

あなたが行っているプロパティがアノテーションプロパティかデータプロパティかによって異なります。違いは、アノテーションのプロパティはリスナーによって無視されることです。 – Ignazio

+0

私も質問があります。今私が個人を持っていれば、私はあらゆる財産と価値を知りたいのですが、これを得るための速い方法がありますか?それを行う既成の方法を書いてありますか?どうもありがとう。 – ciferlv

関連する問題