jena http://dbpedia.org/page/Black_Sabbathのsparqlを使用して、次のdbpediaリンクでプロパティジャンルの値を取得しようとしています。
しかし、dbpedia(私の例ではdbpedia-owl .genre)からプロパティの名前空間を取得する方法がわかりません。ハードコーディングしたくありません。誰かが私を助けてくれますか...
どうもありがとう
jena http://dbpedia.org/page/Black_Sabbathのsparqlを使用して、次のdbpediaリンクでプロパティジャンルの値を取得しようとしています。
しかし、dbpedia(私の例ではdbpedia-owl .genre)からプロパティの名前空間を取得する方法がわかりません。ハードコーディングしたくありません。誰かが私を助けてくれますか...
どうもありがとう
最初の質問では、オントロジーで使用される識別子URIからJava定数のコレクションを自動的に生成するJenaschemagenのようなものが必要だと思います。ただし、DbPedia OWLスキーマはかなり大きいため、schemagenは有用な結果を生成しない可能性があると思います(私は試していません)。その場合は、いつでも関心のあるリソースとプロパティのサブセットを選択し、そのサブセットでschemagenを実行できます。
ただし、緯度などの他のプロパティの使用について話している説明コメントでは、別の質問をしていると思います。つまり、特定のプロパティがSPARQLクエリにハードコードされないようにする方法です。これがあなたにとって問題であるかどうかは、あなたが解決しようとしている問題とあなたのコードのアーキテクチャに完全に依存します。プログラムが多くのSPARQLクエリ文字列を維持し、特定のジョブに必要な文字列を選択することは完全に可能です。これは一般的な使用パターンです。
ただし、一般的なクエリ文字列(たとえば)を取得しselect * where {?s ?p "foo"}
て、変数の1つが特定の値に事前にバインドされていることを確認する正当なユースケースがあります。文字列操作でこれを行うことは可能ですが、よりエレガントな方法があります。たとえば、上記のクエリを取得?p
し、プロパティdc:creator
に事前にバインドするには、次のようにします。
String q = "select * where {?s ?p \"foo\"}";
QuerySolutionMap qsm = new QuerySolutionMap();
qsm.bind( "p", DC.creator );
Query query = QueryFactory.create( q );
QueryExecution exec = QueryExecutionFactory.create( query, model, qsm );
ResultSet rs = exec.execSelect();
追加情報については、このブログ投稿またはJavaDocも参照してください。