Home   Single Page

ZUML ページで XML 出力を生成するための 3 つのステップ

  1. XML コンポーネント セット (http://www.zkoss.org/2007/xml) を使用します。

  2. ファイル 拡張を ZK ローダーにマッピングします。

  3. ファイル 拡張を XML コンポーネント セットにマッピングします。

XML コンポーネントセット (http://www.zkoss.org/2007/xml) を使用する

XML 出力を生成するのに XML コンポーネント セット (aka., the XML language, in ZK terminology)が使用されます。XUL もしくは XHTML コンポーネント セットと違い、ZUML ページの全ての不明なタグ[61]はエクセプションをスローするよりは、ネィティブ ネームスペース (http://www.zkoss.org/2005/native) とみなされます。ZK はそれらに対して ZK コンポーネントをインスタンス化せず、直接出力します。

次はSVG 出力のサンプルです。 zscript、EL 表記、 macro コンポーネントとその他の ZK 機能を使用できることを除けば、XML 出力とたいへん似ています。

<?page contentType="image/svg+xml;charset=UTF-8"?>

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:z="http://www.zkoss.org/2005/zk">
    <z:zscript><![CDATA[    
    String[] bgnds = {"purple", "blue", "yellow"};    
    int[] rads = {30, 25, 20};    
    ]]></z:zscript>    
    <circle style="fill:${each}" z:forEach="${bgnds}"    
        cx="${50+rads[forEachStatus.index]}"        
        cy="${20+rads[forEachStatus.index]}"        
        r="${rads[forEachStatus.index]}"/>        
</svg> 

生成された出力は

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" version="1.1">
<circle style="fill:purple" cx="80" cy="50" r="30">
</circle>
<circle style="fill:blue" cx="75" cy="45" r="25">
</circle>
<circle style="fill:yellow" cx="70" cy="40" r="20">
</circle>
</svg>

ここで

  • コンテンツタイプはページ ディレクティブで指定されています。SVG については、 image/svg+xml です。xml 処理命令 (<?xml?>) と 出力の DOCTYPE もページ ディレクティブで指定されています。ページ ディレクティブの詳細については Developer's Reference を参照。

  • このサンプルで、 svg や circle のようにネームスペース (http://www.w3.org/2000/svg) に関連する全てのタグは、 ZK ローダーにとっては不明です。それで、それらはネィティブネームスペースに属するとみなされます。それらは各々が ZK コンポーネントにインスタンス化されるのではなく、直接出力されます。「ZUML と XUL コンポーネントセット」章の「ネィティブネームスペース」セクションを参照してください。

  • zscript、 forEach と その他の ZK 特有の機能を使用するには、ZK ネームスペース (http://www.zkoss.org/2005/zk) を指定します。

ファイル 拡張を ZK ローダーにマッピングする

ファイルを ZK ローダー[62]に処理させるには、それを WEB-INF/web.xml 内の ZK ローダーと関連付けます。このサンプルでは、全ての .svg 拡張を持ったファイルを ZK ローダにマッピングします。

<servlet-mapping>
    <servlet-name>zkLoader</servlet-name>    
    <url-pattern>*.svg</url-pattern>    
</servlet-mapping>

ファイル 拡張を XMl コンポーネントにマッピングする

ファイル 拡張が .xml でなければ、それを WEB-INF/zk.xml 内で、明示的に XML コンポーネントセット (aka., the XML language) と関連付けます。このサンプルでは .svg を XML コンポーネントセット にマッピングします。

<language-mapping>
    <language-name>xml</language-name>    
    <extension>svg</extension>    
</language-mapping>

ここで xml は XML コンポーネントセット (http://www.zkoss.org/2007/xml) の言語ネームです。
こうして、 ZK ローダーが .svg 拡張を持つファイルをパースするとき、それはデフォルト言語が XML コンポーネントセットであることを知っています。



[61] 不明なタグとは、ネームスペースと関連付けされていないタグかネームスペースが不明である場合を意味します。

[62] ZK ローダー (zkLoader) が org.zkoss.zk.ui.http.DHtmlLayoutServlet にマッピングされていることとみなします。