4

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

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

MarkLogic 补丁:

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

JSON补丁标准:

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

有没有办法自动将 JSON-Patch 翻译成 MarkLogic Patch?我的想法是利用库,例如json-patch-gen​​自动生成 JSON-Patch 操作并将它们转换为 MarkLogic 补丁来更新 MarkLogic 中的文档。

或者,是否有一个 JavaScript 库可用于通过区分两个 JavaScript 对象来自动生成 MarkLogic 补丁?

4

1 回答 1

5

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

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

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

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

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

  • MarkLogic 补丁规范对于 JSON 和 XML 必须是一致的。

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

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

除非将相同的补丁应用到其他数据存储中的内容,否则要求转换可能没有太多好处。

希望有用,

于 2019-08-15T14:53:24.190 回答