2

xml-Schema と名前空間を使用して xml ドキュメントを検証する場合、インスタンス ドキュメントは、名前空間自体を宣言するだけでなく、それを修飾する名前空間を前に付けたグローバル要素を持つ必要があります。

この場合、要素を修飾するにはデフォルトの名前空間で十分だと考える人もいるかもしれませんが、xml-Schema には明らかに別の意見があります。

何故ですか?xml-Schema が対処できないデフォルトの名前空間についてはどうですか?

4

1 に答える 1

1

これは、カメレオンの名前空間をサポートし、カメレオンコンポーネントの名前の衝突を回避するための設計によるものだと思います。つまり、namsepaceを提供しないことで、デフォルトでカメレオンのデザインになります。ただし、デフォルトのnamspaceとしてtargetNamspaceを指定しないと、問題とエラーが発生します。

注:XFront.comから抜粋した一部のコンテンツ

集合的に開発された一連のスキーマ設計ガイドライン

一般的なルールは次のとおりです。名前空間のないスキーマを除いて、すべてのXMLスキーマは少なくとも2つの名前空間(targetNamespaceとXMLSchema名前空間)を使用します。これらの2つの名前空間の処理に関して、スキーマを設計する方法は3つあります。

  1. XMLSchemaをデフォルトの名前空間にし、targetNamespace内のコンポーネントへのすべての参照を明示的に修飾します。

  2. 逆も同様です。targetNamespaceをデフォルトの名前空間にし、XMLSchema名前空間のすべてのコンポーネントを明示的に修飾します。

  3. デフォルトの名前空間を使用しないでください-targetNamespace内のコンポーネントへの参照を明示的に修飾し、XMLSchema名前空間からのすべてのコンポーネントを明示的に修飾します。

どのアプローチが正しいかに関しては、実際にはベストプラクティスはありません。主に、それはすべて設計者次第です。

ただし、私の調査では、次のことがわかりました。-スキーマの構築に使用されるコンポーネント(スキーマ、要素、complexType、シーケンスなど)の修飾は、修飾子が常に同じであるため、通常、混乱の原因にはなりません。つまり、人々はxsd:schema、xsd:elementなどを見ることに慣れています。

  • 一方、targetNamespacesはスキーマ間で大きく異なる場合があります。その結果、生成される可能性のある名前空間プレフィックスは大きく異なる可能性があります。たとえば、lib:Book、boston:subwayなどです。この変動性は、しばしば混乱の原因になります。

これがあなたの質問に答えることを願っています。

于 2010-07-28T15:45:09.477 に答える