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

Subject: Re: [xsl] alternative to repeatedly walking the ancestor axis in 1.0
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 4 Aug 2008 11:00:07 +0100
2008/8/2 Michael Kay <mike@xxxxxxxxxxxx>:
>> 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/

Current Thread