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>
--~--