1

私はSPARQL、OWL、およびJenaにかなり慣れていないので、まったく愚かな質問をしている場合は失礼します。私は数日以来私を狂わせている問題を抱えています。次の文字列をJenaのクエリとして使用していますQueryFactory.create(queryString)

queryString = "PREFIX foaf:  <http://xmlns.com/foaf/0.1/>"+
"PREFIX ho: <http://www.flatlandfarm.de/fhtw/ontologies/2010/5/22/helloOwl.owl#>" +
"SELECT ?name ?person ?test ?group "+
"WHERE { ?person foaf:name ?name ; "+
"         a ho:GoodPerson ; "+
"         ho:isMemberOf ?group ; "+
"}";

今朝までは、foaf名前空間からプロパティを要求するだけで機能していました。自分の名前空間からプロパティを要求するとすぐに、常に空の結果が得られました。私がこの質問をここに投稿しようとしていて、可能な限り正確に投稿できるようにいくつかの最終テストを行ったところ、突然うまくいきました。正確に何を求めるべきかわからなくなったので、投稿する前に質問を削除しました。数時間後、ProtegeのPelletプラグインを使用して、推測されたモデルを作成およびエクスポートしました。私はそれをhelloOwlInferred.owlと呼び、helloWl.owlがまだ存在するサーバー上のディレクトリにアップロードしました。推論されたオントロジーをロードするようにメソッドを調整し、接頭辞ho:が推論されたオントロジーにも割り当てられるように上記のクエリを変更しました。すぐに、何も機能しなくなりました。正確には、それはもはや機能するものではありませんでしたが、それは私が今朝まで私の元のクエリで持っていたのと同じ症状でした。私のプレフィックスはもう機能しませんでした。簡単なテストを行いました。すべてのhelloWorldInferred.owlファイル(サーバー上のプレフィックスとロードしたローカルコピーのファイル)の名前をhelloWorld.owlに変更しました。すべてを修正するのに十分奇妙です。

名前をhelloWorldInferred.owlに戻すと、すべてが再び壊れました。等々。そこで何が起こっているのですか?オントロジーが「有効なプレフィックスとして登録」されるまで、数週間待つ必要がありますか?

4

4 に答える 4

2

たぶんあなたのOWLファイルにはrdf:ID="something"コンストラクト(または他の形式の相対URLなどrdf:about="#something")が含まれていますか?

rdf:IDhttp://whatever/file.owl#something相対URLは、OWLファイルのベースURLを使用して、などの完全な絶対URLに展開されます。ベースURLがファイルで明示的に指定されていない場合(のようなものを使用xml:base="http://whatever/file.owl")、Webサーバー(またはローカルファイルをロードする場合はファイルシステム内)上のファイルの場所がベースURIとして使用されます。

したがって、ファイルを移動したり、複数の場所にコピーがある場合は、ファイル内のURIが変更されるため、それに応じてSPARQLクエリを変更する必要があります。

明示的なを含めるxml:baseか、相対URIとを回避するとrdf:ID、問題が解決するはずです。

于 2010-07-01T21:39:10.193 に答える
1

これはProtegeのバグ(または機能?)が原因のようです。推測されたオントロジーを新しい名前でエクスポートすると、Protegeは新しいファイルの名前xmlns(blank)xml:baseの定義を変更しましたが、実際の名前空間の定義は変更されませんでした。

xmlns="http://xyz.com/helloOwl.owl" =>  xmlns="http://xyz.com/helloOwlInferred.owl"
xml:base="http://xyz.com/helloOwl.owl" =>  xml:base="http://xyz.com/helloOwlInferred.owl"

xmlns:helloOwl="http://xyz.com/helloOwl.owl" =>  xml:base="http://xyz.com/helloOwl.owl"
<!ENTITY helloOwl "http://wxyz.com/helloOwl.owl#" > => <!ENTITY helloOwl "http://wxyz.com/helloOwl.owl#" >

私はそれがうまくいくように見えることを修正したので。
私のせいで、実際の情報源を必要な注意を払って調べていませんでした。

于 2010-07-02T08:49:11.693 に答える
1

プレフィックスとQNameの全体的な考え方は、URIを圧縮してスペースを節約し、読みやすさを向上させることです。これらの最も一般的な問題は、定義自体またはQNameのスペルミスです。

クエリで使用しているプレフィックス定義が原因で、オントロジーのプロパティの実際のURIと一致しないURIが生成されている可能性があります。

とはいえ、あなたの問題はイエナの問題が原因である可能性があるため、イエナのメーリングリストで質問する価値があるかもしれません。

于 2010-06-30T14:08:32.390 に答える
0

の正確なURIプレフィックスを定義し、ho:それをProtegéに伝える必要があります(名前空間のパネルがあり、オントロジープレフィックスと同じURIを定義します)。これにより、ProtegéでGoodPersonを定義すると、つまりhttp://www.flatlandfarm.de/fhtw/ontologies/2010/5/22/helloOwl.owl#GoodPersonho:GoodPerson2つに同じURIプレフィックスを使用した場合のみと同じです。

そうしないと、Protegé(またはWebサーバーなどの他のコンポーネント)が、オントロジーのURIとそのデフォルトのURIプレフィックス(指定しない場合にGoodPersonの前に表示されるプレフィックス)を作成するなど、これらのばかげた処理を実行します。ファイル名(またはさらに悪いことに、file:/// home / user / ...のようなURI)を使用するプレフィックス)。

オントロジーのURIは、オントロジー自体に関連付けられたエンティティ(クラス、プロパティなど)に使用するURIのプレフィックスとは技術的に異なり、ho:ファイルなどのドキュメントで定義する内容に応じて、ローカルな意味を持つショートカットにすぎないことを忘れないでください。またはSPARQLクエリ。

オントロジーURIは、オントロジーファイルをフェッチできるURLとは異なる場合もありますが、同じにするのは良いことです。通常、これを実現するには、ApacheでURLの書き換えを試す必要がありますが、オントロジーがSPARQLエンドポイントにロードされ、そのURIがエンドポイントの助けを借りてRDFドキュメントに解決されるため、オントロジーファイルが物理的に公開されない場合がありますそれ自体、オントロジーURIをDESCRIBEステートメントを発行するSPARQLリクエストに書き換えることによって。関連するデータがSPARQLエンドポイントからアクセス可能である(つまり、トリプルストアにある)限り、同じトリックを使用して他のURI(つまり、オントロジーインスタンス化データ)を解決できます。

于 2018-08-23T16:00:57.930 に答える