将JSON补丁转换为MarkLogic JSON补丁规范?

时间:2019-08-15 02:06:58

标签: json marklogic json-patch

MarkLogic PATCH API使用的JSON patch specification与JSON-Path标准(RFC 6902)非常相似,但不完全相同。例如,要将节点添加到以下文档中:

{
  "parent": {
    "child1": "c1-value",
    "child2": "c2-value"
  }
}

MarkLogic补丁:

{
  "insert": {
    "context": "/parent",
    "position": "last-child",
    "content": { "child3": "c3-value" }
  }
}

JSON-Patch标准:

{
  "op": "add",
  "path": "/parent/child3",
  "value": "c3-value"
}

有没有一种方法可以自动将JSON-Patch转换为MarkLogic Patch?我的想法是利用json-patch-gen之类的库来自动生成JSON-Patch操作,并将其转换为MarkLogic补丁以更新MarkLogic中的文档。

或者,是否存在一个JavaScript库可用于通过对两个JavaScript对象进行DIFF处理来自动生成MarkLogic补丁?

1 个答案:

答案 0 :(得分:4)

尽管RFC影响了MarkLogic补丁规范,但RFC的某些规定与MarkLogic不匹配。

  • JSON指针与JSON上的MarkLogic XPaths具有不同的选择语义,例如选择容器数组节点而不是项目节点。 (此外,如果我没记错的话,JSON指针不支持XPath谓词。)

  • 在MarkLogic中的补丁操作必须不相关并且可以按任何顺序应用的情况下,JSON Patch需要顺序转换。如RFC中所述:

      

    序列中的每个操作都将应用于目标文档;的   生成的文档将成为下一个操作的目标。

  • RFC不支持在用户定义的服务器端代码中实现插入或替换操作。

  • MarkLogic补丁规范必须与JSON和XML保持一致。

可以将以JSON补丁RFC语法的子集表示的补丁转换为使用MarkLogic补丁功能的子集的MarkLogic补丁规范。

但是,这种最少公分母的方法会增加成本,为错误创造机会,并放弃MarkLogic的某些功能。

除非将相同的补丁程序应用于其他数据存储中的内容,否则进行转换可能不会带来太大好处。

希望使用