[
https://issues.apache.org/jira/browse/AXIOM-356?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andreas Veithen reassigned AXIOM-356:
-------------------------------------
Assignee: Andreas Veithen
> OMElement#resolveQName implementations use incorrect algorithm to resolve
> unprefixed QNames
> -------------------------------------------------------------------------------------------
>
> Key: AXIOM-356
> URL: https://issues.apache.org/jira/browse/AXIOM-356
> Project: Axiom
> Issue Type: Bug
> Components: DOOM, LLOM
> Affects Versions: 1.2.10
> Reporter: Andreas Veithen
> Assignee: Andreas Veithen
> Fix For: 1.2.12
>
>
> Consider the following element:
> <p:root xmlns:p='urn:ns1' xmlns='urn:ns2'/>
> When OMElement#resolveQName is used to resolve an unprefixed QName literal
> relative to this element, then the returned QName object has:
> namespaceURI = urn:ns1
> prefix = p
> The reason is that ElementHelper#resolveQName contains code that will pick up
> the namespace of the parent element if the QName literal is unprefixed. This
> applies to the LLOM and DOOM implementations.
> However, none of the XML specs describe a QName resolution algorithm that
> works like that. There are only two valid options to resolve a QName:
> A. Resolve it in the same way as element names, i.e. an unprefixed QName
> literal will be interpreted based on the default namespace in scope. This is
> what the XML schema spec requires [1] for the QName type:
> [quote]
> 1 If its - normalized value- is prefixed, then all of the following must be
> true:
> 1.1 There must be a namespace in the [in-scope namespaces] whose [prefix]
> matches the prefix.
> 1.2 its - namespace name- is the [namespace name] of that namespace.
> 1.3 Its - local name- is the portion of its - normalized value- after the
> colon (':').
> 2 otherwise (its - normalized value- is unprefixed) all of the following
> must be true:
> 2.1 its - local name- is its - normalized value- .
> 2.2 The appropriate case among the following must be true:
> 2.2.1 If there is a namespace in the [in-scope namespaces] whose [prefix] has
> no value, then its - namespace name- is the [namespace name] of that
> namespace.
> 2.2.2 otherwise its - namespace name- is - absent- .
> [/quote]
> B. Resolve it in the same way as attribute names, i.e. an unprefixed QName
> literal will have no namespace. This is what the XSL spec requires [2] for
> QNames appearing in XPath expressions:
> "the set of namespace declarations are those in scope on the element which
> has the attribute in which the expression occurs; this includes the implicit
> declaration of the prefix xml required by the the XML Namespaces
> Recommendation [XML Names]; the default namespace (as declared by xmlns) is
> not part of this set"
> Since OMElement#resolveQName is in general used to interpret literals of the
> QName schema type, it should implement algorithm A. For the specific case of
> XPath expressions, AXIOMXPath#addNamespaces(OMElement) already implements
> algorithm B.
> Unit tests are already available, but they are currently excluded from the
> LLOM and DOOM test suites:
> TestResolveQNameWithDefaultNamespace
> TestResolveQNameWithoutNamespace
> It should not be difficult to fix the resolveQName implementation. The only
> uncertainty is whether downstream projects such as Axis2 depend on the
> current behavior.
> [1] http://www.w3.org/TR/xmlschema-1/#src-qname
> [2] http://www.w3.org/TR/xslt#section-Expressions
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]