- From: <bugzilla@jessica.w3.org>
- Date: Mon, 17 Dec 2012 17:48:36 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=20416 Bug ID: 20416 Summary: Sequence Normalization Queries Classification: Unclassified Product: XPath / XQuery / XSLT Version: Candidate Recommendation Hardware: All OS: All Status: NEW Severity: normal Priority: P2 Component: Serialization 3.0 Assignee: zongaro@ca.ibm.com Reporter: josh.spiegel@oracle.com QA Contact: public-qt-comments@w3.org Section 2 says that when the item-separator serialization parameter is present, sequence normalization is equivalent to constructing a document node as follows: declare construction preserve; document { for tumbling window $w in $seq start when true() end $end when $end instance of node() return if (count($w) ge 2) then string-join($w[count($w)-1], $sep) else $w } fn:string-join accepts xs:string* so if the input sequence is (1, 2, 3) I would expect this query to raise a sequence type matching error (sequence normalization does not raise this error). Also, sequence normalization places the item-separator between each item in the sequence. I don't think the above windowing query achieves this. For example, assume the item-separator is "x". If the input sequence is (text { 1 }, text { 2 }, text { 3 }), I think the result of the query is a document with the text node "123" but the desired result is "1x2x3". I think the following query would better model sequence normalization when item-separator is present: declare construction preserve; document { for $item at $pos in $seq let $node := if ($item instance of node()) then $item else text { $item } return if ($pos eq 1) then $node else ($sep, $node) } The let clause converts atomic values in the sequence to text nodes. The purpose of this is to avoid the interleaving blanks that would be inserted by the document constructor. ---- A second minor problem is with the query used when the item-separator is absent: declare construction preserve; document { for $s in $seq return if ($s instance of document-node()) then $s/child::node() else $s } Document construction removes document nodes so manually removing the document nodes is unnecessary. I propose the following query instead: declare construction preserve; document { $seq } -- You are receiving this mail because: You are the QA Contact for the bug.
Received on Monday, 17 December 2012 17:48:43 UTC