使用定义的 OWL 本体创建 RDF
我正在为数据库表生成 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>
I'm generating RDF for a database table(s). I generated OWL ontology for the table(s) using Protégé. I want to use this OWL ontology and create the RDF in RDF/XML format for table data using Jena. I know how to read and write RDF and OWL files into memory to generate Models, and I know how to use Resource, Property, ModelFactory, etc., classes to generate RDF. What I'm unable to do is use the ontology (OWL file) I generated and create the RDF instances for those OWL class(s). For example:
sample 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>
desired RDF:
<Person rdf:about="Jack">
<salary>1234</salary>
</Person>
I'm able to generate RDF like this:
<rdf:Description rdf:about="Jack">
<ns:salary>2004</ns:salary>
</rdf:Description>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您想要的是所谓的 RDB2RDF 映射器。例如,尝试 D2RQ,一个基于 Java 的 RDB2RDF 映射器。
免责声明:我是 W3C RDB2RDF 工作组的联合主席,我的团队为该工作组的开发做出了巨大贡献D2RQ - 还有许多其他各种语言的实现,如下所示: 出色地。
What you want is a so called RDB2RDF mapper. Try D2RQ, a Java-based RDB2RDF mapper, for example.
Disclaimer: I'm co-chair of the W3C RDB2RDF Working Group and my group is heavily contributing to the development of D2RQ - there are a number of other implementations in various languages available as well.
您想要的输出和您现在创建的输出之间的唯一区别是三元组
:Jack rdf:type :Person
的存在(并且,如果您愿意,可以定义默认命名空间,以便您不需要XML 元素上不需要ns:
前缀)。从 RDF 开始
并添加三元组
Jack rdf:type Person
,您将拥有RDF/XML 规范允许使用
rdf:type
三元组的简写符号;如果该类型的 URI 可以缩写为 XML 名称,那么它就可以用作元素名称。使用这个简写,你就得到了你想要的输出,除非前缀真的很重要。如果是,那么您只需要使用
PrefixMapping#setNsPrefix
设置前缀。 (Model
实现PrefixMapping
。)您将得到。
,当您序列化模型时
The only difference between your desired output and the output that you are creating now is the presence of the triple
:Jack rdf:type :Person
(and, if you desire, defining the default namespace so that you don't need thens:
prefix on your XML elements).Starting with your RDF
and adding the triple
Jack rdf:type Person
, you would haveThe RDF/XML specification allows for a shorthand notation for
rdf:type
triples; if the URI for the type can be shorted to an XML name, then it can be used as the element name. Using this shorthand, you havewhich is your desired output, unless the prefix is really important. If it is, then you just need to use
PrefixMapping#setNsPrefix
to set a prefix. (Model
implementsPrefixMapping
.)and you'll get
when you serialize the model.