我正在为数据库表生成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>
答案 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>
序列化模型时。