Лучший способ сравнить документы XML? - PullRequest
1 голос
/ 10 марта 2010

В моем текущем проекте у нас есть большой репозиторий контента, который первоначально был опубликован в виде книги. Большая часть этого контента была опубликована как на английском, так и на многих иностранных языках, в основном с использованием Quark Express и более поздних версий InDesign. Этот контент был экспортирован в пользовательскую структуру XML для хранения и использования в будущем. Проблема заключается в том, что английский XML был экспортирован, а затем улучшен как по структуре, так и по метаданным со временем редакторами, которые оставили структуру XML на иностранном языке отличной от английской версии. Например:

Английский XML:

<chapter meta="meta data added">
    <section meta="some meta about the section">
        <paragraph>some english paragraph</paragraph>
        <list>
            <li>some english list item</li>
        </list>
    </section>
</chapter>

Иностранный XML:

<chapter>
    <section>
        <paragraph>some original foreign language paragraph</paragraph>
    </section>
</chapter>

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

Текущий процесс для завершения этого включает извлечение данных элемента и размещение их в веб-приложении. Оттуда я разрешаю пользователю входить и сопоставлять абзац иностранного языка с его английским аналогом (используя Jquery, чтобы они могли просто щелкнуть элемент, а затем сопоставить) и сохранять эти данные как атрибут (по уникальному идентификатору). На этом этапе я знаю, какие элементы совпадают между двумя языковыми документами, и затем я могу передать содержимое на иностранном языке в структурированный английский XML. Это оставляет меня с содержимым на иностранном языке (отмеченным uniqueID) внутри структурированного XML на английском языке, который я могу запрашивать для элементов без уникального идентификатора, чтобы я мог знать, какие элементы необходимо перевести.

Этот процесс работает нормально, однако он довольно ручной, требующий, чтобы кто-то пошел и вручную щелкнул по параграфам. Буквально через сотни тысяч страниц контента, я ищу способы дальнейшей автоматизации процесса. Существуют ли более эффективные способы сравнения XML-документов по структуре, чтобы вышеуказанные цели можно было выполнить с меньшим количеством ручного вмешательства?

Текущий процесс, среди прочего, использует C #, ASP.Net, Linq to XML и Jquery. Но язык и инструменты не имеют значения! Я просто хочу найти более автоматизированное решение. Если он использует БД, нет проблем. Если нам нужно сменить платформу, я не против. Это вопрос реализации, а не языка. Спасибо!

1 Ответ

1 голос
/ 10 марта 2010

В прошлом я использовал XSLT для преобразования двух фрагментов XML в общий формат, прежде чем сравнивать их с помощью инструмента текстового сравнения ( Beyond Compare ).

Это может работать для вас, даже если для преобразования вам требуются внешние данные - вы можете передать внешние данные в XSL-преобразование с помощью класса .NET XslCompiledTransform, где к ним можно получить доступ в качестве параметров преобразования.

...