-XML仕様のピュア度(2)

<c:out value="Hello">bye</c:out>

HTMLテンプレート、.mayaファイル問わず、上記のように書かれた場合、Mayaはそのvalue属性のようにプレフィックスを省略されたものについては独自の解釈を行います。本来のXML名前空間仕様によると、valueは名前空間なしです。これは「デフォルト名前空間は属性には適用されない」というXML名前空間の仕様がありますので、たとえ文書のデフォルト名前空間を指定していたとしても、その名前空間は適用されません。たとえばXHTMLでは「http://www.w3.org/1999/xhtml」というURIをデフォルト名前空間に適用しますが、上記例のvalue属性はこの名前空間には属しません。
しかし、Mayaはこのvalueは、エレメントの属する名前空間「c」にプレフィックスされるものに属すると解釈します。つまり上記例は、

<c:out c:value="Hello">bye</c:out>

と記述されたものと等価です。さらには、エレメントの名前空間も省略時に独自解釈する機能があります。

<span m:inject="c:out" c:value="Hello">bye</span>

とあったとき、spanエレメントは、XHTMLならばデフォルト名前空間の「http://www.w3.org/1999/xhtml」に属するでしょう。また、XMLならばその定義された値が適用されます。しかし、デフォルト名前空間の宣言を省略した場合が問題です。MayaはHTMLテンプレートにおいてデフォルト名前空間を省略されると「http://www.w3.org/TR/html4」というURIを、.mayaファイルにおいてデフォルト名前空間が省略されると「http://maya.seasar.org」が補完されます。よって、

<element id="element1" qName="br"/>

.mayaファイルに上記記述がされたとき、

<m:element m:id="element1" m:qName="br"/>

と記述された場合と等価となります。属性の名前空間は.mayaファイルなので「http://maya.seasar.org(サンプルの場合、大抵m:にマッピング)」になるため、m:elementとなり、idやqNameは所属するエレメントの名前空間が適用され、m:idおよびm:qNameになります。