使用Jena在RDF文件中创建嵌套标记

时间:2011-03-25 16:16:37

标签: java xml rdf jena

我是Jena的新手,现在我遇到了以下问题。 基本上我需要创建一个具有嵌套元素的RDF,例如:

<rdf:description about="http://www.acme.com">
    <dc:country>
      <dc:capital>London</dc:capital>
      <dc:language>English</dc:language>  
    <dc:country>
</rdf:description>

也许这是微不足道的,但我无法做到这一点。我已经阅读了几个教程,但没有关于这种元素的例子。 有人可以在java中为我提供一个能够产生这种输出的工作示例吗?

非常感谢提前!

1 个答案:

答案 0 :(得分:3)

您没有说明如何生成输出,但最可能的解释是您使用的是默认输出格式RDF/XML。相反,如果你打电话

yourModel.write( outStream, "RDF/XML-ABBREV" );

您将获得一个更紧凑的结构,根据您的示例,它很可能包含嵌套元素。

然而,有一个'然而'。

您没有说明为什么“需要创建具有嵌套元素的RDF”。 Jena生成的所有输出在RDF三元组级别上在语义上是等效的。任何兼容的RDF处理器将通过解析序列化为RDF / XML,缩写与否,Turtle,n-triples等的模型来生成相同的模型。因此,如果您将输出交给另一个RDF流程,则无论是否您的输出是否具有嵌套结构。

但是,如果您希望将输出提供给XML工具链,那么这可能会更加困难。 RDF XML编码非常复杂。此外,Jena XML编写器不保证按特定顺序序列化元素。根据您正在编写的Model的内容,XML结构可能看起来完全不同。例如,这可能会使XSLT样式表变得棘手。

如果您计划将RDF XML传输到XML工具链中,我建议您创建一个自定义编写器,以XML工具可以依赖的格式生成可靠的输出,或者使用SPARQL查询模型并使用XML编码SPARQL结果集的输入作为XML管道的输入。 SPARQL的XML encoding比完整的RDF / XML更常规,是后续XML处理的更好基础。