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补丁?
答案 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的某些功能。
除非将相同的补丁程序应用于其他数据存储中的内容,否则进行转换可能不会带来太大好处。
希望使用