【问题标题】:Save saxon tiny tree to database将撒克逊小树保存到数据库
【发布时间】:2022-12-10 00:34:40
【问题描述】:
我们的产品目前处理文档,使用 Saxon 在其上运行 xquery/xpath 表达式。为了获得更好的性能,我们希望转而使用 TinyTree 而不是 DOM。
我们有很多涉及将文档保存到数据库的操作,所以想知道将 Saxons Tiny Tree 保存到数据库的最佳方法是什么?这里的用例是将小树从进程的一个实例保存到数据库,并将其加载到另一台机器上运行的另一个实例中。
我们试图找到一种序列化/反序列化小树的方法,但除了 https://saxonica.plan.io/boards/3/topics/4630 上发布的 xml 序列化之外,找不到任何可以跨不同流程实例工作的方法。
还有其他可以节省空间的建议吗?
【问题讨论】:
标签:
database
dom
xml-serialization
saxon
【解决方案1】:
好吧,这取决于数据库。这是 XML 数据库还是关系数据库?通常,您必须将文档序列化为词法 XML,除非所讨论的数据库产品提供了一些其他接口(例如,SAX 或 DOM 或 StAX),在这种情况下,Saxon 具有提供该格式的 TinyTree 的 API。
如果您试图将 XML 从一台机器获取到另一台机器,那么通常序列化和重新解析是执行此操作的方法。我不确定数据库是从哪里来的。
请注意,您引用的论坛帖子已有 17 年历史,而且情况有所改变……不过,架构并没有太大变化。
如果空间是您主要关心的问题,您可能会查看 EXI(或其他二进制 XML 表示)。它们总是提供 SAX 到二进制和二进制到 SAX 的接口,因此它们很容易与 Saxon 集成。
要将 XML 从 TinyTree 中提取到提供 SAX ContentHandler 接口的东西中,请使用 Processor.writeXdmValue(node, destination),其中 node 是包装 TinyTree 的 XdmNode,destination 是包装提供的 @ 的 SAXDestination 987654327@。