Of course Zope must eventually move into the XML world. Zope needs to do templates. XSL also does templates. In fact templates are almost as central to XSL as they are to Zope. I would suggest that Zope should use XSL template syntax for DTML templates as far as is possible. In fact, maybe when XSL becomes popular enough, it might make sense to describe the interaction between Zope and the Python runtime in terms of XML transformations. That's for the future, though. In the meantime, the point is that the template syntax should be the same. Here are the details from the current XSL spec: "The value of an attribute of a literal result element is interpreted as an attribute value template: it can contain string expressions contained in curly braces ({})." "Within a template, the xsl:value-of element can be used to compute generated text, for example by extracting text from the source tree or by inserting the value of a string constant. The xsl:value-of element does this with a string expression that is specified as the value of the expr attribute. String expressions can also be used inside attribute values of literal result elements by enclosing the string expression in curly brace ({})." "The xsl:value-of element is replaced by the value of the string expression specified by the expr attribute. The expr attribute is required." "e.g. <xsl:value-of expr="attribute(first-name)"/>" "In an attribute value that is interpreted as an attribute value template, such as an attribute of a literal result element, string expressions can be used by surrounding the string expression with curly braces ({}). The attribute value template is instantiated by replacing the string expression together with surrounding curly braces by the value of the string expression. The following example creates an IMG result element from a photograph element in the source; the value of the SRC attribute of the IMG element is computed from the value of the image-dir constant and the content of the href child of the photograph element; the value of the WIDTH attribute of the IMG element is computed from the value of the the width attribute of the size child of the photograph element: <xsl:define-constant name="image-dir" value="/images"/> <xsl:template match="photograph"> <IMG SRC="{constant(image-dir)}/{href}" WIDTH="{size/attribute(width)}"/> </xsl:template> With this source <photograph> <href>headquarters.jpg</href> <size width="300"/> </photograph> the result would be <IMG SRC="/images/headquarters.jpg" WIDTH="300"/> When an attribute value template is instantiated, a double left or right curly brace outside a string expression will be replaced by a single curly brace. It is an error if a right curly brace occurs in an attribute value template outside a string expression without being followed by a second right curly brace; an XSL processor may signal the error or recover by treating the right curly brace as if it had been doubled. A right curly brace inside an AttributeValue in a string expression is not recognized as terminating the string expression." http://www.w3.org/TR/WD-xsl Paul Prescod - ISOGEN Consulting Engineer speaking for only himself http://itrc.uwaterloo.ca/~papresco "Sports utility vehicles are gated communities on wheels" - Anon