あなたが与える2つの例は同等ではありません。名前空間はURIであり、要素や属性の完全修飾名を定義するためにこのようなURIを接頭辞にバインドすることができます。 URIは既存のリソースを指す必要はなく、XMLプロセッサはURIの解決を何らかの形で行い、そうでなければ属性値の正規化とは別に正規表現を作成することは期待されていません。確かに、ネームスペースは実際には大文字小文字を区別する文字列ではありませんが、URIは単にそれらの表現として選択されています。言い換えれば
、この
<element xmlns:ns1="xml" ns1:lang="fr" />
は、(法的なURI参照されていない)名前空間接頭辞xml
にns1
をバインドします。 lang
属性は、ns1
という接頭辞で修飾されているため、名前空間xml
になります。
なぜ、これは2番目の例と同じではありませんか?
<element xml:lang="fr" />
にxml
はプレフィックス、ない名前空間ですので。この接頭辞は、specification regarding reserved prefixes and namespace namesに従って名前空間http://www.w3.org/XML/1998/namespace
に暗黙的にバインドされています。
xml
という接頭辞を他の名前空間にバインドすることはできません(意味があります)が、他の名前空間にも同じ名前空間をバインドすることはできません接頭辞(あまり意味はありませんが、いくつかのXML処理の最適化と前提条件があります)。
結論として、属性が存在しないため、xml:lang
属性が必要な場合は、最初の入力を無効として扱う必要があります。そのファイルを構築した人は誰でもXML名前空間を理解できませんでした。
私はコンセプトin this answerに詳しく説明します。