1

我有一个本体,我和 Jena 一起阅读了它,以帮助我从网站上抓取一些 RDFa 三元组。我目前没有将这些三元组存储在 Jena 模型中,但这很简单,它在我的下一个列表中。

不过,我正在努力的领域是让 Jena 为我拥有的本体输出正确的 RDF。本体使用 Owl 和 RDFS 定义,但是当我将一些示例三元组传递给模型时,它们显示不正确。几乎就好像它对本体一无所知。然而,输出仍然是有效的 RDF,只是它没有以我希望的形式出现。

我是否认为 Jena 应该能够根据本体生成关于我收集的三元组的编写良好的 RDF(不仅仅是有效的),或者这是否扩展了它的能力?

非常感谢您的任何意见。

更新 1

例子:

这是我们目前拥有的:

<rdf:Description rdf:about='http://theinternet.com/%3fq=Club/325'>
        <j.0:hasName>Manchester United</j.0:hasName>
       <j.0:hasPlayer>
             <rdf:Description rdf:about='http://theinternet.com/%3fq=player/291/'>
             </rdf:Description>
       </j.0:hasPlayer>
       <j.0:hasEmblem>http://theinternet.com/images/manutd.jpg</j.0:hasEmblem>
       <j.0:hasWebsite>http://www.manutd.com/</j.0:hasWebsite>
</rdf:Description>

</rdf:RDF>

这就是我们理想中想要的:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
      xmlns:owl="http://www.w3.org/2002/07/owl#"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
      xmlns:ontology="http://theinternet.com/ontology.rdf#">

<rdf:Description rdf:about='http://theinternet.com/%3fq=Club/325'>
<rdf:type rdf:resource='ontology:Club' />
       <ontology:hasName>Manchester United</ontology:hasName>
       <ontology:hasPlayer>
             <rdf:Description rdf:about='http://theinternet.com/%3fq=player/291/'>
                 <rdf:type rdf:resource='ontology:Player' />
             </rdf:Description>
       </ontology:hasPlayer>
       <ontology:hasEmblem>http://theinternet.com/images/manutd.jpg</ontology:hasEmblem>
       <ontology:hasWebsite>http://www.manutd.com/</ontology:hasWebsite>
</rdf:Description>

</rdf:RDF>

在我看来,Jena 似乎缺少与本体有关的东西,例如资源类型等。我有这种感觉,我错误地使用了 Jena。

4

2 回答 2

5

如果您想要编写良好的 rdf(我假设是 xml),请使用RDF/XML-ABBREVwriter。默认值通常很好,但是您会在此处找到调整说明

如果没有问题输出的示例,很难知道您的问题是什么。你看到类似的东西<j.0:SomeClass>吗?那是前缀问题。如果它们是在原始 RDFa 文档中定义的,那么您已经以某种方式丢失了它们,但它应该很容易修复。否则,您可以使用PrefixMappingModel扩展)中的方法在模型上手动设置它们。

更新的答案

谢谢你的例子。前缀是这里的主要问题。

model.setNsPrefix("ontology", "http://theinternet.com/ontology.rdf#");
model.setNsPrefix("dc",   DC_11.NS);
model.setNsPrefix("owl",  OWL.NS);
model.setNsPrefix("rdfs", RDFS.NS);
model.setNsPrefix("xsd",  XSD.NS);

DC_11.NS 等人耶拿词汇包中定义)

注意rdf:resource(like rdf:about) 需要一个完整的 URI,所以

<rdf:type rdf:resource='ontology:Club' />

不起作用。使用该showDoctypeDeclaration 选项将使用 XML 实体进行缩写。

顺便说一句,您使用了哪个 RDFa 解析器?前缀定义应该通过。

于 2010-05-18T23:08:18.613 回答
1

您缺少 rdf:type 属性,因为您没有加载任何包含所需 rdfs:domain 或 rdfs:range 语句的本体,而且我认为您没有使用任何推理器来进行这些推断。

您可以将域或范围语句与其余数据一起加载,或者 jena 具有在看到和 owl:imports 语句时自动加载本体的功能。我建议前者保持简单。

此处记录的 jena RdfsInferencer http://jena.sourceforge.net/inference/将执行您想要的推理。

顺便说一句,我发现 sesame 比 jena 更容易使用并且比 jena 更容易用于大规模的东西,尽管刮几个三倍都可以。

bbtw,Turtle(N3 的一个子集)比 RDF/XML容易阅读和编辑。非常值得学习。在过去的 3 年里,我一直在使用 rdf,现在在处理任何原始数据之前将所有 RDF/XML 转换为 Turtle(尽管我确实有一个很好的工具,它可以以有用的顺序编写所有内容并自动插入反向引用注释等。 )

祝你好运

于 2010-05-27T14:15:23.120 回答