<choice> <element minOccurs="0" .../> .... </choice>
Becomes <choice> <sequence> <element minOccurs="0" .../> </sequence> .... </choice> Now the child of the choice is a non-optional sequence element. On Fri, Mar 25, 2022 at 8:15 AM Roger L Costello <coste...@mitre.org> wrote: > Thank you Steve! > > You've provided a workaround for optional choice: omit minOccurs="0" and > add <xs:sequence/> within the choice. > > Is there a workaround for optional elements in a choice? > > /Roger > > -----Original Message----- > From: Steve Lawrence <slawre...@apache.org> > Sent: Friday, March 25, 2022 8:07 AM > To: users@daffodil.apache.org > Subject: [EXT] Re: Recommended changes to the DFDL language > > One alternative for minOccurs on a choice is to have an empty branch: > > <xs:choice> > <xs:element name="foo" ... /> > <xs:sequence /> > </xs:choice> > > I admit that minOccurs="0" is a little more self documenting. > > I think minOccurs also means something different if there are delimiters > on the choice. For example, say we had these two snippets to implement an > optional choice with a terminator: > > <xs:choice dfdl:terminator="X"> > <xs:element name="foo" ... /> > <xs:sequence /> > </xs:choice> > > and > > <xs:choice dfdl:terminator="X" minOccurs="0"> > <xs:element name="foo" ... /> > </xs:choice> > > In the former, if the X terminator doesn't exist, then it is a parse > error. But in the later case with minOccurs, if the X terminator doesn't > exist then it just means the choice doesn't exist. > > So the semantics are a bit different. All that said, I don't think I've > come across a case where we've absolutely needed minOccurs="0" on a choice, > and not allowing it keeps DFDL simpler. > > As to nillable complex other than %ES;, we have a ticket open to add this > as an experimental feature, currently slated for the next release: > > https://issues.apache.org/jira/browse/DAFFODIL-2636 > > On 3/25/22 7:46 AM, Roger L Costello wrote: > > Hi Folks, > > > > I am converting 350 military data formats to DFDL. > > > > Everyone of the 350 data formats has an optional choice: > > > > <xs:choice minOccurs="0"> > > > > DFDL does not allow optional choice. Why? > > > > I recommend changing the DFDL language to allow optional choice. > > > > Everyone of the 350 data formats has branches of a choice that are > optional: > > > > <xs:choice> > > <xs:element name="foo" minOccurs="0"> > > > > DFDL does not allow branches in a choice to be optional. Why? > > > > I recommend changing the DFDL language to allow optional branches of a > choice. > > > > Many of the 350 data formats have an element with complexType that is > nillable and the nilValue is a hyphen. > > > > DFDL does not allow an element with complexType to have a nilValue > > other than %ES; > > > > I recommend changing the DFDL language to allow elements with > > complexType to have a nilValue other than %ES; > > > > /Roger >