Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

TorgoX (1933)


"Il est beau comme la retractilité des serres des oiseaux rapaces [...] et surtout, comme la rencontre fortuite sur une table de dissection d'une machine à coudre et d'un parapluie !" -- Lautréamont

Journal of TorgoX (1933)

Saturday April 01, 2006
07:11 AM

An alternate syntax for XSLT

[ #29175 ]
Attention all XML power users!

For some time now, the syntax of XSLT has bothered me -- its verbosity, that gushing typographic clutter, clearly encumbers best-practices programming.

XLove suggests an alternate syntax that emphasizes the functional nature of XSLT; and SXML posits a representation of general XML data as Lisp forms. But both of these, aside from reducing close-tags to a single character, do very little to solve XSLT's clutter problem.

I think it's time for a better alternate syntax for viewing and writing XSLT. In this document I will propose such a system, which I call MatTS (Matryoshka Transformation Syntax).

XLove and SXML start out with an implementation of alternate syntax as an input which becomes conventional XSLT. But so as to better tune the alternate syntax as a visual artifact, I instead choose to implement the alternate syntax as a view of XSLT, which XSLT becomes. (As such, I have left the development of an editing environment as a mere implementational detail which I am sure the marketplace will provide for in due time, as it has done for UML, that other recent breakthrough in informatic display.)

Most hierarchy-based notations display their structure with bits of matching punctuation, whether parens, brackets, or braces. However, I view this as a holdover from the days of daisywheel printers and other forms of mere movable type. With our modern bitmap displays and LASER printers, it is far easier and clearer to display structure as series of matryoshka-like nested shapes -- say, boxes. Clearly, (foo ((bar) baz)) is inferior to the clarity of this diagram:

|foo +---------+|
|    |+---+    ||
|    ||bar|    ||
|    |+---+    ||
|    |baz      ||
|    +---------+|

[presented as ASCII art for ease of transmission]

This sort of matryoshka notation is the basis of my new variant syntax for XSLT, and it in fact gives the syntax its name. But in and of itself, this notation would go no further than Xlt and SXML at relieving XSLT's clutter problem. The greatest benefit of MatTS is in providing a terse syntax for all important XSLT constructs. In the best tradition of modern higher mathematical notation and typography, I have chosen well-known Greek letters and various printers' symbols for the operators.

The following table illustrates and specifies this formalism:

α apply-imports
β apply-templates
τ attribute
Ξ attribute-set
λ call-template
ξ choose
ψ comment
μ copy
γ copy-of
Ν decimal-format
π element
θ fallback
ζ for-each
φ if
Ω import
Γ include
Θ key
μ message
Α namespace-alias
ν number
ς otherwise
Δ output
Χ param
Κ preserve-space
ε sort
ο strip-space
Σ stylesheet
Λ template
ι text
Τ transform
κ value-of
δ variable
σ when
χ with-param
Π processing-instruction

¿... test="..."
√... name="..."
≈... match="..."
§... select="..."
«...» (general attribute value)

The preceding explanation aside, the best way to appreciate MatTS is by simply trying it out -- MatTS as a visualization application is itself implemented in browser-accessible XSLT, and so can be used to view other XSLTs as well as itself. (Compare with the clutter of those XSLs when viewed in conventional XSLT notation: [1] [2].)