使用定义的OWL本体创建RDF

时间:2012-02-14 20:15:58

标签: rdf jena owl protege

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

示例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 个答案:

答案 0 :(得分:6)

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

免责声明:我是W3C RDB2RDF工作组的联合主席,我的团队为D2RQ的发展作出了重大贡献 - 还提供了多种其他implementations种语言版本同样。

答案 1 :(得分:1)

您想要的输出和您现在创建的输出之间的唯一区别是存在三:Jack rdf:type :Person(如果您愿意,还可以定义默认命名空间,以便您不需要XML元素上的ns:前缀)。

从您的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>

序列化模型时。