コンポーネントセットとXMLネーム空間

同ZUMLページ中で二つ以上のコンポーネントセットを同時に使用するために、ZKがXMLネーム空間を使って違うコンポーネットセットを区別します。例えば、XULのネーム空間はhttp://www.zkoss.org/2005/zulでXHTMLのネーム空間はhttp://www.w3.org/1999/xhtmlです。

一方で、ほとんどのページはそれぞれただ一つのコンポーネントセットを使用します。ページを書くことを容易にするために、ZKが拡張子でデフォルトネーム空間を決めます。例えば、xulとzulはXULネーム空間を意味しています。それゆえ、ディベロッパーはZUMLページと適切な拡張子と関連付けることのみをすればOKです。また、XMLネーム空間に気を使うことは必要ありません。

標準的なネーム空間

前に書いたように、どのコンポーネントセットもそれぞれ一つの(唯一の)ネーム空間と関連しています。しかし、ディベロッパーはサードパーティーのコンポーネントを使用したり、発展させたりするかもしれません。ここにZKパッケージにあるネーム空間だけをリストアップします。

Namespace

Description

http://www.zkoss.org/2005/zul

The namespace of the XUL component set.

http://www.w3.org/1999/xhtml

The namespace of the XHTML component set.

http://www.zkoss.org/2005/zk

ZK namespace. It is the reserved namespace for specifying ZK specific elements and attributes.

他の名前と重ならない限り、ZUMLページ中でネーム空間を自分で指定できます。ZKはZUMLページの拡張子によって、どのネーム空間を使うかを決めます。.zul.xul拡張はXULのネーム空間が割り当てられます。htmlxhtmlzhtmlはXHTMLのネーム空間が割り当てられます。

他のマークアップ言語と混在に使うために、xmlnsを使用し、正しいネーム空間を指定しなければいけません。

<window xmlns:h="http://www.w3.org/1999/xhtml">
   <h:div>
      <button/>
   </h:div>
</window>

XHTMLコンポーネント、onClickonChange属性はZKの属性と競合します。解決するためには、確保されたネーム空間http://www.zkoss.org/2005/zkを以下のように使用しなければなりません。

<?taglib uri="/WEB-INF/tld/zk/core.dsp.tld" prefix="u" ?>

<html xmlns:x="http://www.zkoss.org/2005/zul" xmlns:zk="http://www.zkoss.org/2005/zk">
<head>
<title>ZHTML Demo</title>
</head>
<body>
          <script type="text/javascript">    
          function woo() { //running at the browser    
          }    
          </script>    
          <zk:zscript>    
          void addItem() { //running at the server    
          }    
          </zk:zscript>    
      <x:window title="HTML App">
               <input type="button" value="Add Item"    
                 onClick="woo()" zk:onClick="addItem()"/>    
      </x:window>
</body>

この例中では、onClick属性はZHTMLの属性です。ブラウザで動作するJavaScriptコードを指定します。一方で、zk:onClickはZKイベントハンドラを指定するために確保された属性です。

ZHTMLはzscript要素を持たないので、プログラマーがzscript要素にネーム空間のプレフィックスzkを使うかどうか決める事ができます。またZKが十分な情報を持っているのでプレフィックスが無くても判断できます。

コンポーネントセットとは異なったものなのでwindowコンポーネントにはXMLネーム空間を指定しなければなりません。