[Zope3-dev] what is ZCML?

Jeff Shell eucci.group at gmail.com
Mon Mar 13 16:30:54 EST 2006


On 3/13/06, Shane Hathaway <shane at hathawaymix.org> wrote:
> Martijn Faassen wrote:
> > A newer interpretation of ZCML is:
> >
> > """
> > ZCML is a configuration language that configures a number of basic
> > directives for configuring the component architecture and security:
> > adapters, utilities, security requirements, and little else. Everything
> > else should be done in Python code, as configuration in Python code is
> > more flexible and packages can form a more self-contained whole. ZCML
> > should reflect the underlying universality of the component architecture.
> >
> > If two directives work with, say, adapters underneath, they should
> > really be one directive. ZCML should be simple and minimal so it is easy
> > to grasp.
> >
> > ZCML is not readable standalone. ZCML is simply used to turn on various
> > adapters and such, hooking them into the system, but we do not get a
> > clue what the adapters are doing by just looking at the ZCML - Python
> > code needs to be consulted.
> > """
>
> IOW, "most of the directives we need have already been invented. [1]  We
> don't want to build high level directives; ZCML will follow the BASIC
> school of language design." :-)
>
> [1] http://www.inventionmysteries.com/article4.html
>
> While I was initially on board with the idea of reducing the number of
> directives, I've changed my mind.  I think we want high level directives
> and we want people to feel free to write new directive types.  We want
> tools that let us inspect and search the resulting low level directives.
>   If we have to use ZCML, then ZCML should be expressive.

Then why do we have Python? Is Zope going to be a "write ZCML
directives to write your Zope app" system? Or is it going to be "write
Python code to write your Zope app" system?

I don't know if it's possible to use a ZCML configuration-execution
outside of ZCML, which makes testing an awful hard beast sometimes.
There's functionality that's locked away inside the directives that
you then have to have not only the Zope environment set up to run, but
a ZCML environment too. Pain pain pain pain pain.

Unlock the magic. If it must exist, make it available and
understandable to me. Don't hide it under more layers and verbs and
nouns that conflict and change meaning depending on if you're using
ZCML and Python.

"Make ZCML More Expressive" - did we learn nothing from DTML
Expressions? It starts out simply enough, but how long until we have
more and more logic in ZCML? We already have this conditional that I
barely understand (but appreciate in theory).

Why design a language at all? I only want ZCML to allow me not to take
on a packages provided components when I import it. I don't want to
start thinking I can write an enterprise workflow and document
management system in it. Let Python be the language. Let ZCML exist to
do the final step of loading/registering registerable objects in a
predictable manner, and to provide the few things that we don't want
to pollute our (or others) Python code with, like security
declarations.

--
Jeff Shell


More information about the Zope3-dev mailing list