[DFDL-WG] Scenarios for action 086 - nils and defaults

Tim Kimber KIMBERT at uk.ibm.com
Wed Apr 14 06:33:16 CDT 2010


I took an action from the last meeting to document the scenarios relating 
to nils and defaults, with particular reference to groups that have a 
separator.
The number of combinations is large, but I'll try to do this in an 
organised way. The variables are:

- separatorPolicy ( required / suppressed / suppressedAtEnd )
- element has a zero-length representation / element is missing from the 
data stream
- user wants ( nil / default value / no element ) in the infoset
- element is simple / complex

Some ground rules:
* A group member is missing if the group has initiatedContent="true" and 
its initiator is not found. 
* A group member is missing if the group ends before the member has been 
parsed.
* A group member cannot be missing if its parent group has 
separatorPolicy="required"

Scenario 1: Fixed-length elements with initiators, no separators

ONE:oneTWO:twoTHREE:three<END>
All members are present.

ONE:oneTHREE:three<END>
'Two' is missing, and is defaulted if required.

ONE:oneTWO:two<END>
Group ends early. 'Three' is missing, and is defaulted if required.

Scenario 2: Variable-length elements with initiators and infix separators
Note how the presence of separators allows a zero-length representation - 
not possible in scenario 1

ONE:one,TWO:two,THREE:three<END>
All members are present.

ONE:one,THREE:three<END>
If separatorPolicy='suppressed; then 'Two' is missing, and is defaulted if 
required. 
If separatorPolicy!='suppressed' then a processing error is reported.

ONE:one,,THREE:three<END>
If separatorPolicy='required' then 'Two' has a zero-length representation, 
zero-length is interpreted as 'missing' and 'Two' defaulted if required
If separatorPolicy!='required' then 'Two' is present with a zero-length 
representation. If 'Two' cannot be zero-length, then it is a processing 
error.
The above rules can be discussed, but I believe they have merit. The key 
point is that 'required' and 'suppressed' really do imply different things 
about a zero-length member. I'm aware that there may be other lengthKinds 
where zero-length needs to be interpreted as 'missing'. I think 'pattern' 
would be one example of that. Not so sure about 'prefixed' and 
'explicit-when-length-is-a-DFDL-expression'
Note that the next example is the most likely use of defaulting when 
separatorPolicy='suppress"

ONE:one,TWO:,THREE:three<END>
'Two' has a zero-length content region, and is defaulted if 
missingValueInitiatorPolicy="required".

ONE:one,TWO:two,<END>
If separatorPolicy='required' then 'Three' has a zero-length 
representation, zero-length is interpreted as 'missing', and 'Three' is 
defaulted if required
If separatorPolicy='suppressed' then 'Three' has a zero-length 
representation.  If 'Three' cannot be zero-length, then it is a processing 
error.

ONE:one,TWO:two<END>
If separatorPolicy='required' then it is a processing error.
If separatorPolicy!='required' then the group ends early. 'Three' is 
missing, and is defaulted if required.

Other points:

- I think the name 'missingValueInitiatorPolicy' is confusing - the name 
implies that it is about missing items, and about the presence/absence of 
the value only
The role of this property is actually
a) to tell the parser how to recognize a required element that is not 
missing from the data stream, but does need to be defaulted
b) to tell the unparser how to serialize a required element that is 
missing from the infoset ( or one that is present in the infoset without a 
value? )
I think the old name 'defaultValueInitiatorPolicy' conveys it a little 
more accurately (and is consistent with nilValueInitiatorPolicy ), but 
there were reasons for changing the name. Unfortunately I don't remember 
what they were.

- OccursCountKind: I'm assuming that it is intended to allow 
variable-length arrays in formats where the array length cannot easily be 
detected in other ways. Occurences must be contiguous ( so don't try using 
it for occurrences within an unordered group ). If the data stream ends 
before all occurences have been parsed, it is a processing error.


regards,

Tim Kimber, Common Transformation Team,
Hursley, UK
Internet:  kimbert at uk.ibm.com
Tel. 01962-816742 
Internal tel. 246742






Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU





-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.ogf.org/pipermail/dfdl-wg/attachments/20100414/01a9b3d0/attachment.html 


More information about the dfdl-wg mailing list