[Bug 3787] [XQuery] Code example I.4 with flaws

http://www.w3.org/Bugs/Public/show_bug.cgi?id=3787

           Summary: [XQuery] Code example I.4 with flaws
           Product: XPath / XQuery / XSLT
           Version: Candidate Recommendation
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XQuery
        AssignedTo: chamberl@almaden.ibm.com
        ReportedBy: hrennau@yahoo.de
         QAContact: public-qt-comments@w3.org


[XQuery] The function local:swizzle as described by the appendix has two flaws:

a) text nodes are ignored, thus producing an output document without any text
contents
b) no care is taken to ensure that within an element constructor all attribute
nodes are written before any element nodes, thus inviting runtime errors 

(a) could be solved by replacing the line
         { for $c in $e/(* | @*) return local:swizzle($c) }
by the line
         { for $c in $e/(node() | @*) return local:swizzle($c) }

(b) could be taken care of by adding a textual remark, e.g. something of this
sort: 

"For the sake of simplicity, the sample code neglects to ensure that 
within an element constructor all attribute nodes are written before 
any element nodes. For example, it relies on <size> elements to have no
preceding sibling elements."

However, maybe it would be better to present safe code by just replacing the
line
         { for $c in $e/(* | @*) return local:swizzle($c) }
by
         { for $c in ( $e/@* except $e/@color,    (: attribute -> attribute :)
                       $e/size,                   (: elem -> attribute :)
                       $e/@color,                 (: attribute -> elem :)
                       $e/node() except $e/size ) (: elem -> elem :) 
           return local:swizzle($c) }

Received on Monday, 2 October 2006 21:13:35 UTC