XSLTの話――document函数が使えず惑う

叢をXSLTで管理出来るようにしたいと思い、先づはXSLTを学ぼうと云う事で、少し前に中断していたXSLTの勉強を再開した。前前から持っている智識があるので、或程度の物は直に作れるようになれた。しかし、少し手の込んだ事をしようと思い、document函数を使ったところ、手詰りになった。その時に私が書いたXSLTの断片は以下。

<select name="SearchIndex">
  <xsl:for-each select="document($BaseUrl)//xh:select[@name = 'SearchIndex']/xh:option">
    <option value="[email protected]}">
      <xsl:if test="$SearchIndex = @value">
        <xsl:attribute name="selected">
          <xsl:text>selected</xsl:text>
        </xsl:attribute>
      </xsl:if>
      <xsl:value-of select="text()"/>
    </option>
  </xsl:for-each>
</select>

何の問題もないように思える。實際に私もそう思っていた。しかし、幾ら實行させようとも、期待通りの出力は得られなかった。不審に思い、<xsl:value-of select="document($BaseUrl)"/>と云うXSLTの断片を適當な箇所に書き加え、再度實行させたところ、何も返されなかった。変換させるXSLT文書、変換されるXML文書、document函数で呼ばれるXHTML文章に格別変った點はない。しかし上手く實行されない。document函数で呼ぶ文書をXHTMLではなく、純粋なXMLにすれば、問題なくdocument函数で呼べる。XHTML文書の場合のみ呼べない。先づMIME Typeを疑り、XHTML文書のMIME Typeをapplication/xmlに変更して再度實行してみたが、同様な結果に終った。諦め掛けたが一縷の望みを掛け、XHTML文書のDOCTYPE宣言を取除き、再度實行してみたところ、こちらは期待通りの出力が得られた。

直に解決出来たように思われるだろうが、そのような事はない。半日以上の時を費やし、漸く解決出来たのだ。気附けるだろうか、DOCTYPE宣言を取除けば解決出来ると。何故DOCTYPE宣言があってはならないのか。皆目検討がつかない。そして、納得出来ない。

何故こうなるのかを知りたい。何故こうせねばならないのかを知りたい。

2006-06-26T03:46:39+09:00