2

相互に参照できる N 個の XSD ファイルのセットがあります ( を使用include/import/redefine tags)。タスクは、この N 個の XSD ファイルのセットを可能な最小数の M 個の XSD ファイルに変換することです。変換とは、可能な場合はインクルード ファイルを挿入し、参照を解決することなどを意味します。

この機能は、一部の UI XML エディターで正常に動作します。

XML スキーマのフラット化を実行できる無料または商用のライブラリ (ネイティブまたは .NET) はありますか? または、平坦化アルゴリズムへの言及がいくつかありますか?

4

1 に答える 1

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

同様の方法でインポートと再定義を処理できるはずです。

于 2012-12-04T23:07:14.220 に答える