ZCML (Zope Component Meta-Language) 是Zope3用于配置 utilities, adapters, and views的的xml格式文件。 ZCML 文件通常由一个 <configure /> 根结点开始,包括几个xml名称空间语句,包括Zope核心部件配置,视图和浏览器资源的browser配置,以及为集成Zope2的five配置。
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:browser="http://namespaces.zope.org/browser">
...
</configure>
我们将逐一描述ZCML语句和他们相关的的概念。一个经常用到的重要语句是 <include />. 这个语句用于触发将其他的ZCML语句包括进来,允许管理员在包之间的配置中管理相互依存性;也可以将长的ZCML文件用易管理的方式划分开来。通常的样例如下:
<include package="zope.annotation" />
<include package=".browser" />
<include file="permissions.zcml" />
上述例子中的第一句将引起ZCML分析器处理zope.annotation 包的configure.zcml文件,如果之前没有被处理过。第二句,包括本包中的browser子包,并且查找并分析子包中的configure.zcml文件。第三句,包括当前目录下的一个permissions.zcml文件,允许出现相对路径。
在 Zope启动后,在实例根目录下的etc/site.zcml 先被读取,这将触发调入Five,接着按顺序扫描旧式的产品当中的meta.zcml 和configure.zcml 文件,并且在执行任何overrides.zcml文件之前执行这些文件。meta.zcml文件用于定义新的ZCML语句,通常有Zope3核心的包使用。 overrides.zcml是用于覆盖其他包的configure.zcml 文件设置。通常一个包只有在绝对需要时,才采用overrides.zcml,避免泛用和冲突。 这个 site.zcml文件中包含所有在 $INSTANCE_HOME/etc/package-includes下的以“ -meta.zcml, -configure.zcml, finally-overrides.zcml”等名称结尾的所有文件。这些文件被称之为 ZCML slugs, 这些文件通常包含一行的 <include /> 语句来索引特定的包。注意,configure.zcml 是可以默认被调入,而overrides.zcml文件则需要显式的用下面语句调入:
<include package="my.package" file="overrides.zcml" />
惯例,这个文件被叫作my.package-overrides.zcml. 而为调入my.package包的文件名称应为 my.package-configure.zcml,该文件里面 只需要下面一句:
<include package="my.package" />
在第五章,我们将学习怎样采用zc.buildout 来安装一个slug为 optilux.policy egg 自动调入,并且保证该包的配置文件在启动时被调入。