Передача данных OWL с клиента на сервер с использованием GWT - PullRequest
1 голос
/ 14 января 2012

Я работаю над веб-приложением, которое разрабатывается с использованием GWT. Я также использую онтологии OWL и инфраструктуру Jena для структурирования семантического содержимого в приложении.

Простая функция в приложении будет получать некоторые данные от пользователя и отправлять их на серверную часть для сохранения в виде графа данных с использованием онтологии. Я полагаю, что одним из способов было бы сохранить данные в виде объектов классов Java, эквивалентных классам онтологии, и отправить их, используя асинхронную связь GWT. Чтобы преобразовать OWL-классы в Java, я использовал Jastor.

Мой вопрос заключается в том, что после того, как сервер получит класс java, можно ли легко преобразовать его в отдельного OWL и добавить его в граф данных, используя функции Jena и / или Jastor? Например, в реализации интерфейса на стороне сервера мы называем что-то вроде этого:

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)?

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 18 января 2012

Ответ состоит из двух частей. Во-первых, Individual - это подкласс Jena Resource, который определенно можно добавить в модель. Однако отдельные ресурсы, свойства или литералы не хранятся в Model. A Model хранит только тройки, представленные как Statement объекты в Java API. Таким образом, чтобы добавить некоторый ресурс в модель, вы должны включить его в тройку.

В Йене индивидуум определяется как субъект тройки, предикат которой равен 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, так что совет может быть бесполезен для вас.

...