ドキュメント型定義 (DTD) では、名前空間のサポートが複雑になります。 たとえば、次の XML には、名前にコロンを含む既定の属性が含まれています。
<!ATTLIST item x:id CDATA #IMPLIED>
このコンストラクトが許可されている場合の解決策を次に示します。
x:
は名前空間プレフィックスとして扱われますが、このプレフィックスは、DTD 内のどこかに存在する必要があるxmlns:x
名前空間宣言を使用して解決できる必要があります。 このプレフィックスをインスタンス ドキュメント内の別のものにマップするとエラーになります。x:
は名前空間プレフィックスとして扱われますが、このプレフィックスは常にインスタンス要素のコンテキストで解決されます。 つまり、プレフィックスは、item
要素が表示される名前空間スコープに応じて、実際には異なる名前空間 Uniform Resource Identifier (URI) にマップされる可能性があります。 この動作は、前の行頭文字で指定された解像度よりも予測可能ですが、既定の属性を具体化する必要があるため、他の複雑な影響があります。コロンは DTD 内にあり、属性の名前は
x:y
、プレフィックスなし、名前空間 URI がないため、無視されます。デフォルト属性のコロンは、DTD 内の名前にコロンが含まれているとサポートされていないという例外を引き起こします。 これにより、予測可能な動作になりますが、World Wide Web Consortium (W3C) で公開されている DTD の多くを読み込むことができないことを意味します。
ユーザーが DTD 検証を要求すると、ドキュメント全体に対する名前空間のサポートが無効になります。 これにより、W3C DTD を読み込み、予測可能な動作になります。
Microsoft .NET Framework の XML には、W3C の互換性を最大にするための 2 番目のオプションが実装されています。
こちらも参照ください
.NET