0

WHERE句の関連データがLinkedOpenDataクラウドにあるという基準に基づいて、ローカルのHibernate管理対象データストアに永続オブジェクトを照会する必要があります。

HibernateセッションをRDFとして読み取る方法はありますか?その場合、少なくとも結合されたデータセットを使用して、Hibernateから取得するオブジェクトを決定できます。

できれば、このソリューションは、私が精通しているように、Hibernateセッションをイエナの内部として公開することをお勧めします。さらに、検索のためにRDFS推論とSPARQLのサポートが必要になります。

4

2 に答える 2

1

Jena(およびARQ)を使用してSPARQLクエリを実行するため、カスタムを使用しFileManagerてHibernateオブジェクト/グラフを解決できます(各オブジェクトをグラフで表すと仮定します)。

Jenaは、を使用してモデルを見つける方法について簡単に説明しています。ARQRDFデータセットチュートリアル(「データセットの説明」セクションを参照)では、グラフURI(およびそれらのグラフの内容)のよりカスタマイズされたマッピングを行う方法についてヒントが得られる場合があります。 RDFデータセットとして)既存のHibernate管理データに。FileManager

別のオプションは、既存のHibernateスキーマにマップするカスタムSDBレイアウトを作成することです。この点でSDBがどれほど柔軟かはわかりません。

于 2009-08-05T17:04:39.433 に答える
0

質問を投稿してから私が見つけたものは次のとおりです。

Hibernateセッションを具体的に3倍にする既存のツールはありません。自分で実装するには、おそらくGraphBaseをベースとして、またはStageGeneratorを使用してGraphを実装する必要があります。したがって、質問に対する答えは「1つではない」ということなので、それをどのように実装するかを検討しました。

すでにセッションにあるオブジェクトを3倍にする(つまり、以前のクエリによってすでにアクセスされている)か、データベースへのアクセスに依存するか、またはその両方を行うかを決定する必要があります。データベースにアクセスする場合は、オブジェクト全体をロードしてセッションにアタッチするか、プロジェクションを使用して追加のラウンドトリップを犠牲にしてヒープに追加のデータを取り込むのを節約するかを決定する必要もあります。

グラフの使用は、推論をサポートするために明らかに不可欠ですが、ARQのStageGeneratorを使用するよりも遅くなります。これは、一連のトリプルパターンをクエリできるためです。ただし、これにより、常に少し柔軟性がないように見えるSPARQLを使用することが不可欠になります。

これまでのところ、最適なソリューションは次のように見えます。

  • (おそらく読み取り専用の)グラフを実装します-「HibernateGraph」と言います
  • HibernateGraphにHibernatePersistenceContextオブジェクトを検査させ、カスタムイテレーターの先頭でトリプルを返します。
  • イテレータの有効期限が切れると、Criteriaインターフェイスを使用してデータベースからデータのページをロードします。
  • 既知の述語URIを持つクエリの場合、URIを列にマップし、厳密な射影を使用します。それ以外の場合は、オブジェクト全体をロードしてゲッターを反復処理し、ゲッター名をURIにマッピングします。
  • その他の場合は、単純なスキームを使用してマップします。たとえば、各サブジェクトのhttp:// root / url / instances / EntityName/idなど
  • ヘルパーオブジェクトを作成して、カスタムStageGeneratorでSPARQLを実行できるようにします。
  • StageGeneratorは、組み込みのStageGeneratorをラップする必要があります。
  • カスタムステージジェネレーターでは、HibernateGraph以外のグラフに対するクエリを、組み込みのStageGeneratorへのチェーンの上位に渡します。
  • また、最適化されたソリューションがないトリプルパターンのセット、たとえば1つのパターンのセットをスキップします。
  • 最適化されたクエリを実行できる場合は、適切なCriteria関数を実行し、前と同じようにセルごとに結果をトリプルにマップします。

OpExecutorと呼ばれる別のSPIがあり、これはFILTER解決をデータベースにプッシュするのに役立つ可能性があるため、パフォーマンスがさらに向上します。

現時点では、これをサイドプロジェクトとして採用しており、LGPLソフトウェアとしてリリースする可能性があります。

于 2009-08-10T11:08:18.290 に答える