Subject: Re: [xsl] a namespace problem From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Tue, 9 Apr 2002 08:46:13 +0100 |
Hi Michael, > Hi Jeni. A read of the XPath 2.0 requirements makes no mention of > default namespace interpretation (that I could find, at least > amongst all the red and blue :-)). The XSLT 2.0 requirements does > have a small section adding this requirement. > > Your comment would suggest something has to change in XPath to allow > the XSLT 2.0 default namespace stuff to work. Is that the case? Sort of, but only minor things (which is why it's not on the requirements as such). It's actually XPath 1.0 rather than XSLT 1.0 that states that the default namespace declaration is not used when resolving attribute or element names: A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. This is the same way expansion is done for element type names in start and end-tags except that the default namespace declared with xmlns is not used: if the QName does not have a prefix, then the namespace URI is null (this is the same way attribute names are expanded). It is an error if the QName has a prefix for which there is no namespace declaration in the expression context. http://www.w3.org/TR/xpath#node-tests XPath 2.0 instead provides a hook whereby the host language can change this behaviour. Each expression has a static context, set up by the language hosting the XPath, as well as its evaluation context (which includes the usual things like context node, position and size). The static context includes things like what variables and extension functions have been declared, and also three things about namespaces: * In-scope namespaces. This is a set of (prefix, URI) pairs. The in-scope namespaces are used for resolving prefixes used on QNames within the expression. * Default namespace for element names. This is a namespace URI. This namespace is used for any unprefixed QName appearing in a position where an element name is expected. * Default namespace for function names. This is a namespace URI. This namespace is used for any unprefixed QName appearing as the function name in a function call. http://www.w3.org/TR/xpath20/#static_context Later on, when it talks about resolving QNames, the XPath 2.0 WD refers to the "default namespace for element names" from this static context: A QName in a node test is expanded into an expanded-name using the in-scope namespaces in the expression context. An unprefixed QName used as a nametest has the namespaceURI associated with the default element namespace in the expression context. It is an error if the QName has a prefix that does not correspond to any in-scope namespace. http://www.w3.org/TR/xpath20/#node-tests The good thing about this is that it means that different "host" languages for XPath 2.0 can decide how they want the default namespace for element names to work -- whether it should use the default namespace declaration (perhaps XML Schema will do this, for example), some other mechanism (as in XSLT 2.0 and XQuery) or always be null (as in XSLT 1.0). What you'd expect is that XSLT 2.0 simply states that the [xsl:]default-xpath-namespace attribute sets the value of the "default namespace for element names". Actually, the XSLT 2.0 WD currently defines the same kind of thing locally, which in some ways isn't surprising since it has to work for patterns (which aren't defined in XPath) as well as expressions: The attribute [xsl:]default-xpath-namespace (see [2.3 Standard Attributes]) may be used on an element in the stylesheet to define the namespace URI that will be used for an unprefixed name used as a NameTest within a step of an XPath PathExpression or an XSLT Pattern occurring in an attribute of that stylesheet element or an attribute of a descendant of that stylesheet element. This default namespace URI applies only to a NameTest applied to an axis whose principal node type is elements: it does not apply when the step is using the attribute or namespace axis. The default namespace URI for such a name is the value of the [xsl:]default-xpath-namespace attribute on the innermost ancestor element that has such an attribute, considering all ancestor elements of the attribute containing the XPath expression or XSLT pattern. The [xsl:]default-xpath-namespace attribute must be in the XSLT namespace only if its parent element is not in the XSLT namespace. http://www.w3.org/TR/xslt20/#unprefixed-qnames I suspect this will get neatened up as we get into later Working Drafts. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] a namespace problem, Michael Leditschke | Thread | RE: [xsl] a namespace problem, Michael Kay |
[xsl] Re: Read the data only once., Dimitre Novatchev | Date | RE: [xsl] building namespaces, Michael Kay |
Month |