我目前正在开发一个项目,该项目正在从使用存储在 postgresql 中的 XML 数据迁移到存储在 mongodb 中的 json。
问题是:需要保持一定程度的向后兼容性,但仅仅为了这个用例而维护旧的 postgresql 数据库是不可取的。
正在讨论的解决方案是将这些 xml 文档存储在 json 中,但采用可以转换回 xml 的特殊“旧”格式。该解决方案将允许我们仅使用 mongo 查询这些遗留数据,并为依赖于这种旧格式/数据的遗留系统提供 xml 中的“原始”文档。
大多数文档来自旧的第三方系统,目前“按原样”存储和提供,没有任何修改。这些文档按模式分组并通过 SOAP API 提供服务。我们无法以二进制或文本格式存储这些文档,因为 API 允许一些次要的过滤功能,使用自定义查询语法(为消费者记录)并使用文档属性进行过滤。我们已经开发了一种将此查询语法转换为 mongo 查询的方法。
我们最初尝试使用 xslt,为每个 xml 模式创建 2 个 xslt 文件,一个用于“xml 到 json”,一个用于“json 到 xml”,虽然这个解决方案乍一看很可靠,但当它遇到一些数据时,它就变得脆弱了。没有严格的模式。
随着多种边缘情况的出现,我们不再单独关注每个模式,而是探索制作一个“json 模式”,它可以存储 xml 可以存储的所有属性,保留名称空间前缀等信息(我们在相同的文档),属性,子元素,如果 xml 元素是自关闭的或具有打开和关闭标签等。
所以我的问题是:是否有一个标准(如 RFC 或常用模式)将 xml 无损转换为 json,这样就可以在不丢失信息的情况下转换回 xml?或者这是每个人都推出自己的解决方案的情况之一?
提前致谢
我要发布“愚蠢”的答案,因为这似乎有效。
Xml 有序列化为字符串的标准,json 可以存储字符串。
这是一个 xml
<?xml version="1.0" encoding="UTF-8"?>
<element attribute="value">
<childElement>
</childElement>
</element>
这是一个无损捕获它的json
{
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<element attribute=\"value\"> \r\n <childElement> \r\n <\/childElement> \r\n<\/element>"
}
这里缺少的部分是我怀疑你需要“查询”mongo 中的文档(我对此一无所知)。如果您知道这些搜索的性质,那么您可以将相关信息提取到另一个 JSON 字段中,该字段捕获该信息,并允许此搜索语言对元数据/摘要 json 进行操作,但从原始字符串中提取数据,然后这似乎是可行的。如果这些查询的性质是开放式的,那么我认为您就有麻烦了,即使您确实有无损 1:1 机制,您也需要对其进行查询,充其量这听起来很困难。