Трехсторонний алгоритм слияния XML - PullRequest
12 голосов
/ 08 февраля 2010

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

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

Примечание:

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

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

  1. Трехсторонний инструмент для слияния и дифференцирования XML "3DM"
  2. Инструмент различий и исправлений Fuego Core XML
  3. XmlDiff (в последнее время с сайта GotDotNet, который был закрыт, но, возможно, он живет как компонент XML Notepad )

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

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

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


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


Редактировать # 2: Автор подтвердил, что инструмент различий и исправлений Fuego Core XML может только пропатчить исходный файл и не реализует трехстороннее объединение.

Ответы [ 3 ]

3 голосов
/ 31 августа 2010

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

3 голосов
/ 08 февраля 2010

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

1 голос
/ 21 августа 2012

Одна бесплатная альтернатива будет делать

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

и затем

$ diff before.xml after.xml

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

...