2009-08-05 2 views
4

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

  1. Делают «XML» диф двух схемы для идентификации добавлены/удалены/изменены узлы.

  2. Позвольте нам указать функции преобразования. Так, например, мы могли бы добавить новый элемент в нашу схему, которая является функцией старых элементов. (Например, новый элемент C, где C = A + B, A + B - старые элементы).

Поэтому я считаю, что я ищу своего рода инструмент для разграничения и исправления XML, который также может применять функции преобразования. Один инструмент, который я ищу для этого, - Altova's MapForce. Я уверен, что другим здесь пришлось иметь дело с миграцией формата XML-данных. Как ты с этим справился?

Редактировать: Один пункт уточнения. «Diff», который я планирую сделать, - это файлы схемы или .xsd. Фактические изменения будут внесены в конкретные наборы данных, которые следуют данной схеме. Этими наборами данных будут .xml-файлы. Таким образом, это «diff» схемы, чтобы помочь выяснить, какие изменения необходимо внести в набор данных, чтобы перенести их из одной схемы в другую.

+0

Вы искали «инструмент для разграничения и исправления XML»? –

+0

Да, я читал о нескольких инструментах разграничения и исправления XML, но ни один из них не делает то, что я описывал выше. –

ответ

5

«Сделайте« разницу XML »двух схем, чтобы идентифицировать добавленные/удаленные/измененные узлы».

XSD - это текст, поэтому это тривиально.

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

Если вы делаете небольшие, косметические изменения в XSD, это может быть полезно.

"Позвольте нам указать функции преобразования ..."

не было бы хорошо. К сожалению, шансы на то, что происходят некоторые тривиальные изменения («новый элемент C, где C = A + B, A + B - старые элементы»), почти равны нулю. Зачем делать подобные тривиальные изменения?

Нет, когда вы «... распространяете наш продукт тысячам клиентов», вы не делаете тривиальных, косметических изменений. Вы сохраняете изменения, чтобы они были действительно эпическими и «создавали значительную ценность».

Нет, шансы на автоматическую миграцию схемы почти равны нулю.

Вместо этого дизайн для переносимости.

  1. Убедитесь, что номер версии является заметным в ваших дорожках XSD. В идеале, в самом XSD-названии.

  2. Каждое изменение XSD является серьезным вопросом управления (SGI ™). Каждый участвует. И вы пишете сценарии миграции прямо там и там. Не позже. Не с инструментами. Но в рамках изменения XSD.

    Схема не спонтанно меняется. Кто-то изменяет их по какой-то причине. Чтобы кто-то мог указать изменения, чтобы кто-то другой мог написать (или обновить) сценарий миграции.

Это далеко, слишком серьезно, чтобы доверять «автоматизированным» инструментам. Это требует реальных мозгов реальных людей, которые действительно фокусируются на этом, как будто их работа зависит от него.

+0

Просто в стороне: XSD - это текст, но есть некоторые незначительные отличия, которые может получить текст diff (например, whitespace, choice/all order). Лучше сказать, что «XSD - это XML, поэтому используйте XML diff». Однако это, вероятно, не проблема на практике, потому что, поскольку они представляют собой разные версии одной и той же схемы (и, надеюсь, единственные изменения были значительными). – 13ren

+0

S. Lott делает здесь несколько отличных моментов, но может помочь автоматизированный инструмент. Мой опыт в таких преобразованиях происходит из-за изменений схемы базы данных. Я согласен с тем, что внесение изменений следует воспринимать всерьез. В мире баз данных это обычно сводится к: 1. Добавление/удаление/изменение столбцов или таблиц. 2. Иногда записывается процедура SQL для сопоставления старых данных с новыми данными. Шаг 1 может быть автоматизирован через базу данных diff - инструменты могут это сделать. Шаг 2 нуждается в программировании. Я ищу инструмент XML, который поможет с шагом 1, который также может принимать более сложные преобразования (например, XSLT) по мере необходимости. –

+0

@Corwin Joy: Не тратьте время на автоматизацию добавления/изменения/удаления столбцов. На практике этого не будет достаточно часто. Изменения схемы - серьезный бизнес и требуют серьезных ручных процессов, чтобы * понять * * значение * за изменениями. –

0

Как @ S.Lott говорит, возможность автоматизации преобразований маловероятна. Однако XSLT - это фантастический инструмент для формального определения того, как преобразовать XML из одного формата в другой. Он не может быть автоматически сгенерирован (насколько я знаю), но это стоит делать так.

3

В итоге я написал инструмент для этого и опубликовал результат как проект SourceForge.

Что: Этот инструмент позволяет создавать скрипты для переноса данных XML из одной версии схемы XML для более поздней версии одной и той же схеме. Инструмент создает эти сценарии, изменяя файлы XSD и испуская XSLT 2.0 для автоматической миграции данных XML. Это хорошо работает для простых изменений данных и может использоваться как «стартовый» код для более сложных изменений данных.

Где: https://sourceforge.net/projects/xsdevolver/

Справочная информация: Компания Я работаю продает упаковали приложение, в котором мы сохранить книгу в формате XML в соответствии с заданной схемой XSD. Со временем мы ожидаем изменения формата этой схемы. Мы хотели, чтобы мы помогли нам развернуть версии схемы, поскольку они развиваются с течением времени и генерируют начальный XSLT для переноса данных из более старых версий схемы в более новые версии схемы.

Использование:

XMLSchemaEvolver SchemaVersion1.xsd SchemaVersion2.xsd

Выход:

  1. Схема дифференциала показывает, какие элементы были изменены

  2. XSLT для переводить XML-данные из Schem aVersion1 к SchemaVersion2

Как это работает?

Основная идея заключается в следующем:

1) Выполните диф из двух XML-схемы() файлы XSD.

2) Каждое изменение классифицируется как операция INSERT, DELETE, MOVE или RENAME.

3) Для каждой из этих операций испускайте простой XSLT для выполнения требуемого изменения данных.

4) Эти операции по изменению данных моделируются после набора стандартных операций XSLT, предложенных Йеспером Тверсковым link text.Полный список преобразований, испускаемых нашим кодом, можно найти в XSLT Transformations.txt в папке документации.

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

  • Нет связанных вопросов^_^