[long] nested repeats and index()

Hi,

I think that the behaviour of index() and nested repeats isn't well 
defined in the latest draft.

Take the following <instance>:

<bookmarks>
	<section>
		<bookmark name="Main page"/>
		<bookmark name="ecma"/>
	</section>
	<section>
		<bookmark name="images"/>
	</section>
</bookmarks>

And the following UI:

<repeat nodeset="section" id="repeatSections">
	<repeat nodeset="bookmark" id="repeatBookmarks">
		<output ref="@name"/>
	</repeat>
</repeat>
<...>
<trigger id="insertbutton">
	<label>Insert bookmark</label>
	<insert nodeset="section[index('repeatSections')]/bookmark" 
at="index('repeatBookmarks')" position="after" event="xforms-activate"/>
</trigger>
<trigger id="insertsectionbutton">
	<label>Insert section</label>
	<insert nodeset="section" at="index('repeatSections')" position="after" 
event="xforms-activate"/>
</trigger>

Those are taken (and adapted) from the example in chapter G.2.


Step 1/
------
At startup, all index values are 1: index('repeatSections') returns 1, 
index('repeatBookmarks') returns 1.

Step 2/
------
The user triggers 'Insert bookmark', the instance now look like this:
<bookmarks>
	<section>
		<bookmark name="Main page"/>
		<bookmark name="images"/>
		<bookmark name="ecma"/>
	</section>
	<section>
		<bookmark name="images"/>
	</section>
</bookmarks>

index('repeatSections') still returns 1, index('repeatBookmarks') now 
returns 2 (chapter 9.3.5, point 3).

Step 3/
------
The user triggers 'Insert section', the instance now look like this:
<bookmarks>
	<section>
		<bookmark name="Main page"/>
		<bookmark name="images"/>
		<bookmark name="ecma"/>
	</section>
	<section>
		<bookmark name="images"/>
	</section>
	<section>
		<bookmark name="images"/>
	</section>
</bookmarks>

index('repeatSections') now returns 2, index('repeatBookmarks') still 
returns 2.

However, the Xpath expression 
section[index('repeatSections')]/bookmark[index('repeatBookmarks')] does 
not point to an existing element, so trying to use a <setvalue> on the 
new node would fail.

Is this interpretation the correct one? If so, a note should be added to 
the draft that says that using index() on nested repeats may lead to 
strange (and unexpected) results.

If this interpration is wrong, because index('repeatBookmarks') should 
return 1 in step 3 because the value of index('repeatSections') changed, 
it should also be specified.

Regards,
Jérôme

Received on Tuesday, 27 August 2002 08:39:08 UTC