"Выполните" XML diff "из двух схем для идентификации добавленных / удаленных / измененных узлов."
XSD - это текст, так что это тривиально.
Однако, если вы внесете кардинальные структурные изменения в XSD, автоматическое различие будет в значительной степени бесполезным.
Если вы вносите небольшие косметические изменения в XSD, это может быть полезно.
«Разрешить указывать функции преобразования ...»
Разве это не было бы хорошо. К сожалению, вероятность того, что произойдет какое-то тривиальное изменение («новый элемент C, где C = A + B, A + B - старые элементы»), почти равна нулю. Зачем делать такие тривиальные изменения?
Нет, когда вы «... распространяете наш продукт среди тысяч клиентов», вы не делаете тривиальных косметических изменений. Вы сохраняете изменения так, чтобы они были действительно эпическими и «создавали значительную ценность».
Нет, вероятность того, что автоматическая миграция схемы будет почти равна нулю.
Вместо этого дизайн для переносимости.
Убедитесь, что номер версии виден в ваших путях XSD. В идеале в самом имени XSD.
Каждое изменение XSD является серьезной проблемой управления (SGI ™). Все участвуют. И вы пишете сценарии миграции прямо здесь и сейчас. Не после. Не с инструментами. Но как часть изменения XSD.
Схема не меняется спонтанно. Кто-то меняет их по причине. Чтобы кто-то мог указать изменения, чтобы кто-то другой мог написать (или обновить) скрипт миграции.
Это слишком, слишком серьезно, чтобы доверять "автоматизированным" инструментам. Для этого нужны настоящие мозги реальных людей, которые действительно сосредоточены на этом, как если бы их работа зависела от этого.