2012-01-13 67 views
1

我正在研究使用GWT開發的Web應用程序。我也使用OWL本體和Jena框架來構造應用程序中的語義內容。使用GWT將OWL數據從客戶端傳輸到服務器

應用程序中的一個簡單功能是從用戶那裏獲取一些數據並將其發送到服務器端,以使用本體存儲爲數據圖。我想一種方法是將數據存儲爲等同於本體類的java類對象,並使用GWT異步通信發送它們。爲了將OWL類轉換爲java,我使用了Jastor。

我的問題是,在服務器接收到java類之後,是否可以使用Jena和/或Jastor的函數輕鬆轉換爲OWL個體並將其添加到數據圖中?比如在服務器端接口實現我們所說的是這樣的:

Public void StoreUser (User userObj) { 
    //User: a Jastor created java class. userObj is instantiated using the user data on the client side. 

    OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); 
    //Open the ontology here using inputstream and ontModel.read! 

    Individual indiv = (Individual) userObj.resource(); 

    //Add the individual to the model here! } 

遺憾的是我沒能找到任何耶拿功能可以將現有的個人添加到模型。

你會提出另一種方法將本體數據傳遞給服務器端並存儲它,而不是使用Jastor創建的類(例如使用XML文件)?

感謝您的幫助

回答

2

答案有兩部分。首先,Individual是Jena Resource的一個子類,這絕對是您可以添加到模型中的一些東西。但是,單個資源或屬性或文字不存儲在Model中。 A Model僅存儲三元組,在Java API中表示爲Statement對象。因此,爲模型添加一些資源,您必須將其包含在三元組中。

在耶拿,一個人被定義爲一個三元主體,其謂詞是rdf:type,而其對象不是內置的語言類之一。所以,如果您有:

ex:my_car rdf:type ex:Ferrari . 
ex:Ferrari rdf:type owl:Class . 

(注意:這個例子是完全虛構的),然後ex:my_car將是一個個人,而是ex:Ferrari不會(因爲OWL Class是內置型)。因此,要將您的個人添加到您的模型中,您只需要聲明它屬於某種類型。由於我不知道GWT並且不使用Jastor,因此我無法確定在序列化之後是否保留了通常爲Jena Individual的一部分的類型關聯。我懷疑,在這種情況下,您需要有其他方法來確定要添加的個人的類型,或使用與rdf:type不同的謂詞將資源添加到Model

所有這一切說,我個人可能不會以這種方式解決你的問題。通常,當我使用服務器端RDF的客戶端表示形式時,我只向客戶端發送最小信息(例如URI和標籤)作爲JSON。如果我需要關於給定資源的更多數據,我可以將它與最初的JSON序列化一起發送,或者它只是一個Ajax調用。但是,正如我所說的,我不使用GWT,因此建議可能對您沒有任何用處。

+0

非常感謝您親愛的伊恩,我會試着找到解決我的問題的方法,根據您非常有用的答案。再次感謝! – Ehsan 2012-01-19 21:45:33

相關問題