создать RDF с использованием определенной онтологии OWL - PullRequest
2 голосов
/ 15 февраля 2012

Я генерирую RDF для таблиц базы данных. Я сгенерировал онтологию OWL для таблиц, используя Protégé. Я хочу использовать эту OWL-онтологию и создать RDF в формате RDF / XML для табличных данных с использованием Jena. Я знаю, как читать и записывать файлы RDF и OWL в память для генерации моделей, и я знаю, как использовать классы Resource, Property, ModelFactory и т. Д. Для генерации RDF. Что я не могу сделать, так это использовать сгенерированную им онтологию (файл OWL) и создать экземпляры RDF для этих классов (ов) OWL. Например:

образец OWL:

<owl:Class rdf:about="Person"/>
<owl:Class rdf:about="Animal"/>

<owl:DatatypeProperty rdf:about="salary">
    <rdfs:domain rdf:resource="Person"/>
    <rdfs:range rdf:resource="&xsd;real"/>
</owl:DatatypeProperty>

желаемый RDF:

<Person rdf:about="Jack">
  <salary>1234</salary> 
</Person>

Я могу генерировать RDF следующим образом:

<rdf:Description rdf:about="Jack">
  <ns:salary>2004</ns:salary>
</rdf:Description>

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

То, что вы хотите, это так называемый RDB2RDF маппер. Попробуйте, например, D2RQ , маппер RDB2RDF на основе Java.

Отказ от ответственности: я являюсь сопредседателем рабочей группы W3C RDB2RDF , и моя группа вносит большой вклад в разработку D2RQ - существует ряд других реализаций в различных языки также доступны.

1 голос
/ 20 июня 2013

Единственная разница между вашим желаемым выходом и выходом, который вы создаете сейчас, заключается в наличии тройного :Jack rdf:type :Person (и, если вы хотите, определения пространства имен по умолчанию, так что вам не нужен префикс ns:на ваши элементы XML).

Начиная с RDF

<rdf:Description rdf:about="Jack">
  <ns:salary>2004</ns:salary>
</rdf:Description>

и добавляя тройку Jack rdf:type Person, вы получите

<rdf:Description rdf:about="Jack">
  <rdf:type rdf:resource="Person"/>
  <ns:salary>2004</ns:salary>
</rdf:Description>

Спецификация RDF / XML позволяет использовать сокращенную запись дляrdf:type троек;если URI для типа можно замкнуть на имя XML, то его можно использовать в качестве имени элемента.Используя это сокращение, вы получите

<ns:Person rdf:about="Jack">
  <ns:salary>2004</ns:salary>
</ns:Person>

, который является вашим желаемым выводом, если префикс не является действительно важным.Если это так, то вам просто нужно использовать PrefixMapping#setNsPrefix для установки префикса.(Model реализует PrefixMapping.)

model.setNsPrefix( "", "http://yourontologies.com/thisOntology#" );

, и вы получите

<Person rdf:about="Jack">
  <salary>2004</salary>
</Person>

при сериализации модели.

...