xsl-list
[Top] [All Lists]

Re: [xsl] alternative to repeatedly walking the ancestor axis in 1.0

2008-08-04 03:00:37
2008/8/2 Michael Kay <mike(_at_)saxonica(_dot_)com>:
Out of interest, does xml:lang annotate the input tree, or does the
lang() function walk the ancestor axis behind the scenes?  Or
is it all implementation dependent?

It's implementation-dependent, of course.

Saxon walks the ancestor axis when you use the lang() function. I think it's
used too rarely to be worth optimizing.

So (for Saxon anyway) doing:

test="lang('foo', .)"

is pretty much the same as:

test="ancestor-or-self::*/@xml:lang = 'foo'"

except that the lang() function should return true if the lang tested
is a subset of that declared in the attribute.

So given an existing proprietary solution that walks the ancestor axis
a lot, you're not going to gain anything by switching to xml:lang...


You also asked:

why does xml:lang exist

And I think the answer is that the I18N lobby is sufficiently powerful in
W3C that they overrode the architectural arguments for putting this kind of
thing in a different layer; XML should be completely neutral as to the
meaning of element and attribute names, and such things should be defined
only in application-specific vocabularies.

Sounds similar to xlink...

I guess a good example to show what you're talking about is XHTML -
where you always see:

<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">

@lang is the application layer, @xml:lang is the XML layer.  I think
it's defined twice to cover both bases.

Reading around a bit it seems @lang has been dropped completely from
XHTML 1.1 Strict in favour of xml:lang... so somebody somewhere thinks
it really should be defined in the XML layer...


-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.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>
--~--

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