10

ある種の基本的なOWLオントロジーで書きたいデータトリプレットがいくつかあります。私は次のようなトリプレットを持っています:

Delhi is part of India 

また

India is an Asian country

「is-a」、「part-of」、「related-to」などの関係があることに注意してください。オントロジーを構築する最も簡単な方法は何ですか?実用的な例やサンプルWebサイトへの参照は、非常に役立ちます。

4

5 に答える 5

10

あなたの質問にはさまざまなことが混同されています。ここで何を達成しようとしているのかを考えるために、(キーボードから離れて)少し時間をとることを強くお勧めします。

まず、地理的オントロジーは非常に複雑になる可能性があり、この分野ではすでに多くの作業が行われています。おそらく明らかな出発点は、デリーのような都市やインドのような国を含む地理的特徴に名前を付けるGeoNames オントロジーです。少なくとも、アプリケーション内の場所にこれらの名前を再利用する必要があります。これにより、データが他の利用可能なリンクされたデータ ソースと正常に結合される可能性が最大になります。

ただし、アプリケーションで GeoNames 全体を使用する必要はおそらくないので (私は推測しています)、オントロジーが必要な理由を明確にする必要があります。これにアプローチする良い方法は、アプリケーションの外部から行うことです。使用する Jena モデルの種類を心配するのではなく、「オントロジーを使用すると、アプリケーションのユーザーは . ..」 . 次に、いくつかのコンピテンシーに関する質問の設定に進みます(たとえば、このガイドのセクション 3 を参照してください)。) オントロジー用。表現したい情報の種類と、それに適用する必要があるクエリの種類がわかれば、テクノロジの選択がより明確になります。これらのアプリケーションは通常、反復的に開発されるため、かなり早い段階でコードを試してみることをお勧めしますが、コーディングの旅を始める前に、目的地をより明確に念頭に置いておくことをお勧めします。

あなたは、Jena を使用して Web サイトを運営したいとほのめかしています。ここには多くの選択肢があります。セマンティック Webという用語に惑わされないでください。これは実際には、セマンティクスを人間が読める Web ページ自体に入れるのではなく、インターライン化されたデータ セットに Web のような性質をもたらすことを意味します。そうすることは可能ですが、多くの人がそうしていますが、アーキテクチャに追加のレイヤーが必要になります。通常、サーブレット コンテナー内でVelocityなどのテンプレート エンジンを使用して Jena を使用する方法と、Ruby Web フレームワークを使用してJRuby経由で Jena を駆動する方法のいずれかを使用します。この特定の問題を解決するには、他にも多くの方法があります。Jena は Web パブリッシングに直接対応していませんが、Java ベースの Web フレームワーク内で使用できます。

最後に、名前空間に関しては、既存の語彙を再利用する必要があるため、可能であれば名前空間を再利用する必要があります。どこかのデータのウェブ上ですでに表現されているものに新しい名前を付けないでください。GeoNames、またはDbPedia、またはそれらが適合する他の多くの公開された語彙のいずれかを使用します。それらが適合しない場合は、互換性のない方法で既存の名前を使用するのではなく、新しい名前を作成する必要があります。この場合、名前空間のベースとして、アプリケーション (会社や大学など) の Web ドメインを使用する必要があります。理想的には、名前空間のベース URL でオントロジーを公開する必要がありますが、ローカル Web ポリシーによっては、これを調整するのが難しい場合があります。

于 2011-04-30T13:26:12.823 に答える
4

マンチェスター大学のOWL APIをお勧めします。このようにして、オントロジーを Java で「オンザフライ」で作成し始めることができ、単一のメソッド呼び出しで、必要に応じて好みの形式 (RDF、Manchester Syntax など) でシリアライズしたり、直接作業したりできます。メモリ表現。このようにして、オントロジーをプログラムのコンテキストで迅速にプロトタイプ化し、実験することができます。

ライブラリとその主要コンポーネントの概要については、ライブラリの作成者が提供するチュートリアル (コード チュートリアル) をお勧めします。基本的なニーズの 90% をカバーしています。

PS: Protégé は OWL Api に基づいています。提案どおりに試すこともできますが、特に最初は、オントロジーをすばやく試して、頭が十分にクリアになったときに Protege のようなエンジニアリング環境に切り替えることを好みました。さらに、外部のオントロジーでは、それをナビゲートする方法を学ぶ必要があります.IMHOは、最初は本当に価値がありません.

于 2012-12-29T17:24:53.857 に答える
1

Stanford's Protegeをご覧ください。オントロジーエディタです。

于 2011-04-30T15:02:45.427 に答える
0

主語、目的語、述語で構成されるトリプレットクラスを宣言するだけです。「has-a」は述語であるため、オントロジー要素は次のようになります。

"Dehli", "is-in", "India"
"India", "is-in", "Asia"
"India", "is-a", "country"

もちろん、これはクエリに対応していませんが、適切なデータストアがあれば(データベースでも可能です)、適切なクエリメカニズムを使用して柔軟なオントロジーの構築を開始できます。

もちろん、JENAは、これが作成するものよりもはるかに優れています。それはセマンティッククエリのものを提供するだけでなく、はるかに優れたリソース定義と解決を提供します。ただし、単純なトリプレット構造よりもはるかに複雑です。それはすべてあなたが必要とするものに依存します。

于 2011-04-30T11:19:01.470 に答える
0
/**  
  - This is maven dependencies for owl-api
    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-api</artifactId>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-apibinding</artifactId>
    </dependency>

    * First of all you need to initialize ontology:

 **/   
                    private OWLDataFactory factory;

                    private PrefixManager pm;

                    private OWLOntology ontology;

                    private String pmString = "#";

                    private OWLOntologyManager manager;

                    private OWLReasoner reasoner;

                    private ShortFormEntityChecker entityChecker;

                    private BidirectionalShortFormProviderAdapter bidirectionalShortFormProviderAdapter;

             private void initializeOntology(String fileContent)
                            throws OWLOntologyCreationException {
                        InputStream bstream = new ByteArrayInputStream(fileContent.getBytes());
                        this.manager = OWLManager.createOWLOntologyManager();
                        this.ontology = this.manager.loadOntologyFromOntologyDocument(bstream);
                        IRI ontologyIRI = this.ontology.getOntologyID().getOntologyIRI();
                        this.pm = new DefaultPrefixManager(ontologyIRI.toString()
                                + this.pmString);
                        this.factory = this.manager.getOWLDataFactory();

                        ReasonerFactory factory = new ReasonerFactory();
                        this.reasoner = factory.createReasoner(this.ontology);

                        Set<OWLOntology> onts = new HashSet<>();
                        onts.add(this.ontology);

                        DefaultPrefixManager defaultPrefixManager = new DefaultPrefixManager(
                                this.pm);
                        ShortFormProvider shortFormProvider = new ManchesterOWLSyntaxPrefixNameShortFormProvider(
                                defaultPrefixManager);
                        this.bidirectionalShortFormProviderAdapter = new BidirectionalShortFormProviderAdapter(
                                this.manager, onts, shortFormProvider);
                        this.entityChecker = new ShortFormEntityChecker(
                                this.bidirectionalShortFormProviderAdapter);

                    }

/*
    After that you need to define your classes and the relations of the classes. These relations calls as object properties in ontology. Instance of each ontology class calls as individual and the attributies of the classes (for person name, age , adress) calls as data-property.
*/
//    To create a new individual of an ontology class : 



         public OWLClass getClass(String className) {
                 return this.factory.getOWLClass(":" + className, this.pm);
            }




            public OWLNamedIndividual createInvidual(String cls, String invname) {
                                        OWLNamedIndividual res = this.factory.getOWLNamedIndividual(":"
                                                + invname, this.pm);
                                        this.manager.addAxiom(this.ontology,
                                                this.factory.getOWLDeclarationAxiom(res));
                                        OWLClassAssertionAxiom axiom = this.factory.getOWLClassAssertionAxiom(
                                                getClass(cls), res);
                                        this.manager.addAxiom(this.ontology, axiom);
                                        return res;
            }

 //   To create an object property :

 //   This method will create an object property named prop if it is not exist.



         public OWLObjectProperty getObjectProperty(String prop) {
                    return this.factory.getOWLObjectProperty(":" + prop, this.pm);
                }

            public void addObjectProperty(String propname, OWLNamedIndividual prop,
                        OWLNamedIndividual obj) {
                    OWLObjectPropertyAssertionAxiom axiom = this.factory
                            .getOWLObjectPropertyAssertionAxiom(
                                    getObjectProperty(propname), obj, prop);
                    this.manager.addAxiom(this.ontology, axiom);
                }

  //  And finally , to add a data-property to individuals :

        public OWLDataProperty getDataProperty(String prop) {
                        return this.factory.getOWLDataProperty(":" + prop, this.pm);
                    }

        public void addDataProperty(String propname, boolean propvalue,
                        OWLNamedIndividual inv) {
                    OWLAxiom axiom = this.factory.getOWLDataPropertyAssertionAxiom(
                            getDataProperty(propname), inv, propvalue);
                    this.manager.addAxiom(this.ontology, axiom);
        }
于 2014-01-27T09:35:10.500 に答える