Существует набор из N XSD-файлов, которые могут ссылаться друг на друга (с include/import/redefine tags
). Задача состоит в том, чтобы преобразовать этот набор из N XSD-файлов в минимально возможное количество M XSD-файлов. Преобразование подразумевает вставку включенных файлов, где это возможно, разрешение ссылок и т. Д.
Эта функция успешно работает в некоторых редакторах XML пользовательского интерфейса.
Существует ли какая-либо бесплатная или коммерческая библиотека (нативная или .NET), которая позволяет выполнять выравнивание XML-схемы? Или, может быть, есть ссылки на алгоритм выравнивания?
Я не думаю, что вам нужна библиотека. Используя стандартные классы схемы .NET, это код, который преобразует XSD с кучей включений в один:
static private void ResolveExternal(
XmlSchema rootSchema,
XmlSchema curSchema,
List<string> processed
)
{
// Loop on all the includes
foreach (XmlSchemaExternal external in curSchema.Includes) {
// Avoid processing twice the same include file
if (!processed.Contains(external.SchemaLocation)) {
processed.Add(external.SchemaLocation);
XmlSchema cur = external.Schema;
// Recursive calls to handle includes inside the include
ResolveExternal(rootSchema, cur, processed);
// Move the items from the included schema to the root one
foreach (XmlSchemaObject item in cur.Items) {
rootSchema.Items.Add(item);
}
}
}
curSchema.Includes.Clear();
} // ResolveExternal
static public void ResolveExternal(XmlSchema schema)
{
List<string> processed = new List<string>();
ResolveExternal(schema, schema, processed);
} // ResolveExternal
Вы должны иметь возможность обрабатывать импорт и переопределять его аналогичным образом.
Других решений пока нет …