So please read the following and help me answer them.
Regards,
Tom
*****************************************
--- MHEG-5 IS tech FAQ - very first crude draft ---
*****************************************
1) MHEG-5 Integer range.
Q. MHEG does not specify any range for Integers. This is legitimate in Math
but not convenient for computers. Computers
need to know if a number is a short, long, signed or unsigned. It seems that
a signed long could fit, but MHEG-5 should
be more specific in order to avoid interoperability problems.
Also, once that range is specified, MHEG-5 should also specify what happens
when an integer exceeds its range. For
instance, if var 23 is the maximum integer value allowed, what is the effect
of "Add(23, 1)" action ?
A. The Range of Integer is not specified by MHEG-5. If a specific range is
not to be exceeded in a given MHEG-5 engine,
that engine shall deal with inapropriate values in its own way; it may for
instance use engine events for that purpose (e.g.
to send an error message). Similaryly, MHEG-5 does not specify the result an
action resulting in a value out of range; here
again engine events canbe used to signal the error.
2) MHEG-5 Stream Counter Position
Q. MHEG-5 specifies the coding of counter position by an integer and also
suggests to use DSM-CC protocol to encode
the counter position within the stream. Nevertheless, DSM-CC specifies the
position within a stream by using a couple of
integers (the first one coding the seconds, and the second coding the
milliseconds). Consequently, MHEG-5 and DSM-CC
seem incompatible on this point and DAVIC should be able to say how it plans
to use the both in this specific case...
Moreover, since MHEG-5 plans to use only one integer to code the counter
position of a stream, it seems that it needs be
64 bits, which would be a heavy constraint on all other Integers for which
one might assume that 16 or 32 bit be sufficient.
A. ???
3) MHEG-5 List Group Class
3.1) TokenGroup inheritance
The ListGroup class inherits from the TokenGroup class but some mechanisms
managed by the TokenGroup (or
TokenManager) behaviours remain unclear due to the fact that the number of
cells is generally not equal to the number of
items in a ListGroup.
Q. On the one hand, section "30.1.2.Positions" of MHEG talks about cells and
TokenMovementTable. This means that the
token movement table (and consequently the move action) seems to be applied
to cells, doesn't it ? What about "moveTo"
action (Is it also applied to cells' index ?) and about "tokenMovedTo" and
"tokenMovedFrom" events (are they applied
only to the cells too ?) ?
On the other hand, as specified in section "30.1.3.ItemList", the
"TokenGroupItems" allows to initialize the list of the
items of the listGroup. TokenGroupItems defines a group of visible, and for
each visible, a set of action-slots. Action-slots
are the subject of question 3.2.
3.2) Action-slots
Q. Is the mechanism of action-slots authorized in the listGroup class
(nothing say not in MHEG I think...) ? If true, is the
tokenGroupItems (initial state) the only way to define action-slots for items
(since "addItem" provides no solution to define
action-slots for the new item...) ?
"CallActionSlot" executes an action object associated with the item that
currently has the token, that is what MHEG says.
But for listGroup the token is based on cells and action-slots are based on
items. For listGroup, shall the "callActionSlot"
action be re-aimed towards the item that is displayed in the cell that
currently holds the token ? By the way, MHEG-5 IS
contains a mistake in the provisions of use for callActionSlot action at
section 29.4 : Mheg says "Index shall be set in the
range [0, number of items in the tokenGroupItem]" though index here has
nothing to do with the position of the item in the
tokenGroup but rather with the position of the actionSlot to do in the
sequence of actionSlots... So the range shall rather be
[0, number of actionSlots for the item that currently holds the token] but
I'm even not sure that is required. Indeed, in my
opinion, if the index specified has no corresponding actionSlot, the
actionSlot could be considered as "null" and the
callActionSlot shall be aborted.
What is the effect of "delItem" for actionSlots ? Is the actionSlot deleted
with the item visible ?
What is the effect of "addItem" for actionSlots when addItem insert an item
in the itemList ? Are previously defined
actionSlots attached to their visible or to their index in the itemList ? May
the new item have an actionSlot attached or is it
prohibited ?
3.3) Use of the listGroup class
Q. If "tokenMovedTo" and "tokenMovedFrom" events are based on the cells, how
could a link be built in order to do
something when an item holds the token (that is when the item is displayed in
the cell that holds the token) ?
Especially, suppose that the author want to select the item that currently
holds the token. This seems to be a quite common
task, doesn't it ? Is there a simpler way than the crazy solution I have
found and I explain below ?!!!
1. Define an integerVariable (1) which will hold the firstItem index 2.
Define an integerVariable (2) which will hold the
token index 3. GetFirstItem (listGroup identifier, var 1 identifier) 4.
GetTokenPosition (listGroup identifier, var 2
identifier) 5. Add (var 2 identifier, -1) //since index are one based... 6.
Add (var 1 identifier, indirectReference(var 2
identifier)) 7. Select (listGroup identifier, indirectReference(var 1
identifier))
It seems incredible and absolutely irrealistic for me to ask an author to do
7 things only to be able to select the item that
holds the token (especially when he still has not defined any visual feedback
of the selection which is another challenge...).
Do you have an easier way ? If not, what about providing a "getCellItemIndex"
action that could give directly the index of
the item which is displayed in a specific cell ?
3.4) Token management in particular listGroup cases
Q. In some cases, like figures 8 or 9, some cells of the listGroup can remain
unused. Can the token be held by an unused
cell?
If true, what is the effect of a "callActionSlot" action when an unused cell
hold the token ? May the noTokenActionSlot of
right index be executed or is the callActionSlot action simply ignored ?
If false (that is if the token can not be held by an unused cell), what is
the effect of "move" and of "moveTo" action when
the target cell is unused ? What is the effect of "scrollItems" action when
it causes the cell that holds the token becoming
unused ?
4) Text class
4.1) GetTextContent versus GetTextData
Q. What is the difference between "getTextContent" and "getTextData" actions
? In Text class it seems that GetTextContent
is rather to be used to get the objectReference of the variable that holds
the content of the text while getTextData get directly
the content of the text as an octetString. Nevertheless, a note says that if
the content is included, getTextContent returns an
OctetString !!! Does it mean that "GetTextContent" and "GetTextData" are
equivalent if the content attribute is included ?
How does a text object know if its content is referenced or included ? Shall
the interpreter be able to distinguish the type of
the content attribute inherited from the ingredient class ?
4.2) SetData action
Q. This question is wider and could be applied to any ingredient. The
ingredient content attribute can be either included or
referenced. Is this initial state (included or referenced) definitive ?
If true, I'd like to have the confirmation of the following mechanism. If
content is initially included, and "setData" use a
referenced content, the current content referenced by the variable parameter
is copied in the content of the ingredient.
Further changes to the content of the ingredient are not reflected to the
variable used as parameter of the first setData action.
Is this correct ? If content is initially referenced by a var (say var X) :
If the setData parameter is an includedContent, this
includedContent becomes the new value of var X. If the parameter is a
referencedContent (referenced by var Y), the
content of the ingredient is changed to var Y and var X remains unchanged
(and is no more used by the ingredient) ? Is it
correct ? Or in this last case, is it var X that remains the content of the
ingredient and that is changed to a referencedContent
var Y ?
If false, please could you describe the mechanism with all cases exposed
above ?
5) EntryField class
5.1) Interaction internal behaviour
Q. In section "43.3.Interaction.2 and 3", characters entered by the user are
used to update and change the content of the
"TextData" attribute. If the content of the entryField is a referencedContent
(referenced by var X), shall the content of the
var be also modified accordingly to the textData attribute or not ? If not,
this means that the content of getTextContent may
be different than the textData : is it right ?
Q. In section "43.3.Interaction.4", "When the entry is complete (because the
user termitates the entry or ...". How the user
can terminate the entry (since entryField full no more make the entryField
InteractionStatus false in IS but generate an event
instead) ?
5.2) Behaviour when textData is longer than maxLength
Q. An entryFieldFull event is generated when the entryField capacity is
reached (except if it is the consequence of a setData
action). But in principle, the author is not obliged to put a link that set
the interactionStatus to false when an entryFieldFull
event is generated and SetData can set the textData attribute to an
octetString longer than maxLength. In this case, when the
user enters a new character, shall the interpreter generate an EntryFieldFull
event ? Answer could be "No, never", or "Yes,
always" or "Only if the entryPoint is higher (or higher or equal to) than
maxLength)"...
The following example may illustrate better the reason for these questions.
An MHEG-5 application proposes to program
something (perhaps a VCR) based on a date and time event. The user has to
fill the date and time in some entryFields (1 for
the day, 1 for the month, etc...). But the author wants to fill the fields
with the current date and time for default values (as
all VCR do). Suppose we are the 27th day of the month, the initial textData
will be "27" and maxLength is set to 2,
overwrite is set to TRUE and the entryPoint is 0. Is there a way in MHEG-5 to
make the interactionStatus false and go to
the month entryField when the user has entered 2 chars (entryPoint is at
2)...?
I give this example to give some concrete examples which seem to be the lack
of some MHEG-5 mechanisms (even if
MHEG-5 is well written in general). In this particular case, in my opinion,
it would be better to generate an entryFieldFull
event when the entryPoint changes and is equal to (or higher than) maxLength.
Also, it could have been interesting to
define that the length of textData can not be longer than maxLength
(excepting maxLength = 0) and to cut automatically
superfluous characters.