3-сторонний алгоритм слияния XML

Я хочу иметь возможность выполнить трехстороннее слияние документов XHTML:

  • Начните с оригинальной копии документа
  • Один пользователь редактирует копию оригинального документа
  • Другой пользователь редактирует отдельную копию исходного документа.
  • Необходим инструмент для слияния (автоматически и/или визуально) изменений, сделанных двумя пользователями.

Примечание:

  • Я хочу включить эту функциональность в коммерческое программное обеспечение: поэтому я предпочитаю что-то, что бесплатно, как в пиве и/или с открытым исходным кодом, вместо коммерческого инструмента.
  • Я подозреваю, что лучше, если инструмент известен от XML, чем пытаться использовать такое ПО, как diff3, которое реализует трехстороннее слияние плоского текста
  • Учитывая, что все три входных документа являются действительными документами XHTML, результирующий выходной документ должен также проверять

Инструменты, которые я нашел, включают:

Первый из вышеперечисленных (т.е. "3DM" ) явно говорит о том, что он реализует трехсторонние слияния.

Я не знаю о двух других: "diff", за которым следует "patch", эквивалентен трехстороннему слиянию или вместо этого "patch" может только повторно применить diff к исходному файлу (а не к третья, измененная копия файла)

Можете ли вы порекомендовать какое-либо программное обеспечение (из списка выше или в другом месте) для этой цели и/или описание алгоритма слияния?


Изменить: Совместимость, различение и слияние XML - еще одна статья 2008 года, в которой содержится краткий обзор различных алгоритмов и ссылок на различные реализации.


Изменить № 2: автор подтвердил, что Fuego Core XML Diff и Patch Tool может только исправлять исходный файл и не выполнять трехстороннее слияние.

Ответ 1

Я могу добавить в вашу коллекцию DeltaXML - они не претендуют на diff3, но заслуживают рассмотрения.

Ответ 2

У меня нет бесплатного решения, я боюсь, но Project: Merge - это дешевый инструмент сравнения и слияния XML, который можно управлять через командную строку. Возможно, он подключится к вашему приложению.

Ответ 3

Одной из бесплатных альтернатив было бы сделать

$ xmlstarlet fo before.xml > before.xml
$ xmlstarlet fo after.xml > after.xml

а затем do

$ diff before.xml after.xml

чтобы создать патч разницы XML. Это бесплатно и просто.