2004年08月13日
川俣晶の縁側ソフトウェアMagSite1開発日誌 total 3030 count

MagSite1 0.37リリース charsetパラメタ付加忘れとContentTypeの適応拡大

Written By: 川俣 晶連絡先

 MagSite1をVersion 0.37にバージョンアップしました。

charsetパラメタ付加忘れ §

 間抜けな話ですが、httpヘッダーにcharsetパラメタを付けるのを忘れていました。

 では単純にそれを付ければ良いのかというと、それほど簡単な話ではありません。なぜなら、出力に使用するencodingは、XSLT変換のencoding属性で指定され、ModulaFモジュールの外部で変動しうるものだからです。

ContentTypeはtext/htmlに限らない §

 更に考えが発展すると、ContentTypeの指定そのものが一定しない可能性も考えられます。現在は、PC用であろうと、i-mode用であろうと、text/htmlを出力すれば済みますが、あらゆるデバイスが全てtext/htmlで良いとは限りません。将来、思いもよらないデバイス向けのXSLT変換を誰かが書いてくれるためには、これも容易にカスタマイズ可能にする必要があります。

 というわけで、ユーザーエージェントの情報を記述するファイルの中に、ContentTypeの値を全て書き込むアーキテクチャに変更しました。

 たとえば、こんな感じです。ua:contentType要素が、ContentTypeの値として使用されます。

<?xml version="1.0" ?>

<ua:list xmlns:ua=

    "http://http://www.piedey.co.jp/xmlns/modulaf/useragents">

    <!-- i-mode HTML -->

    <ua:item>

        <!-- DoCoMo/で始まる -->

        <ua:rexp>^DoCoMo/</ua:rexp>

        <ua:filename>i-mode_html.xslt</ua:filename>

        <ua:contentType>text/html; charset=Shift_JIS</ua:contentType>

        <ua:divideInvoke>1000</ua:divideInvoke>

        <ua:divideLength>700</ua:divideLength>

        <ua:externalModule>external</ua:externalModule>

        <ua:mayModule>ignore</ua:mayModule>

    </ua:item>

    <!-- PC XHTML -->

    <!-- rexp要素抜きの場合は無条件に決まる -->

    <ua:item>

        <ua:filename>pc_xhtml.xslt</ua:filename>

        <ua:contentType>text/html; charset=utf-8</ua:contentType>

        <ua:divideInvoke>6000</ua:divideInvoke>

        <ua:divideLength>5000</ua:divideLength>

    </ua:item>

</ua:list>

 これを使用する場合、このファイル中のcharsetパラメタの値と、XSLT変換のencoding属性は一致している必要がありますが、滅多に更新しない情報と判断して、特に強制的に連動させる仕組みは用意しませんでした。

入手先 §

 MagSite1 0.37は、MagSiteMan1上からダウンロードできるほか、MagSiteDistシステムよりダウンロードできます。

MagSite1手動ダウンロード

変更点 §

 変更点は以下の通り。

  • systemTransformationSelector.xmlにContentType情報の追加
  • User-Agentヘッダが無いときにArgumentNullExceptionで落ちる (ModulaFモジュールアップデートによる解決)
  • charsetパラメタが付いていない (ModulaFモジュールアップデートによる解決)
  • ModulaFモジュールアップデート

謝辞 §

 charsetパラメタが付かない件をレポートして頂いた、ハシモト@アマガサキさんに、感謝いたします。