2つのXSDファイルで構成されるXSDパッケージがあります。たとえば、A.xsdとB.xsdです。スキーマAはBスキーマをインポートします(含まれません)。それらは異なる名前空間を持っています。
でうまく機能しないシステムでこれらのスキーマを使用する必要がありますxsd:imports
。
XSDパッケージを1つだけのXSDファイルでフラット化することは可能ですか、それとも名前空間ごとに1つのXSDファイルを絶対最小にすることはできますか?
各xs:schema
要素には、1 つのターゲット名前空間の宣言のみが含まれます。xs:schema
しかし、それが XML ドキュメントのルート要素でなければならないという仕様の記述はありません。したがって、理論的には、両方のスキーマ要素をラッパー ファイルにラップするだけで済みます。実際には、すべての XSD バリデーターがそれを入力として満足するわけではありません。
[後で追加: 論争の的と思われるので、「1 つの XSD ファイル」とは、XSD を含む 1 つのファイルに含まれる 1 つの XML ドキュメントを意味すると仮定していることを明確に言う必要があります。別の意味がある場合は、説明してください。]
インポートでどのような問題が発生しているのかはわかりませんが、試してみる価値のあることの 1 つはxs:import
、A.xsd の要素からスキーマの場所情報を削除することです (したがって、インポートでは、関連する名前空間ではなく、関連する名前空間の名前が付けられるだけです)。スキーマ ドキュメントの場所)、A.xsd と B.xsd の両方を実行時パラメーターとしてプロセッサに渡します。(すべてではありませんが、ほとんどの XSD プロセッサでは、呼び出し時に読み取り対象のスキーマ ドキュメントを指定できます。引数の順序は重要な場合があるため、最初に機能しない場合は、順序を逆にしてみてください。)
いいえ、できません。XSD ごとに 1 つの名前空間のみを対象にすることができます。どちらかといえば、XSD ごとにルート xs:schema が 1 つだけあり、targetNamespace と呼ばれる属性 (リストではない) が 1 つだけあります。