c # — библиотеки для уплощения схемы XML

Существует набор из N XSD-файлов, которые могут ссылаться друг на друга (с include/import/redefine tags). Задача состоит в том, чтобы преобразовать этот набор из N XSD-файлов в минимально возможное количество M XSD-файлов. Преобразование подразумевает вставку включенных файлов, где это возможно, разрешение ссылок и т. Д.

Эта функция успешно работает в некоторых редакторах XML пользовательского интерфейса.

Существует ли какая-либо бесплатная или коммерческая библиотека (нативная или .NET), которая позволяет выполнять выравнивание XML-схемы? Или, может быть, есть ссылки на алгоритм выравнивания?

2

Решение

Я не думаю, что вам нужна библиотека. Используя стандартные классы схемы .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

Вы должны иметь возможность обрабатывать импорт и переопределять его аналогичным образом.

2

Другие решения

Других решений пока нет …