Hmmm, maybe not. I said:
> The unordered sequence can be modeled with a data array
Yet when implemented in MBTK, it throws a fatal error:
fatal: CTDP3148E: Infinite loop at offset 3: The DFDL parser cannot process array element 'ABCarray' because maxOccurs is unbounded and the length of the previous occurrence
was zero.
I think what happens is that on the last pass through the array, it doesn’t find a, b, or c, so it throws a fatal error.
So is this a bug in MBTK? Or can DFDL not model an unordered sequence? Or am I just doing it wrong?
Here’s a sample DFDL schemas that illustrates the point:
<?xml
version="1.0"
encoding="UTF-8"?>
<xsd:schema
xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
xmlns:fmt="http://www.ibm.com/dfdl/GeneralPurposeFormat"
xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import
namespace="http://www.ibm.com/dfdl/GeneralPurposeFormat"
schemaLocation="IBMdefined/GeneralPurposeFormat.xsd"
/>
<xsd:element
ibmSchExtn:docRoot="true"
name="ABC">
<xsd:complexType>
<xsd:sequence
dfdl:separator="">
<xsd:annotation>
<xsd:appinfo
source="http://www.ogf.org/dfdl/">
<dfdl:sequence
/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element
dfdl:occursCountKind="implicit"
maxOccurs="unbounded"
minOccurs="1"
name="ABCarray">
<xsd:complexType>
<xsd:sequence
dfdl:separator="">
<xsd:element
dfdl:length="1"
dfdl:lengthKind="explicit"
dfdl:occursCountKind="implicit"
fixed="a"
minOccurs="0"
name="a"
type="xsd:string"
/>
<xsd:element
dfdl:length="1"
dfdl:lengthKind="explicit"
dfdl:occursCountKind="implicit"
fixed="b"
minOccurs="0"
name="b"
type="xsd:string"
/>
<xsd:element
dfdl:length="1"
dfdl:lengthKind="explicit"
dfdl:occursCountKind="implicit"
fixed="c"
minOccurs="0"
name="c"
type="xsd:string"
/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:annotation>
<xsd:appinfo
source="http://www.ogf.org/dfdl/">
<dfdl:format
ref="fmt:GeneralPurposeFormat"
/>
</xsd:appinfo>
</xsd:annotation>
</xsd:schema>
Test with “abc” as sample input.
From: Garriss Jr., James P.
Sent: Tuesday, March 05, 2013 8:43 AM
To: dfdl-wg@ogf.org
Subject: unordered sequence with constrained occurrences
Suppose text data has 3 constructs: a, b, and c.
·
a must occur 1 time
·
b can occur 0 or 1 time
·
c can occur any number of times, 0 or more
These 3 constructs can appear in any order.
So these are valid inputs:
abc
a
bcccca
But these are not:
ccbcc
abbc
abcabc
Can data like this be modeled with DFDL?
The unordered sequence can be modeled with a data array, like this:
Array (0 to unbounded)
Sequence
a (0 to 1)
b (0 to 1)
c (0 to 1)
/Sequence
/Array
But I don’t know how to constrain the total number of occurrences.
Appreciate any ideas!