3

我正在为数据库表生成 RDF。我使用 Protégé 为表生成了 OWL 本体。我想使用这个 OWL 本体并使用 Jena 为表数据创建 RDF/XML 格式的 RDF。我知道如何将 RDF 和 OWL 文件读写到内存中以生成 Models,并且我知道如何使用 Resource、Property、ModelFactory 等类来生成 RDF。我无法做的是使用我生成的本体(OWL 文件)并为那些 OWL 类创建 RDF 实例。例如:

示例猫头鹰:

<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>
4

2 回答 2

7

你想要的是一个所谓的 RDB2RDF 映射器。例如,尝试D2RQ,一个基于 Java 的 RDB2RDF 映射器。

免责声明:我是 W3C RDB2RDF工作组的联合主席,我的工作组为 D2RQ 的开发做出了重大贡献——还有许多其他可用各种语言的实现。

于 2012-02-16T06:05:56.697 回答
2

您想要的输出和您现在创建的输出之间的唯一区别是存在三元组: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>

当您序列化模型时。

于 2013-06-20T16:17:31.377 回答