ZCML

XML-Dialekt, der die verschiedenen Zope-Komponenten verbindet.

Von Zope wird initial die in site-definition angegebene Datei abgearbeitet, meist $INSTANCE/etc/site.zcml. Diese bindet dann über <includes>--Tags alle weiteren ZCML-Konfigurationsdateien ein:

<!-- Load the meta -->
<include files="package-includes/*-meta.zcml" />
<five:loadProducts file="meta.zcml"/>

<!-- Load the configuration -->
<include files="package-includes/*-configure.zcml" />
<five:loadProducts />

<!-- Load the configuration overrides-->
<includeOverrides files="package-includes/*-overrides.zcml" />
<five:loadProductsOverrides />

<securityPolicy
    component="Products.Five.security.FiveSecurityPolicy" />
*-meta.zcml
Diese Dateien gewährleisten, dass die ZCML-Anweisungen der eingebundenen Pakete bei der Abarbeitung der ZCML-Anweisungen vollständig zur Verfügung stehen.
*-configure.zcml
Hiermit werden ZCML-Dateien innerhalb der installierten Pakete abgearbeitet.
*-overrides.zcml
Damit können Konfigurationen von Paketen überschreiben werden.
securitypolicy.zcml
Hiermit wird die Security-Policy festgelegt

Bedingungen

Pakete als Bedingungen

Das Starten der Instanz bricht ab, wenn in einer zcml-Datei include package angegeben wird, dieses Paket jedoch nicht installiert ist. Um dies zu vermeiden, kann include an die Bedingung geknüpft werden, dass das Paket installiert ist, z.B.:

<include
    zcml:condition="installed zope.app.zcmlfiles"
    package="zope.app.zcmlfiles"
    />
<include
    zcml:condition="not-installed zope.app.zcmlfiles"
    package="zope.app"
    />
<include zcml:condition="installed some.package"
    package="some.package" />
<include zcml:condition="not-installed some.package"
    package=".otherpackage" />

Funktionen als Bedingungen

Es können auch bestimmte Funktionen als Bedingung genannt werden. Diese Bedingungen können mit have oder deren Abwesenheit mit not-have angegeben werden, z.B.:

<include
    package="Products.CMFCore" file="permissions.zcml"
    xmlns:zcml="http://namespaces.zope.org/zcml"
    zcml:condition="have plone-41" />
<configure
    zcml:condition="not-have plone-4">
   <!-- only when the Plone 4 feature has not been provided -->
</configure>
<configure
    zcml:condition="not-have plone-5">
   <!-- only when the Plone 5 feature has not been provided -->
</configure>