[DFDL-WG] Initiator with leading variable text

Steve Hanson smh at uk.ibm.com
Tue Mar 25 06:34:10 EDT 2014


Hi John

DFDL does not support regex in initiators, but that's not a problem as I 
think the best way to model this is using discriminators. 

Try a model that looks like this, where (s) means xs:sequence and (c) 
means xs:choice.  I've assumed that there could be several records 
following CONTROLRECORD, of varying types.

Data (s)
  Header (s) (1:1)
  Body (s) (0:unbounded)
    Control (s) (1:1)
    Record (c) (0:unbounded)
      Type1 (s) (1:1)
      Type2 (s) (1:1)
       ...
       TypeN (s) (1:1) 
  Trailer (s) (1:1)

In each record, model the prefix number as an integer element and the 
record type as a string element. 

Use a discriminator on the record type of Control and each Type1, Type2 
etc, that checks the value is the one expected, eg: 

<dfdl:discriminator test="{. eq 'CONTROLRECORD'} />
<dfdl:discriminator test="{. eq 'RECORDTYPE1'} />

Here's how this works, using your data as an example:

- Parser parses Header - success
- Parser goes into Body 1
- Parser parses Control 
- Discriminator is true - success - we are in Body 1
- Parser goes into Record 1
- Parser assumes Type1 and parses it
- Discriminator is true - success - we are in Record 1
- Parser goes into Record 2
- Parser assumes Type 1 and parses it
- Discriminator is false (because record type is 'CONTROLRECORD') - parser 
backtracks
- Parser assumes Type 2 and parses it
- Discriminator is false (because record type is 'CONTROLRECORD') - parser 
backtracks
 - <repeat until all branches tried>
- Parser can't match any branch of the choice so concludes that there is 
no Record 2
- Parser goes into Body 2
- Parser parses Control 
- Discriminator is true - success - we are in Body 2
- Parser goes into Record 1
- Parser assumes Type1 and parses it
- Discriminator is true - success - we are in Record 1
- Parser goes into Record 2
- Parser assumes Type1 and parses it
- Discriminator is false (because record type is 'CONTROLRECORD') - parser 
backtracks
- Parser assumes Type 2 and parses it
- Discriminator is false (because record type is 'CONTROLRECORD') - parser 
backtracks
 - <repeat until all branches tried>
- Parser can't match any branch of the choice so concludes that there is 
no Record 2
- Parser goes into Body 3
- Parser parses Control 
- Discriminator is false (because record type is 'TRAILER') - parser 
backtracks
- Parser concludes that there is no Body 3
- Parser parses Trailer - success

The NACHA schemas on GitHub follow a similar style to your example. 
https://github.com/DFDLSchemas/NACHA
 
Regards
 
Steve Hanson
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
IBM SWG, Hursley, UK
smh at uk.ibm.com
tel:+44-1962-815848



From:   John Coutinh <john.coutinh at gmail.com>
To:     dfdl-wg at ogf.org, 
Date:   25/03/2014 02:47
Subject:        [DFDL-WG] Initiator with leading variable text
Sent by:        dfdl-wg-bounces at ogf.org



Hi All,
I have the following data to parse.

0000|HEADER|value1|value2|value3
0001|CONTROLRECORD|value1|value2|value3
0001|RECORDTYPE1|value101|value101
0002|CONTROLRECORD|value10|value20|value30
0002|RECORDTYPE1|value1010|value1010
0000|TRAILER|value1|value2|value3

The header and trailer are always prefixed with '0000'. I am having 
trouble with the CONTROLRECORD.
The number '0001' before '|CONTROLRECORD|' applies to following record 
types until the next number|CONTROLRECORD|. 
Can an initiator include a regular expression as part of it's text. If 
however possible, could an example be provided.
I tried using setVariable based on the number with no success.

Any ideas would be appreciated.
Thanks
John--
  dfdl-wg mailing list
  dfdl-wg at ogf.org
  https://www.ogf.org/mailman/listinfo/dfdl-wg

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/20140325/72e6667c/attachment.html>


More information about the dfdl-wg mailing list