2012-01-13 68 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

相关问题