2010-03-09 7 views
1

В моем текущем проекте у нас есть большой репозиторий контента, который был первоначально опубликован в форме книги. Большая часть этого контента была опубликована как на английском, так и на многих иностранных языках, используя в основном Quark Express и позже InDesign. Этот контент был экспортирован в пользовательскую структуру XML для хранения и использования в будущем. Проблема заключается в том, что английский 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

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

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

+0

Это звучит очень интересно для меня. Какие внешние данные вы передаете в преобразование? Я не уверен, что следую этой части вашего ответа. –

+0

@TimC: вы могли бы передать много разных вещей, если хотите. Я только упоминаю об этом, потому что вы говорите, что в вашем текущем процессе используются «C#, ASP.Net, Linq to XML и JQuery». Я думал, вы можете использовать их, потому что вам нужны дополнительные данные, прежде чем вы сможете обрабатывать XML. Например, если вам понадобится одна или несколько таблиц поиска, прежде чем вы сможете запустить преобразование, вы можете передать таблицы поиска в виде XML-документов, на которые можно ссылаться во время преобразования. –

Смежные вопросы