Преобразовать JSON-Patch в спецификацию исправления MarkLogic JSON?

спецификация исправления JSON, используемая MarkLogic PATCH API, очень похожа на Стандарт 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 для автоматического создания исправлений MarkLogic путем DIFF-обработки двух объектов JavaScript?


person Fan Li    schedule 15.08.2019    source источник


Ответы (1)


Хотя RFC повлиял на спецификацию исправления MarkLogic, некоторые положения RFC не соответствуют MarkLogic.

  • JSON Pointer имеет другую семантику выбора, чем MarkLogic XPath поверх JSON, например, выбор узлов массива контейнеров вместо узлов элементов. (Кроме того, если я правильно помню, JSON Pointer не поддерживает предикаты XPath.)

  • #P3# <блочная цитата> #P4#
  • RFC не поддерживает реализацию операций вставки или замены в определяемом пользователем коде на стороне сервера.

  • Спецификация исправления MarkLogic должна быть согласована для JSON и XML.

Можно преобразовать исправление, выраженное в подмножестве синтаксиса JSON Patch RFC, в спецификацию исправления MarkLogic, которая использует подмножество возможностей исправления MarkLogic.

Однако такой подход с наименьшим общим знаменателем увеличил бы стоимость, создал возможность для ошибок и лишил бы некоторые возможности MarkLogic.

Если тот же патч не был применен к содержимому в других хранилищах данных, требование преобразования может не принести особой пользы.

Надеясь, что это полезно,

person ehennum    schedule 15.08.2019
comment
Спасибо за понимание. Есть ли способ автоматически генерировать операции исправления MarkLogic либо на основе DIFFing двух объектов JSON, либо путем отслеживания преобразования? - person Fan Li; 15.08.2019
comment
Я не пробовал, но мне интересно, работает ли вывод этой библиотеки (npmjs.com/package /difflib) может предоставить полезную промежуточную структуру для создания исправления. С другой стороны, если доступна полная замена, может быть быстрее и проще перезаписать весь документ. - person ehennum; 16.08.2019
comment
Что касается вашего утверждения, операции исправления в MarkLogic должны быть несвязанными и применяться в любом порядке. Означает ли это, что операции исправления могут применяться в любом порядке или даже параллельно? Я чувствую, что это может быть очень сложно проверить / гарантировать, даже мне пришлось вручную создать набор только минимально запутанных операций исправления. - person Fan Li; 16.08.2019
comment
Операции в запросе исправления могут не зависеть друг от друга. Поддержка исправлений REST API реализована с помощью функций обновления узлов, таких как xdmp.nodeReplace(), и имеет те же правила в отношении конфликтующих обновлений. - person ehennum; 16.08.2019