I was asked last meeting to document an example with COBOL ODO to see if our expectations that discriminators did not impact defaulting was correct.
Through the following example I've convinced myself that although discriminators may not be involved with defaults that occursCount should be.  The difference is a very fine point on how the rules are expressed.  Let me step through the example...
 

The little odo copybook looks like so:

XML    01  ODO.
XML        10  DEPOSITS.
               20 DEPOSIT-COUNT                 PIC 9(5).
               20 DEPOSITA OCCURS 0 TO 9999 TIMES DEPENDING
                  ON DEPOSIT-COUNT              PIC X(10).

                   
                   
example data could look like:


00003111111111122222222223333333333
|   |         |         |         |
CORE-FUND-COUNT         |         |
     |        |         |         |
   CORE-FUND[1]         |         |
                        |         |
             CORE-FUND[2]         |
                                  |
                       CORE-FUND[3]
                       
                       
       -w .\dpa\fls\cob\dpaflscob2.tdf -t                
*************************************************************
*Test Case: dpaflscob_01
*************************************************************
<Infoset xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ODO>
    <DEPOSITS>
      <DEPOSIT-COUNT xsi:type="xs:integer">3</DEPOSIT-COUNT>
      <DEPOSITA>1111111111</DEPOSITA>
      <DEPOSITA>2222222222</DEPOSITA>
      <DEPOSITA>3333333333</DEPOSITA>
    </DEPOSITS>
  </ODO>
</Infoset>                      
                       
The question that we are trying to answer is 'is a discriminator used in establishing existence'.  In other words, does it make us
create something that we would otherwise not create in the infoset or in the output datastream?  Or - will defaulting take place?

If we look at this as being modelled in DFDL we could model this in several ways...one is the way of WTX with discriminators and another way is using occursCount:
a la WTX:

<xs:element name="ODO" dfdl:lengthKind="implicit">
    <xs:complexType>
        <xs:sequence dfdl:sequenceKind="ordered">
            <xs:element name="DEPOSITS" dfdl:lengthKind="implicit">
                <xs:complexType>
                    <xs:sequence dfdl:sequenceKind="ordered">
                        <xs:element name="DEPOSIT-COUNT" type="Cobol_9" dfdl:length="5"></xs:element>
                        <xs:element name="DEPOSITA" minOccurs="1" maxOccurs="unbounded" type="Cobol_X" dfdl:length="10" default="XXXXXXXXXX">
                            <xs:annotation>
                                <xs:documentation>Beginning of Hierarchical Transaction</xs:documentation>
                                    <xs:appinfo source="http://www.ogf.org/dfdl/">
                                        <dfdl:discriminator test="{ dfdl:count(/ODO/DEPOSITS/DEPOSITA) le /ODO/DEPOSITS/DEPOSIT-COUNT}"/>
                                    </xs:appinfo>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>          

The other way would be to use an OccursCount
      <xs:element name="DEPOSITA" minOccurs="1"
                  maxOccurs="unbounded" type="Cobol_X"
                  dfdl:length="10" default="XXXXXXXXXX"
                  dfdl:occursCountKind="expression"
                  dfdl:occurCount= "{/ODO/DEPOSITS/DEPOSIT-COUNT}" />
       
The difference in these approaches is that the model with occursCount is expressed as a fixed point wheras the model with the discriminator
is a moving point using 'less than or equals'.  I'm expecting that the occursCount logic when implemented incorporates
this concept when parsing/unparsing. When I must have three of something then the second occur of it is VALID for it
is less than the maximum.  I don't think that we could expect that concept to be in the discriminator implementation.  This wording seems trivial but it impacts my expectations for default (not sure if rightly so!)

____________________________________

So parsing with the discriminator version.  If my datastream was missing the third occur of DEPOSITA, would we expect
a DEFAULT to be applied?   Would discriminator versus occursCount make a difference?

Input datastream:   0000311111111112222222222

<Infoset xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ODO>
    <DEPOSITS>
      <DEPOSIT-COUNT xsi:type="xs:integer">3</DEPOSIT-COUNT>
      <DEPOSITA>1111111111</DEPOSITA>
      <DEPOSITA>2222222222</DEPOSITA>
    </DEPOSITS>
  </ODO>
</Infoset>

OR

<Infoset xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ODO>
    <DEPOSITS>
      <DEPOSIT-COUNT xsi:type="xs:integer">3</DEPOSIT-COUNT>
      <DEPOSITA>1111111111</DEPOSITA>
      <DEPOSITA>2222222222</DEPOSITA>
      <DEPOSITA>XXXXXXXXXX</DEPOSITA>
    </DEPOSITS>
  </ODO>
  </Infoset>
 
  In this case I would expect the discriminator to create the first infoset (sans the default) but the occursCount to create
  the second infoSet with the default. The reason being that the discriminator is expressly written as 'less than or equal'
  but the occursCount (even though it acts as le while processing) is expressed as a finite number,  But this is a very slight
  distinction.
 
  I've come to the reverse on unparsing...I contend that we consider what the following infoset yields:
 
  <Infoset xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ODO>
    <DEPOSITS>
      <DEPOSIT-COUNT xsi:type="xs:integer">3</DEPOSIT-COUNT>
      <DEPOSITA>1111111111</DEPOSITA>
      <DEPOSITA>2222222222</DEPOSITA>
    </DEPOSITS>
  </ODO>
</Infoset>
 
datastream:   0000311111111112222222222XXXXXXXXXX
 
  or
datastream:   0000311111111112222222222

My gut reaction is the first (with defaults) for occursCount and the second sans default for the discriminator

I'm hoping there are lots of comments! If there is a simpler way to look at this I've missed it thus far  - so please correct me.

Stephanie Fetzer
WebSphere Common Transformation
Industry Packs - Software Engineer



From: Alan Powell <alan_powell@uk.ibm.com>
To: dfdl-wg@ogf.org
Date: 06/02/2010 06:22 AM
Subject: [DFDL-WG] Fw:  Fw: Action 086 Nils and Default processing
Sent by: dfdl-wg-bounces@ogf.org






I have updated based on last weeks call


 
Regards
 
Alan Powell
 
Development - MQSeries, Message Broker, ESB
IBM Software Group, Application and Integration Middleware Software
-------------------------------------------------------------------------------------------------------------------------------------------
IBM
MP211, Hursley Park
Hursley, SO21 2JN
United Kingdom
Phone: +44-1962-815073
e-mail: alan_powell@uk.ibm.com



----- Forwarded by Alan Powell/UK/IBM on 02/06/2010 11:20 -----
From: Alan Powell/UK/IBM@IBMGB
To: dfdl-wg@ogf.org
Date: 25/05/2010 17:27
Subject: [DFDL-WG] Fw: Action 086 Nils and Default processing






All


I have added unparsing and corrected some of the existing information in this latest version.



 

I did attempt to write out the dfdl:nilValueDelimiterPolicy and dfdl:emptyValueDelimiterPolicy options in full but it became unreadable hence the 'as controlled by' short cut.
 
Links still don't work
Regards
 
Alan Powell
 
Development - MQSeries, Message Broker, ESB
IBM Software Group, Application and Integration Middleware Software
-------------------------------------------------------------------------------------------------------------------------------------------
IBM
MP211, Hursley Park
Hursley, SO21 2JN
United Kingdom
Phone: +44-1962-815073
e-mail: alan_powell@uk.ibm.com



----- Forwarded by Alan Powell/UK/IBM on 25/05/2010 17:22 -----
From: Alan Powell/UK/IBM
To: dfdl-wg@ogf.org
Date: 13/05/2010 17:28
Subject: Action 086 Nils and Default processing






All


Attached is an updated version of the nils and defaults sections of the specification. I have only completed the parsing section so far which you should be able to review while I am on vacation. If someone would like to add the unparsing section that would be great.



 
Note that the cross references are not correct.  
Regards
 
Alan Powell
 
Development - MQSeries, Message Broker, ESB
IBM Software Group, Application and Integration Middleware Software
-------------------------------------------------------------------------------------------------------------------------------------------
IBM
MP211, Hursley Park
Hursley, SO21 2JN
United Kingdom
Phone: +44-1962-815073
e-mail: alan_powell@uk.ibm.com



 

 




 

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




 


 

#### dfdl-nils-defaults v2.doc moved to MyAttachments Repository V3.8 (
Link) on 23 May 2010 by Alan Powell.

 

 




 

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




 



--
dfdl-wg mailing list
dfdl-wg@ogf.org

http://www.ogf.org/mailman/listinfo/dfdl-wg

#### dfdl-nils-defaults v3.doc moved to MyAttachments Repository V3.8 (
Link) on 01 June 2010 by Alan Powell.





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





[attachment "dfdl-nils-defaults v4.doc" deleted by Stephanie Fetzer/Charlotte/IBM]
--
 dfdl-wg mailing list
 dfdl-wg@ogf.org
 
http://www.ogf.org/mailman/listinfo/dfdl-wg