2009-07-27 52 views
0

我需要根據WHERE子句的相關數據位於鏈接開放數據雲中的條件來查詢本地Hibernate託管數據存儲以獲取持久化對象。有沒有辦法像RDF三元組一樣讀取Hibernate Session?

有沒有辦法將RDF作爲RDF讀取?如果是這樣,我至少可以使用組合數據集來決定從Hibernate中檢索哪些對象。

最好的解決方案會像我熟悉的那樣,在Jena內部展示Hibernate Session。另外,我需要支持RDFS推理和SPARQL進行檢索。

+0

當你說「查詢你的本地數據存儲」時,你的意思是Hibernate將執行查詢,或者你的意思是你希望Jena對原始數據執行查詢(並通過鏈接數據獲取RDF來加入數據) ? SQL或SPARQL中是否存在WHERE子句? – 2009-08-04 05:43:45

+0

我希望WHERE子句是用SPARQL編寫的,所以Jena會負責。 – 2009-08-04 13:55:09

回答

0

這裏是因爲發佈什麼的問題,我發現:

有專門triplify Hibernate的Session沒有現成的工具。爲了實現我自己,我需要實現Graph或許使用GraphBase作爲基礎,或StageGenerator。因此,問題的答案是「沒有一個」,所以我繼續考慮如何實現它。

我需要決定是否對會話中已存在的對象進行升級(即已經被一些較早的查詢訪問過),依靠訪問數據庫或者同時執行這兩個操作。如果進入數據庫,我還需要決定是否加載整個對象,然後將其附加到會話中,或者使用投影來節省額外的數據到堆中,從而增加往返次數。

使用圖表對於支持推理來說顯然非常重要,儘管它比使用ARQs StageGenerator慢,因爲它可以查詢一組三重模式,但是這使得總是使用SPARQL非常重要,這似乎有點不靈活。

到目前爲止,最佳的解決方案似乎是:

  • 實現(可能是隻讀) 圖 - 說「HibernateGraph」
  • 有無HibernateGraph檢查 休眠PersistenceContext對象 並返回三倍在 自定義迭代器的頭部。
  • 當迭代器使用 條件接口從數據庫中加載頁面 到期時。
  • 對於具有已知謂詞 URI的URI映射到一列並使用 緊投影查詢,否則加載 整個對象和迭代 吸氣劑,映射吸氣名稱到 URI。
  • 在其他情況下,使用簡單的方案來映射,例如每個主題的http://root/url/instances/EntityName/id
  • 創建幫助對象以允許 SPARQL使用自定義 StageGenerator執行。
  • StageGenerator應包裝內置於StageGenerator中的 。
  • 在自定義階段生成器中通過 查詢除了 之外的其他圖表,HibernateGraph向上創建了StageGenerator中的 。
  • 也跳過任何一組三重模式 ,沒有優化 解決方案,例如任何一組模式。
  • 凡優化的查詢可以是 實現,運行適當的 標準的功能和細胞通過細胞映射 結果作爲三元組之前 。

還有一個叫做OpExecutor的SPI可能有助於將FILTER分辨率推入數據庫,從而進一步提高性能。

目前我已將此作爲一個側面項目,我可能將其作爲LGPL軟件發佈。

1

由於您將使用Jena(和ARQ)來執行SPARQL查詢,因此您可以使用自定義的FileManager來解析Hibernate對象/圖形(假設您希望每個對象都由圖表表示)。

耶拿對使用FileManager定位機型short HOWTO,和ARQ RDF dataset tutorial(見「描述數據集」一節),可給予一定的提示如何做圖形URI的更加個性化的映射(以及那些內容圖表作爲RDF數據集)映射到您現有的Hibernate管理的數據。

另一種選擇可能是創建映射到您現有的Hibernate架構的自定義SDB layout。我不知道在這方面SDB有多靈活。

相關問題