【发布时间】:2020-11-28 14:54:05
【问题描述】:
我正在尝试在URDNA2015 algorithm 之后进行一些图形规范化。
如果我理解规范,空白节点应该有像 _:c14nX 这样的标签,其中 X 是递增计数器。
我可以生成一个包含带有这些标签的空白节点的图形,但是当将图形序列化为 NTRIPLES 时,这些图形会通过执行一些编码的 NodeFmtLib#encodeBNodeLabel 运行——至少总是在结果节点前加上“B”。例如 c14n92 -> Bc14n92 或 _:c14n92 -> BX5FX3Ac14n92 由于十六进制编码。
我的序列化代码目前非常基础:
StringWriter sw = new StringWriter();
RDFDataMgr.write(sw, normalizedGraph, Lang.NTRIPLES);
更好地控制此序列化的建议方法是什么?
编辑: 我发现一种可行的方法,但我不确定它是否是推荐的方法:
RDFWriterRegistry.register(RDFFormat.NTRIPLES_UTF8, new CustomWriterGraphRIOTFactory());
然后实现一个覆盖的类链:
- WriterGraphRIOTFactory
- NTriplesWriter
- StreamRDFLib
- WriterStreamRDFPlain
- 节点格式化程序
最终到达覆盖 formatBNode 的位置:
public class CustomNodeFormatter extends NodeFormatterNT {
public CustomNodeFormatter(CharSpace charSpace) {
super(charSpace);
}
@Override
public void formatBNode(AWriter w, String label) {
w.print(label);
}
}
【问题讨论】:
标签: jena