- From: Alberto Massari <alby@exln.com>
- Date: Tue, 10 Dec 2002 12:40:45 +0100
- To: public-qt-comments@w3.org
The use case is supposed to take an input file like this
<book>
<title>Data on the Web</title>
<author>Serge Abiteboul</author>
<author>Peter Buneman</author>
<author>Dan Suciu</author>
<section id="intro" difficulty="easy" >
<title>Introduction</title>
<p>Text ... </p>
<section>
<title>Audience</title>
<p>Text ... </p>
</section>
<section>
<title>Web Data and the Two Cultures</title>
<p>Text ... </p>
<figure height="400" width="400">
<title>Traditional client/server architecture</title>
<image source="csarch.gif"/>
</figure>
<p>Text ... </p>
</section>
</section>
...
and generate a nested table of contents.
However, the solution
define function toc($e as element )
as element*
{
let $n := local-name( $e )
return
if ($n = "section")
then <section>
{ $e/@* }
{ toc($e/*) }
</section>
else if ($n = "title")
then $e
else ()
}
<toc>
{
toc( document("book.xml")/book )
}
</toc>
will generate nothing.
- toc will be called the first time with the node "book" as the $e parameter
- the local-name of $e is "toc"
- so toc will return the empty sequence and processing will stop
The correct definition for the "toc" function would be
define function toc( $elmt as element)
as element*
{
for $e in $elmt/*
let $n := local-name( $e )
return
if ($n = "section")
then
<section>
{ $e/@* }
{ toc($e) }
</section>
else if ($n = "title")
then $e
else ()
}
Alberto
-------------------------------
Alberto Massari
eXcelon Corp.
http://www.StylusStudio.com
Received on Tuesday, 10 December 2002 06:40:33 UTC