-テンプレートのピュア度(2)

まず、HTMLテンプレートに動的機能を直接埋め込む際の詳細について、そのHTML仕様およびテンプレートがXHTMLの場合のXHTML仕様への齟齬について言及していきます。

<html xmlns:m="http://maya.seasar.org"
         xmlns:c="http://java.sun.com/jsp/jstl/core">
  <body>
    <p>
      <span m:inject="c:out" c:value="Hello">bye</span>
    </p>
  </body>
</html>

まず、HTMLには名前空間概念がないので仕様的には「xmlns:m="〜"」といった名前空間の宣言は許されていません。また、spanタグに記述されているような「m:inject="〜"」などの仕組みも許されていません。しかし、WEBブラウザ等のツールでは仕様外の属性についてレンダリング上、無視するように実装されていますので、デザインの再現性においてはなんら阻害するものではありません。HTML仕様に許されない記述を行いたくない場合には、HTMLテンプレートと.mayaファイルによるデザイン-ロジック分離を行ってください。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
         xmlns:m="http://maya.seasar.org"
         xmlns:c="http://java.sun.com/jsp/jstl/core">
  <body>
    <p>
      <span m:inject="c:out" c:value="Hello">bye</span>
    </p>
  </body>
</html>

XHTML documents are XML conforming.」とXHTML1.0仕様冒頭にまず書かれているとおり、XHTMLは完全にXML仕様の上位に構築されています。つまり、XHTMLはその仕様において明確に規定してない事項についてはXMLの仕様が遵守されるのです。XHTMLXML名前空間仕様に関して制限的に規定している項目は、デフォルト名前空間(xmlns="〜"により宣言される名前空間)が「http://www.w3.org/1999/xhtml」の値を取ることです。ほかに制限するものはありません。よって、XHTMLにおいて用いるxmlns:m="〜"などの名前空間宣言はXHTML仕様に適合する記述方法です。また、その宣言された名前空間を属性に用いることもXHTMLにおいて制限されていません。。。と思うんだよね。