使用定义的 OWL 本体创建 RDF

发布于 2025-01-05 19:02:54 字数 916 浏览 1 评论 0原文

我正在为数据库表生成 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事和酒 2025-01-12 19:02:54

您想要的是所谓的 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.

一城柳絮吹成雪 2025-01-12 19:02:54

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

,当您序列化模型时

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 the ns: prefix on your XML elements).

Starting with your RDF

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

and adding the triple Jack rdf:type Person, you would have

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

The 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 have

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

which 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 implements PrefixMapping.)

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

and you'll get

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

when you serialize the model.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文