从XML规范模型返回JSON的策略



我使用的是信封模式,我的规范模型部分是XML格式的。我通常会完整或以摘要版本返回模型。文档的检索非常快,但当作为REST调用的一部分返回时,我需要将JSON返回到浏览器,我的JSON:转换为JSON需要两倍于仅返回XML的调用版本。

是否有一种策略是在信封中也使用JSON格式的规范模型,或者在信封外的其他文档中以完整和摘要格式呈现JSON,这些文档不会被搜索,但主要用于返回结果?这样,我就不必一直将规范模型转换为JSON。

还有其他方法可以做到这一点吗?

从XML到JSON的转换应该相对较轻,但它必须做一些事情这一事实会占用开销。提前做好这项工作肯定会节省时间。您可以将这两种格式放在同一个信封中(尽管JSON必须存储为字符串),也可以按照您的建议放在不同的文档中。或者,您也可以将其存储在文档属性中。不幸的是,这只需要XML,所以您也将把JSON作为字符串存储在其中。

或者,您是否对转换进行了分析,看看它是否有减缓速度的特殊原因?使用XSLT和XQuery进行转换也会有所不同。。

啊!

json:transform-to-json有3种算法针对不同目的进行了优化,并将在灵活性、保真度和性能方面进行不同的权衡
"basic"(默认值)仅对反转json:transform-from-json()有用"完整"-在许多情况下,为了保持尽可能多的信息保真度,以换取非"prety"格式。"自定义"-是。。。风俗当json格式是固定的,或者当您希望以精确处理XML子集为代价来控制json输出时设计。

基本和完整是最有效的。然而,所有变体都相当复杂,需要完全遍历XML节点树并创建自下而上的JSON对象树。在ML版本8中,这将被转换为本地JSON节点结构。在REST调用中,它将被序列化为文本。

与直接返回xml文档vi-fn:doc("file.xml")相比,转换情况中涉及的操作至少多了2个数量级。对于REST调用中仍占总请求时间一小部分的小文档,特别是如果REST调用本身正在执行复杂的操作,则返回一个小结果。您的用例似乎正好相反——返回xml文档直接绕过几乎所有的XQuery处理,直接从内部发送到输出或分配给变量。

如果这是一个需要优化的重要用例,尤其是在文档可能很大的情况下,那么将它们保存为文本或二进制文件将更快,这将以使用更多存储为代价。如果这只是xml的变体表示,请尝试将文本JSON存储为二进制,因为它不会产生任何索引开销。

否则,如果您需要通过JSON进行查询,那么在ML7中以文本形式存储可以提供简单的单词查询,在ML8中以原生JSON形式存储可以获得结构化查询——两者都具有高效的文本序列化。

最新更新