Re: Error in FIA description?

Hi Ian,

Thanks for the clarification, but I still see some problems with that.
See below.


> > //
> >     // Collect Phase: execute the selected form item.
> >     //
> >     // Queue up prompts for the form item.
> > 
> >     unless ( the last loop iteration ended with
> >             a catch that had no <reprompt>, 
> >         and the active dialog was not changed )
> >     {
> > 
> >         Select the appropriate prompts for an input item or <initial>.
> >         Queue the selected prompts for play prior to
> >         the next collect operation.
> > 
> >         Increment an input item's or <initial>'s prompt counter.
> >     }
> > 
> > Following this description, prompts will only be queued if there is a <reprompt> in a catch. 
> >   
> 
> "Unless (A) { B }" is equivalent to "if (!A) { B }".  That means that
> prompts are queued if
>      1. The last loop iteration didn't end with a <catch>, OR

I do not see this here, but in the definition of default catch handlers
http://www.w3.org/TR/voicexml20/#dml5.2.5 

>      1. The last loop iteration ended with a <catch>, but that <catch>
>         executed a <reprompt>, OR
>      2. The active dialog changed from the last loop iteration.

I don't see this in this algorithm

> Prompts will be queued if, for example, the current loop iteration is
> the first one in this active dialog, or if the previous loop iteration
> ended by filling a <field>.

I read it as follows. The specification states (I hope that I read it
right, since it is really confusing):

if (!("lastloop ends with catch" && !"reprompt in catch"))
{
   queue prompts
   increment counter
}

This means:

if (lastloop ends with catch || reprompt in catch)
{
   queue
   increment counter
}

Questions here:
1. Am I right with my interpretation? It differs to your points.
2. Am I in a lastloop in the first iteration?
   - If not, the prompts will not be queued, as I stated before.
3. Why do I have to increment the counter if I have no reprompt. IMHO,
this conflicts with http://www.w3.org/TR/voicexml20/#dml5.3.6 where the
prompt counter should only be incremented if I have a reprompt.

> 
> > At the first time the form item is entered no prompts will be queued
> 
> I don't think this is a correct reading of the snippet above.
> 
> > and we will have the same behaviour if there is no
> > reprompt.
> >   
> 
> If the previous iteration was in the same active dialog, and ended
> with a <catch> with no <reprompt>, then yes, prompts should not be
> queued.  I believe various people have found this odd in the past,
> but, odd or not, that's the way VoiceXML is meant to work.
> 
> I think this is a great illustration of why one should avoid using
> "unless" in specifications.

I fully agree with that. I think that it would be good to avoid such
constructs in the upcoming 3.0 specification.
I know that doing a correct specifiaction is a hard job, but it should
be easy for vendors to understand the basic idea behind it. "Unless" is
definitly a construct that should be avoided.

Dirk

Received on Sunday, 23 March 2008 19:28:35 UTC