【问题标题】:Transfering OWL data from client to server using GWT使用 GWT 将 OWL 数据从客户端传输到服务器
【发布时间】:2012-02-10 02:46:43
【问题描述】:

我正在开发一个使用 GWT 开发的 Web 应用程序。我还在使用 OWL 本体和 Jena 框架来构建应用程序中的语义内容。

应用程序中的一个简单功能是从用户那里获取一些数据并将其发送到服务器端以使用本体存储为数据图。我想一种方法是将数据存储为等效于本体类的 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! }

很遗憾,我找不到任何可以将现有个体添加到模型中的 Jena 函数。

您是否建议另一种方法将本体数据传递到服务器端并存储它,而不是使用 Jastor 创建的类(例如使用 XML 文件)?

感谢您的帮助

【问题讨论】:

    标签: gwt jena owl


    【解决方案1】:

    答案分为两部分。首先,Individual 是 Jena Resource 的子类,绝对可以添加到模型中。但是,单个资源、属性或文字不会存储在 Model 中。 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,因此建议可能对您没有任何用处。

    【讨论】:

    • 非常感谢您亲爱的伊恩,我将根据您非常有帮助的回答尝试找到解决问题的方法。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多