我需要创建如下所示的RDF:
<rdf:Description rdf:about='uri1'>
<namespace:level1>
<rdf:Description>
<namespace:blankNode rdf:resource='uri2'/>
<namespace:text></namespace:text>
</rdf:Description>
</namespace:level1>
</rdf:Description>
<rdf:Description rdf:about="uri2">
some properties here
</rdf:Description>
如您所见,有嵌套结构以及空白节点。 (我不知道这是否是我的结构中“blankNode”属性的确切术语。)如果我使用
model.write(System.out, "RDF/XML-ABBREV");
然后甚至空白节点都是嵌套的,这是我不想要的。有没有办法让Jena使用这种结构?或者是否有其他Java库可以更好地处理这个?
答案 0 :(得分:6)
我认为你的方式是错误的。
嵌套是一个在谈论树木时才有意义的概念。但RDF不是关于树木,而是关于三元组。暂时关注XML的结构,并考虑在XML中编码的三元组。我发现model.write(System.out, "N-TRIPLES");
对此最有用。
首先需要了解您希望RDF / XML文件表达的三元组。只要它表达了正确的三元组,一个节点是否嵌套在另一个节点内或者出现的顺序并不重要。这些都是纯粹的“装饰性”问题,如缩进。
答案 1 :(得分:0)
与此同时,在RDF4J中,我发现org.eclipse.rdf4j.rio.rdfxml.util.RDFXMLPrettyWriter
确实可以完成我想要的事情,生成了一个很好的嵌套的,干净的,紧凑的,嵌套配置的RDFXML文档。
虽然我同意@cygri,但通常非常需要(例如在咨询情况下)拥有易于读取的RDFXML,并且Writer经常吐出难以消化的RDF(可能是由于流和内存消耗/速度的优化) )。