アノテーションはZUMLページの中でコンポーネントとプロパティの宣言に適用できます。それらにアノテーションを付加する方法は二つあります。従来の方法とシンプルな方法です。どちらを使うかは好みの問題です。また、それらをミックスして使用することもできます。
アノテーションは付加したい要素の宣言の前にあります。:
<window xmlns:a="http://www.zkoss.org/2005/zk/annotation"> <vbox> <a:author name="John Magic" date="3/17/2006"/> <listbox> </listbox> ...
アノテーションは http://www.zkoss.org/2005/zk/annotation ネーム空間の中の要素です。要素名と属性はプログラマーが使うツールによって何でも可能です。同一のコンポーネント宣言に複数のアノテーションを付加することができます。
<a:author name="John Magic"/> <a:editor name="Mary White" date="4/11/2006"/> <listbox/>
ここでは、author と editor がアノテーションの名前で、名前と日付が属性名です。つまり、アノテーションは名前と属性のマップから成り立っています。
宣言をアノテートしているアノテーションは同じ名前を持っている場合、マージすることができます。たとえば、
<a:define var1="auto"/> <a:define var2="123"/> <listbox/>
上は以下と同様です。
<a:define var1="auto" var2="123"/> <listbox/>
【メモ】: アノテーションではEL表記は使えません。
プロパティ宣言に注釈をつけるには、アノテーションを以下に示すようにプロパティの宣言の前におきます。
<listitem a:bind="datasource='author',name='name'" value="${author.name}"/>
また、attribute要素を使用して、コンポーネント宣言と同様の形で、プロパティの宣言に注釈をつけることもできます。つまり、上のアノテーションは以下と同様の働きをします。
<listitem> <a:bind datasource="author" name="name"/> <attribute name="value">${author.name}</attribute> </listitem>
【メモ】:アノテーションの属性名が省略される場合、その名前はvalueと想定されます。たとえば、
<listitem a:bind="value='selected'" value=""/>
上は以下と同様です。
<listitem a:bind="selected" value=""/>
上に説明したように、特定のXMLネーム空間を使用してアノテーションを付加するほかに、もう一つプロパティにアノテーションを付加するシンプルな方法があります。以下に示すように、アノテーションを付加するプロパティにアノテーション表記を使用して値を指定します。
<listitem label="@{bind(datasource='author',selected)}"/>
アノテーションのフォーマットは@{annot-name(attr-name1=attr-value1,attr-name2=attr-value2)}です。つまり、プロパティの値がアノテーション表記になっていたら、それは対応するプロパティの値として認識されるのではなく、アノテーションとして認識されます。上の例では、bindと呼ばれるアノテーションはlabelプロパティにアノテーションを付加します。こうして、上の例は以下と同じ働きをします。
<listitem a:bind=" datasource='author',selected" label=""/>
アノテーション名が指定されてない場合、名前は default とみなされます。例えば、以下のコードスニペットはdefaultの名前のついたアノテーションを使ってlabelにアノテーションを付加します。そのアノテーションはひとつの属性を持っていて、その値と名前はそれぞれvalueとselected.nameです。
<listitem label="@{selected.name}"/>
つまり、上は以下のコードスニペットと同様です。
<listitem label="@{default(value='selected.name')}"/>
【メモ】:以下に示すように、同一のプロパティに複数のアノテーションををつけられます。
<listitem label="@{ann1(selected.name) ann2(attr2a='attr2a',attr2b)}"/>