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

しかし、Mayaにはこれら状況を破壊するようなUgly仕様があります。

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

これがOK。しかし、これをOKにするためには拡張レゾルバをmaya.confに記述する必要があります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE service
  PUBLIC "-//The Seasar Foundation//DTD Maya Config 1.0//EN"
    "http://maya.seasar.org/dtd/maya-conf_1_0.dtd">
<service>
  <templateBuilder>
    <resolver class="〜略〜.DirectInjectionResolver"/>
  </templateBuilder>
</service>

このように、maya.confにDirectInjectionResolverを登録します。これはデザインとロジックの分離より推奨しない機能ですが、こう書きたい方やこう書かなければならない事情もあるだろうということより実装されている機能です。
この場合、「c」というプレフィックスに対応する名前空間URIが、Sunの定義者の意図に反しないか?という心配はまったくありません。なぜなら、Sunの人はこのURIを「XML名前空間URI」として定義していないからです。思い出してください。JSPにはXML名前空間概念がまったくありません。このURIの使い方は、

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

と書かせる際の、JSPカスタムタグの識別URIであって、記述方法をスキーマ的に定義するものの一部ではありません。また、XML名前空間の仕様ではこの名前空間URI値は仕様として特別に意味をもたせておらず、利用するツールなどで自由に意味づけすることが許されています。Mayaでは、JSPカスタムタグライブラリおよびプロセッサライブラリの指定のためのURIに用いてますが、これはXMLやHTML等の仕様に反するものではないと考えております。