[ 
https://issues.apache.org/jira/browse/AXIOM-356?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13014850#comment-13014850
 ] 

Hudson commented on AXIOM-356:
------------------------------

Integrated in ws-axiom-trunk #375 (See 
[https://hudson.apache.org/hudson/job/ws-axiom-trunk/375/])
    

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

Reply via email to