XML コンポーネント セット (http://www.zkoss.org/2007/xml) を使用します。
ファイル 拡張を ZK ローダーにマッピングします。
ファイル 拡張を 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 ローダー[62]に処理させるには、それを WEB-INF/web.xml 内の ZK ローダーと関連付けます。このサンプルでは、全ての .svg 拡張を持ったファイルを ZK ローダにマッピングします。
<servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>*.svg</url-pattern> </servlet-mapping>
ファイル 拡張が .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 コンポーネントセットであることを知っています。