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特性,所以最好使用独立的命名空间。