- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Mon, 19 Aug 2002 20:05:41 +0100
- To: public-qt-comments@w3.org
Hi,
I might be missing something, but I think that the definition of
infoitem-to-text-nodes() function is wonky. The definition in the Data
Model WD is:
define function infoitem-to-text-nodes(Node* $nodes)
returns Node*
{
if (xf:empty($nodes)) then return empty-sequence()
else
let $head:= op:item-at($nodes, 1),
$tail:= xf:subsequence($nodes, 2)
return
if (dm:node-kind($head) = "text") then
/* Collapse two consecutive text nodes and apply
infoitem-to-text-nodes recursively */
if (xf:empty($tail)) then $head
else if (dm:node-kind(op:item-at($tail,1))="text") then
infoitem-to-text-nodes(
op:concatenate(
dm:text-node(xf:concat(dm:string-value($head),
dm:string-value(op:item-at($tail,1)))),
xf:subsequence($tail, 2)
)
)
else op:concatenate($head,
op:concatenate(op:item-at($tail,1),
infoitem-to-text-nodes($tail)))
else op:concatenate($head, infoitem-to-text-nodes($tail))
}
Consider the operation over the content of the foo element in:
<foo> blah <bar /></foo>
Here, the sequences of nodes is a text node, followed by a bar
element. I'll call these $node[1] and $node[2]. Running through the
function we get:
1st recursion:
$head = ( $node[1] )
$tail = ( $node[2] )
// $head is text; $tail[1] isn't empty and isn't text
return
op:concatenate($node[1],
op:concatenate($node[2],
infoitem-to-text-nodes( ($node[2]) )))
2nd recursion:
$head = ( $node[2] )
$tail = ()
// $head isn't text
return
op:concatenate( $node[2], () )
So we end up with:
( $node[1], $node[2], $node[2] )
whereas I think we want:
( $node[1], $node[2] )
The problem is here:
else op:concatenate($head,
op:concatenate(op:item-at($tail,1),
infoitem-to-text-nodes($tail)))
which I think should be:
else op:concatenate($head,
op:concatenate(op:item-at($tail, 1),
infoitem-to-text-nodes(xf:subsequence($tail, 2))))
or possibly, for simplicity:
else op:concatenate($head,
infoitem-to-text-nodes($tail))
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Monday, 19 August 2002 15:05:43 UTC