ZK 用户界面标记语言(ZUML)是基于XML的。每一个XML元素描述了要创建的组件。一个XML属性描述了被创建组件的初始值。一个XML处理指令(processing instruction)如何处理整个页面,如页面的标题。
不同的组件集通过XML命名空间来区分。例如,XUL的命名空间为
http://www.zkoss.org/2005/zul
[34],而XHTML的命名空间为
http://www.w3.org/1999/xhtml
。
这一章节提供了和ZK一起工作的XML的最基本概念,如果内很熟悉XML,可以跳过这一章节。如果你想学习更多,在网络上有很多资源,如
http://www.w3schools.com/xml/xml_whatis.asp
和
http://www.xml.com/pub/a/98/10/guide0.html
。
XML是一种标记语言,就像HTML,但是有更严格和简洁(cleaner)的语法,有几点需要特别注意。
首先,每个元素必须关闭。有两种元素来关闭一元素,就像下面描述的一样,它们是等价的。
描述 |
代码 |
---|---|
通过一个结束标签关闭: |
<window><window/> |
不通过一个结束标签关闭: |
<window/> |
其次, 元素要被正确的嵌套(nested)。
结果 |
代码 |
---|---|
正确: |
<window> <groupbox> Hello World! </groupbox> </window>
|
错误: |
<window> <groupbox> Hello World! </window> </groupbox>
|
XML使用<element-name
>来表示一个元素,所以你必须替换特殊的字符。
例如,你必须使用<
表示<
。
特殊字符 |
替换字符 |
---|---|
< |
|
|
|
|
|
|
|
|
|
另外,你可以使用CDATA
来使XML解析器不要解释其内的文本,如下:
<zscript> <![CDATA[ void myfunc(int a, int b) { if (a < 0 && b > 0) { //do something } ]]> </zscript>
有意思的是反斜杠(\)不是特殊字符,所以你不需要担心。
注释通常被用于留下一个说明或暂时便基出一部分XML源码(leave a note or to temporarily edit out a portion of XML code)。
<window> <!-- this is a comment and ignored by ZK --> </window>
尽管是可选定的,但在你的XML中指定编码是个好主意,这样XML解析器可以正确的解释文本。
注意:它必须被放置在文件的第一行。
<?xml version="1.0" encoding="UTF-8"?>
除了指定正确的编码,同时也要确保你的XML编辑器支持这种编码。
命名空间是区分XML文档中用到名字的一个简单易懂的办法。ZK使用XML命名空间来区分组件名称。这样,只要不在同一个命名空间,两个组件有相同的名字是可以的。ZK使用XML命名空间来表现一个组件集。这样,开发人员可以在同一个页面内混合使用两个或多个组件集,如下所示
<html xmlns:="http://www.w3.org/1999/xhtml" xmlns:x="http://www.zkoss.org/2005/zul" xmlns:zk="http://www.zkoss.org/2005/zk"> <head> <title>ZHTMLDemo</title> </head> <body> <h1>ZHTML Demo</h1> <table> <tr> <td><x:textbox/></td> <td><x:button label="Now" zk:onClick="addItem()"/></td> </tr> </table> <zk:zscript> void addItem() { } </zk:zscript> </body> </html>
在这里
xmlns:x="
http://www.zkoss.org/2005/zul
"
指定一个称为ttp://www.zkoss.org/2005/zul
的命名空间,并且使用x来呈现这个命名空间。
xmlns:="http://www.w3.org/1999/xhtml"
指定一个称为
http://www.w3.org/1999/xhtml
的命名空间,且使用它作为默认的命名空间。
<html
> 从默认的命名空间中指定一个称为 html 的元素,在这个例子中也就是 http://www.w3.org/1999/xhtml
。
<
x:textbox/>
从http://www.zkoss.org/2005/zul
命名空间中指定一个称为textbox 的元素。
许多IDE,如Ecipse,支持自动完成,如果XML schema被按如下方式指定。
<window xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
除了可以从http://www.zkoss.org/2005/zul/zul.xsd
下载到,可以在ZK的binary 发行版中的dist/xsd
目录找到zul.xsd
。
[34] 被称为 http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul。但是,添加了许多非XUL特性,所以最好使用独立的命名空间。