Hi
I hope someone can point me in the right direction to help me understand 
behaviour I have seen with a particular schema when parsing a file.
I have a schema modelled on the NACHA schema files found in the 
DFDLSchemas/NACHA directory on github. In my case, with respect to optional 
(embedded) looping elements:

1.       Parsing is unsuccessful when maxOccurs attribute is set to "unbounded" 
(Parse Error: Failed to populate ControlRecord[1]. Cause: Parse Error: 
Assertion failed: Not Control Record);

2.       Parsing is successful when maxOccurs is limited to say "999".
Below is a snippet from the schema referred to above that results in error:
<!-- F LOOP -->
<xs:element dfdl:lengthKind="implicit" name="F_Records" minOccurs="0">
  <xs:complexType>
    <xs:sequence>
      <xs:element dfdl:lengthKind="implicit" name="F_Record" minOccurs="0" 
maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="F01_Record" minOccurs="0" />
            <xs:element dfdl:lengthKind="implicit" name="F02_Records" 
minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="F02_Record" minOccurs="0" 
maxOccurs="unbounded" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

I have attached schema files that demonstrate this issue, so I hope someone can 
advise me on what I should be correctly doing.
I am using the Daffodil 2.4.0 release as well as the 2.5 snapshot JAVA APIs, 
and both show similar behaviour; I have also seen this behaviour when running 
the files though the daffodil command line, with the following tunables
"unqualifiedPathStepPolicy" = "defaultNamespace"
"suppressSchemaDefinitionWarnings" = "multipleChoiceBranches noEmptyDefault"

Peter

This e-mail and any attachment is intended for the party to which it is 
addressed and may contain confidential information or be subject to 
professional privilege. Its transmission in not intended to place the contents 
into the public domain. If you have received this e-mail in error, please 
notify us immediately and delete the email and all copies. AWTA Ltd does not 
warrant that this e-mail is virus or error free. By opening this e-mail and any 
attachment the user assumes all responsibility for any loss or damage resulting 
from such action, whether or not caused by the negligence of AWTA Ltd. The 
contents of this e-mail and any attachments are subject to copyright and may 
not be reproduced, adapted or transmitted without the prior written permission 
of the copyright owner.
<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="unqualified" targetNamespace="pug" xmlns="pug" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"; xmlns:ref="http://example.com/dfdl/PUGFormat"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:fn="http://www.w3.org/2005/xpath-functions";>                                       
    
    <xs:include schemaLocation="pug_types.xsd" />
    <xs:include schemaLocation="pug_records.xsd" />
        
    <xs:import namespace="http://example.com/dfdl/PUGFormat"; schemaLocation="pug_format.xsd" />
        
    <xs:annotation>
        <xs:appinfo source="http://www.ogf.org/dfdl/";>
            <dfdl:format ref="ref:PUGFormat"/>
        </xs:appinfo>
    </xs:annotation>               
    
    <xs:annotation><!-- File --></xs:annotation>

    <xs:element dfdl:lengthKind="implicit" name="PUGFile">
        <xs:complexType>
            <xs:sequence>                            
                <xs:element dfdl:lengthKind="implicit" name="XMT_Records">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element dfdl:lengthKind="implicit" minOccurs="1" maxOccurs="unbounded" name="XMT_Record">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element ref="HeaderRecord" />
                                        
                                        <xs:choice dfdl:choiceLengthKind="implicit">
                                            <xs:sequence>
                                                <xs:element ref="Request_Entry" minOccurs="1" />
                                            </xs:sequence>
                                            
                                            <xs:sequence>
                                                <xs:choice dfdl:choiceLengthKind="implicit">
                                            
                                                    <!-- Catalogues 02 -->
                                                    <xs:sequence>
                                                        <xs:annotation>
                                                            <xs:appinfo source="http://www.ogf.org/dfdl/";>
                                                                <dfdl:discriminator>{./HeaderRecord/TransmissionType eq '02'}</dfdl:discriminator>
                                                            </xs:appinfo>
                                                        </xs:annotation>
                                                        <xs:element maxOccurs="unbounded" minOccurs="1" ref="Catalogue_Entry" />                                                
                                                    </xs:sequence>
                                                                                        
                                                    <!-- Otherwise it is unsupported -->
                                                    <xs:sequence> 	
                                                        <xs:annotation>
                                                            <xs:appinfo source="http://www.ogf.org/dfdl/";>
                                                                <dfdl:assert message="Unsupported Transmission Type Code(s)">{fn:false()}</dfdl:assert>
                                                            </xs:appinfo>
                                                        </xs:annotation>
                                                    </xs:sequence>                                                    
                                                </xs:choice>
                                            </xs:sequence>
                                        </xs:choice>
                                        
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                                
                <!-- And the final record(s) is the transmission totals record 99 -->                
                
                <xs:element dfdl:lengthKind="implicit" name="ControlRecords">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="ControlRecord" minOccurs="1" maxOccurs="unbounded" />                                                
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>                            
            </xs:sequence>
        </xs:complexType>
    </xs:element>                 
                                  
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://example.com/dfdl/PUGFormat"; xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"; xmlns:xs="http://www.w3.org/2001/XMLSchema";>
       
    <xs:annotation>
        <xs:appinfo source="http://www.ogf.org/dfdl/";>            
            <dfdl:defineFormat name="PUGFormatReference">
                <dfdl:format
                    alignment="1"
                    alignmentUnits="bytes"
                    binaryFloatRep="ieee"
                    binaryNumberCheckPolicy="lax"
                    binaryNumberRep="binary"
                    binaryCalendarEpoch="1970-01-01T00:00:00"
                    bitOrder="mostSignificantBitFirst"
                    byteOrder="bigEndian"
                    calendarCenturyStart="53"
                    calendarCheckPolicy="strict"
                    calendarDaysInFirstWeek="4"
                    calendarFirstDayOfWeek="Sunday"
                    calendarLanguage="en"
                    calendarObserveDST="yes"
                    calendarPatternKind="implicit"
                    calendarTimeZone=""
                    choiceLengthKind="implicit"
                    decimalSigned="yes"
                    documentFinalTerminatorCanBeMissing="no"
                    emptyValueDelimiterPolicy="both"
                    encodingErrorPolicy="replace"
                    encoding="US-ASCII"
                    escapeSchemeRef=""
                    fillByte="%#r20;"
                    floating="no"
                    ignoreCase="no"
                    initiatedContent="no"
                    initiator=""
                    leadingSkip="0"
                    lengthKind="implicit"
                    lengthUnits="bytes"
                    occursCountKind="implicit"
                    outputNewLine="%LF;"
                    representation="text"
                    separator=""
                    separatorPosition="infix"
                    separatorSuppressionPolicy="anyEmpty"
                    sequenceKind="ordered"
                    terminator=""
                    textBidi="no"
                    textBooleanPadCharacter="%SP;"
                    textCalendarJustification="left"
                    textCalendarPadCharacter="%SP;"
                    textNumberCheckPolicy="lax"
                    textNumberJustification="right"
                    textNumberPadCharacter="%SP;"
                    textNumberPattern="#,##0.###;-#,##0.###"
                    textNumberRep="standard"
                    textNumberRounding="explicit"
                    textNumberRoundingIncrement="0"
                    textNumberRoundingMode="roundHalfEven"
                    textOutputMinLength="0"
                    textPadKind="none"
                    textStandardBase="10"
                    textStandardDecimalSeparator="."
                    textStandardExponentRep="E"
                    textStandardGroupingSeparator=","
                    textStandardInfinityRep="Inf"
                    textStandardNaNRep="NaN"
                    textStandardZeroRep="0"
                    textStringJustification="left"
                    textStringPadCharacter="%SP;"
                    textTrimKind="none"
                    trailingSkip="0"
                    truncateSpecifiedLengthString="no"
                    utf16Width="fixed"
                />
            </dfdl:defineFormat>
            
            <dfdl:defineFormat name="PUGFormat">
                <dfdl:format ref="PUGFormatReference"
                    calendarTimeZone="UTC"                        
                    encodingErrorPolicy="error"
                    lengthKind="explicit"                                                                
                />   
            </dfdl:defineFormat>
            
            <!-- WIEDPUG record properties, allowing optional line feed -->            
            <dfdl:defineFormat name="PUGRecord">
                <dfdl:format                                         
                    length="80"                                         
                    lengthKind="explicit"   
                    outputNewLine="%CR;%LF;"                                      
                    terminator="%WSP*;" 
                />
            </dfdl:defineFormat>

        </xs:appinfo>
    </xs:annotation>                                                         
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="pug" xmlns="pug" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:ref="http://example.com/dfdl/PUGFormat"; >        
        
    <xs:include schemaLocation="pug_types.xsd" />    
    
    <xs:import namespace="http://example.com/dfdl/PUGFormat"; schemaLocation="pug_format.xsd" />
    
    <xs:annotation>
        <xs:appinfo source="http://www.ogf.org/dfdl/";>
            <dfdl:format ref="ref:PUGFormat"/>
        </xs:appinfo>
    </xs:annotation>                          

    <xs:annotation><!-- Header Record 00 --></xs:annotation>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="HeaderRecord">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Not File Header Record">{. eq '00'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Filler" dfdl:length="54" type="alphanumeric_string" />                
                <xs:element ref="TransmissionType" />                
                <xs:element name="Reserved" dfdl:length="22" type="alphanumeric_string" />         
            </xs:sequence>
        </xs:complexType>
    </xs:element>
            
    <xs:annotation><!-- Control Record 99 --></xs:annotation>
     
    <xs:element dfdl:ref="ref:PUGRecord" name="ControlRecord">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Not Control Record">{. eq '99'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Data" dfdl:length="78" type="alphanumeric_string" />                
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="ExtraRecord">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Payload" dfdl:length="80" type="alphanumeric_string">
                </xs:element>                
            </xs:sequence>
        </xs:complexType>
    </xs:element>    
    
    <xs:element dfdl:ref="ref:PUGRecord" name="IOE_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'IE'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="W01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '10'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="W02_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '11'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'A'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="W03_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '11'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'B'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="L01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '20'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="L02_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '21'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'A'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="L03_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '21'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'B'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="L04_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '21'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'C'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="L05_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '25'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'A'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="D01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'C'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="D02_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'F'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="D03_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'I'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="D04_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'J'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="D05_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'K'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="D06_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'L'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="D07_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'M'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="D08_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'P'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
                               
    <xs:element dfdl:ref="ref:PUGRecord" name="D09_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'X'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
                                 
    <xs:element dfdl:ref="ref:PUGRecord" name="D10_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '48'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'N'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
                                 
    <xs:element dfdl:ref="ref:PUGRecord" name="F01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '31'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="F02_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '32'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'A'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="C01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '79'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'A'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="B01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '79'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="RecordSubType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq 'B'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>                
                <xs:element dfdl:length="77" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:ref="ref:PUGRecord" name="B02_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Error">{. eq '84'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Catalogue Entry -->
        
    <xs:element dfdl:lengthKind="implicit" name="Catalogue_Entry">
        <xs:complexType>
            <xs:sequence>
                <!-- Setup the InclusionOrExclusion list -->                             
                <xs:element dfdl:lengthKind="implicit" name="IOE_Records" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>                 	                                                                
                            <xs:element ref="IOE_Record" minOccurs="0" maxOccurs="99" />                                                            
                        </xs:sequence>	
                    </xs:complexType>
                </xs:element>
                
                <!-- W LOOP -->
                <xs:element dfdl:lengthKind="implicit" name="W_Records" minOccurs="1">
                    <xs:complexType>
                        <xs:sequence>                 	                                                                
                            <xs:element dfdl:lengthKind="implicit" name="W_Record" minOccurs="1" maxOccurs="unbounded">                                                                
                                <xs:complexType>
                                    <xs:sequence>                 	                                                                                                
                                        <xs:element ref="W01_Record" />
                                        <xs:element ref="W02_Record" />
                                        <xs:element ref="W03_Record" minOccurs="0" />
                                
                                        <!-- L LOOP -->
                                        <xs:element dfdl:lengthKind="implicit" name="L_Records" minOccurs="1">
                                            <xs:complexType>
                                                <xs:sequence>                 	                                                                
                                                    <xs:element dfdl:lengthKind="implicit" name="L_Record" minOccurs="1" maxOccurs="unbounded" >                                                                
                                                        <xs:complexType>
                                                            <xs:sequence>                 	                                                                
                                                                <xs:element ref="L01_Record" minOccurs="0" />
                                                                <xs:element ref="L02_Record" minOccurs="0" />
                                                                
                                                                <xs:element dfdl:lengthKind="implicit" name="L03_Records" minOccurs="0">                                                                
                                                                    <xs:complexType>
                                                                        <xs:sequence>                 	                                                                
                                                                            <xs:element ref="L03_Record" minOccurs="0" maxOccurs="9999" />
                                                                        </xs:sequence>
                                                                    </xs:complexType>
                                                                </xs:element>
                                                                            
                                                                <xs:element ref="L04_Record" minOccurs="0" />
                                                                            
                                                                <xs:element dfdl:lengthKind="implicit" name="L05_Records" minOccurs="1">                                                                 
                                                                    <xs:complexType>
                                                                        <xs:sequence>                 	                                                                
                                                                            <xs:element ref="L05_Record" minOccurs="1" maxOccurs="unbounded" />
                                                                        </xs:sequence>
                                                                    </xs:complexType>
                                                                </xs:element>
                                                                
                                                                <!-- DETAILS -->
                                                                <xs:element ref="D01_Record" minOccurs="0" />
                                                                <xs:element ref="D02_Record" minOccurs="0" />
                                                                <xs:element ref="D03_Record" minOccurs="0" />
                                                                <xs:element ref="D04_Record" minOccurs="0" />
                                                                <xs:element ref="D05_Record" minOccurs="0" />
                                                                <xs:element ref="D06_Record" minOccurs="0" />
                                                                <xs:element ref="D07_Record" minOccurs="0" />
                                                                <xs:element ref="D08_Record" minOccurs="0" />
                                                                <xs:element ref="D09_Record" minOccurs="0" />
                                                                <xs:element ref="D10_Record" minOccurs="0" />
                                                                
                                                                <!-- F LOOP -->                                                                
                                                                <xs:element dfdl:lengthKind="implicit" name="F_Records" minOccurs="0">                                                                
                                                                    <xs:complexType>
                                                                        <xs:sequence> 
                                                                            <xs:element dfdl:lengthKind="implicit" name="F_Record" minOccurs="0" maxOccurs="9999">                                                                
                                                                                <xs:complexType>
                                                                                    <xs:sequence> 
                                                                                        <xs:element ref="F01_Record" minOccurs="0" />   
                                                                                                                                                                                  
                                                                                        <xs:element dfdl:lengthKind="implicit" name="F02_Records" minOccurs="0">                                                                
                                                                                            <xs:complexType>
                                                                                                <xs:sequence>                 	                                                                
                                                                                                    <xs:element ref="F02_Record" minOccurs="0" maxOccurs="9999" />
                                                                                                </xs:sequence>
                                                                                            </xs:complexType>
                                                                                        </xs:element>
                                                                                        
                                                                                    </xs:sequence>
                                                                                </xs:complexType>                                                                                            
                                                                            </xs:element>
                                                                        </xs:sequence>                                                                            
                                                                    </xs:complexType>
                                                                </xs:element>
                                                                
                                                                <xs:element ref="C01_Record" minOccurs="0" />   
                                                                
                                                                <!-- B LOOP -->
                                                                <xs:element dfdl:lengthKind="implicit" name="B_Records" minOccurs="0">
                                                                    <xs:complexType>
                                                                        <xs:sequence>                 	                                                                
                                                                            <xs:element dfdl:lengthKind="implicit" name="B_Record" minOccurs="0" maxOccurs="9999">   
                                                                                <xs:complexType>
                                                                                    <xs:sequence>                 	                                                                
                                                                                        <xs:element ref="B01_Record" minOccurs="0" />
                                                                                        
                                                                                        <xs:element dfdl:lengthKind="implicit" name="B02_Records" minOccurs="0">
                                                                                            <xs:complexType>
                                                                                                <xs:sequence>                 	                                                                                                                    
                                                                                                    <xs:element ref="B02_Record" minOccurs="0" maxOccurs="9999" />                                                                                                                      
                                                                                                </xs:sequence>	
                                                                                            </xs:complexType>
                                                                                        </xs:element>                                                                                                
                                                                                        
                                                                                    </xs:sequence>	
                                                                                </xs:complexType>
                                                                            </xs:element>
                                                                        </xs:sequence>	
                                                                    </xs:complexType>
                                                                </xs:element>
                                                                                                                                                                     
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                    
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            
                        </xs:sequence>	
                    </xs:complexType>
                </xs:element>                                
                
            </xs:sequence>	
        </xs:complexType>
    </xs:element>
    
    <xs:element dfdl:ref="ref:PUGRecord" name="R01_Record">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="RecordType">
                    <xs:annotation>
                        <xs:appinfo source="http://www.ogf.org/dfdl/";>
                            <dfdl:assert message="Not Request Record">{. eq '66'}</dfdl:assert>
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
                <xs:element dfdl:length="78" name="Payload" type="alphanumeric_string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element dfdl:lengthKind="implicit" name="Request_Entry">
        <xs:complexType>
            <xs:sequence>               
                <xs:element ref="R01_Record" />                
            </xs:sequence>	
        </xs:complexType>
    </xs:element>



</xs:schema>    
<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="pug" xmlns="pug" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:ref="http://example.com/dfdl/PUGFormat"; >

    <xs:import namespace="http://example.com/dfdl/PUGFormat"; schemaLocation="pug_format.xsd"/>
    
    <xs:annotation>
        <xs:appinfo source="http://www.ogf.org/dfdl/";>
            <dfdl:format ref="ref:PUGFormat"/>
        </xs:appinfo>
    </xs:annotation>           
            
    <xs:element dfdl:length="77" name="Payload77" type="alphanumeric_string" />    

    <xs:element dfdl:length="78" name="Payload78" type="alphanumeric_string" />    
    
    <xs:element dfdl:length="2" name="TransmissionType" type="alphanumeric_string" />    
    
    <xs:element dfdl:length="76" name="Reserved" type="alphanumeric_string" />    
    
    <xs:element dfdl:length="2" name="RecordType" type="alphanumeric_string" />

    <xs:element dfdl:length="1" name="RecordSubType" type="alphanumeric_string" />
                                                                    
    <xs:simpleType name="alphanumeric_string">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    
</xs:schema>    

Reply via email to