Мой подход к этому состоял в том, чтобы канонизировать представление XML-схемы.
К сожалению, я также могу сказать вам, что, в отличие от канонизации XML-документов (используемых, например, для вычисления цифровой подписи), он не так прост или даже стандартизирован.
Таким образом, по сути, вы должны преобразовать обе XML-схемы в «каноническую форму» - какой бы инструмент вы ни строили или использовали, думает, что это форма, а затем выполнить сравнение.
Мой подход состоял в том, чтобы создать набор схем XML (может быть больше, чем один файл, если у вас есть больше пространств имен) для каждого корневого элемента, который мне нужен, поскольку мне было проще сравнивать XSD, созданные в стиле Russian Doll, начиная с Модель ПСВИ.
Затем я использовал такие опции, как автоматическое сопоставление членов группы замещения в сочетании с заменой групп замещения на выбор; удаление «лишних» последовательностей XML-схем, свертывание выбора из одного параметра или перемещение minOccurs / maxOccurs вокруг для композиторов с одним элементом и т. д.
В зависимости от возможностей вашего инструмента сравнения с XSD, или вы решите построить, вам также может понадобиться переставить частицы в таких композиторах, как xsd: choice или xsd: all; и т. д.
В любом случае, после всего этого я узнал, что чрезвычайно сложно создать инструмент, который бы хорошо работал для всех «крутых» функций XSD… Один из тестовых примеров, который я с любовью помню, был связан с различными xsd : любой контент.
Интересно, изменились ли вещи с тех пор ...