xsl-list
[Top] [All Lists]

Re: [xsl] What is the Core of XSLT?

2014-03-30 11:49:28
Abel,

These are (but I have to admit, I have no proof that this is complete):

xsl:stylesheet/transform
xsl:apply-templates
xsl:call-template
xsl:template
xsl:if
xsl:choose
xsl:copy
xsl:variable
xsl:param


One more observation:

You can safely remove from the kernel the <xsl:call-template>
instruction, as what it does can be achieved using
<xsl:apply-templates> and a corresponding matching template.

Cheers,
Dimitre

On Sat, Mar 29, 2014 at 9:51 AM, Abel Braaksma (Exselt) 
<abel(_at_)exselt(_dot_)net> wrote:
(continuing on another thread, as I seem to have shift subjects)

For the previous thread, search for "[xsl] Things that make you go Hmmmm!".

On 29-3-2014 16:41, Ihe Onwuka wrote:

The syntactical minimalism, brevity of language specification and
power of functional languages derives IMHO from the extensive
application of orthogonality.

I agree, with respect to functional languages.

However, there is a difference between functional languages and XSLT.
With (most?) functional languages, there is a core language that is
extremely minimalistic, and there's a language extension or set of
libraries that expands on that to prevent that everyone has to write
these themselves. A strong part of such core languages that allows this
sort kind of design is (re)definition of operators and functions,
overloads and overrides, things currently not allowed in XSLT. The
orthogonality of the core language is not necessarily applicable to its
libraries (see for instance .NET vs F#).

For XSLT, the language and the later extensions are deeply interwoven
into one another. Whether this is fortunate or not I cannot say, but it
is the way it has evolved. For any (future) discussion on language
design, I think it would make sense to distinguish between core language
features (which are few) and later additions and extensions (which could
fall into the category of libraries, i.e. comparable to .NET and
function/operator overrides in the case of F#).

Here is an attempt to make such distinction, trying to leave out any
other constructs that can be written using just these base constructs.
These are (but I have to admit, I have no proof that this is complete):

xsl:stylesheet/transform
xsl:apply-templates
xsl:call-template
xsl:template
xsl:if
xsl:choose
xsl:copy
xsl:variable
xsl:param

debatable:
xsl:value-of
xsl:comment
xsl:processing-instruction
xsl:attribute
xsl:element
xsl:namespace-alias

I left xsl:output out because it is itself already an extension (not all
XSLT processors produce output), and conversely, most languages provide
library functions for output. Same is true for xsl:message, which I
consider a library function for tracing messages.

I left xsl:for-each out because it can also be expressed in
xsl:apply-templates/call-templates syntax (not sure this is always the
case though, I do a bit of hand-waiving here).

I left xsl:copy-of out because it is a subset of xsl:copy.

Note that xsl:if is not required, it can be expressed in xsl:choose, but
I left it in because just about any language out there has an
if-statement (albeit different, we just have an if-statement, no
if-then-else in XSLT).

Obviously, XSLT cannot work without a data selection language, which in
this case is XPath, but I am not going to attempt a minimal subset of
that too.

I would be interested what people's opinions are on such minimal subset
that can be used to express all other language constructs of the XSLT
language, be it 1.0, 2.0 or 3.0.

Cheers,

Abel Braaksma
Exselt XSLT 3.0 processor
http://exselt.net


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>