2017-06-13 30 views
1

私は、XMLを使用してXMLファイルで働いている:langは、今、誰かが代わりにこれを私にファイルを送信:別の名前空間接頭辞のxml名前空間を使用していますか?

<element xmlns:ns1="xml" ns1:lang="fr" /> 

私はこれはこれに等しいとして扱うべきでしょうか?

<element xml:lang="fr" /> 

xml:langが必要な場合は、ファイルを無効として扱うべきですか?最初の場合、XSDのxml名前空間のこの「プロキシ」を取得できますか?

答えて

1

あなたが与える2つの例は同等ではありません。名前空間はURIであり、要素や属性の完全修飾名を定義するためにこのようなURIを接頭辞にバインドすることができます。 URIは既存のリソースを指す必要はなく、XMLプロセッサはURIの解決を何らかの形で行い、そうでなければ属性値の正規化とは別に正規表現を作成することは期待されていません。確かに、ネームスペースは実際には大文字小文字を区別する文字列ではありませんが、URIは単にそれらの表現として選択されています。言い換えれば

、この

<element xmlns:ns1="xml" ns1:lang="fr" /> 

は、(法的なURI参照されていない)名前空間接頭辞xmlns1をバインドします。 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に詳しく説明します。

1

背景:xml:lang attributeはコロン(:)の使用にもかかわらず、XML名前空間に依存することなく、W3C XML勧告で定義されています。 W3CのXML名前空間の推奨では、xml接頭辞(およびxmlで始まるすべての名前空間接頭辞)はdeclared to be reservedです。 xml接頭辞自体は自動的にhttp://www.w3.org/XML/1998/namespaceにバインドされるように定義されています。

したがって、xml:lang="fr"は完全に適切であり、xml名前空間接頭辞の宣言なしで使用できます。xmlという名前空間接頭辞を宣言したい場合は、xmlns:xml=http://www.w3.org/XML/1998/namespaceとなります。

さらに、xmlns:ns1="xml" ns1:lang="fr"は、名前空間プレフィックス宣言が推移的に割り当てられることを意味することによって、名前空間プレフィックス宣言の誤解を示唆している。彼らがすることはできません。

だから

<element xmlns:ns1="xml" ns1:lang="fr" /> 

整形well-formed vs validを参照)、それは

<element xml:lang="fr" /> 
と等価ではありません
関連する問題