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

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

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

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

1 ответ

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

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

Другие вопросы по тегам