I have posed the question to the DFDL-WG. Unless there is some reason why we shouldn't do this, I propose that we add a property to Daffodil to enable this alternate behavior (lifting the restriction), and assuming the prototype implementation proves acceptable, propose this change for DFDL v2.0.
On Tue, Jan 25, 2022 at 11:55 AM Roger L Costello <coste...@mitre.org> wrote: > Still not fixed in Daffodil version 3.2.1 > > > > Bummer. > > > > /Roger > > > > *From:* Roger L Costello <coste...@mitre.org> > *Sent:* Thursday, December 2, 2021 8:00 AM > *To:* users@daffodil.apache.org > *Subject:* Re: Huh? Nillable complex type elements can only have '%ES;' > as their dfdl:nilValue property > > > > Hi Mike, > > > > 1. Would you get the DFDL committee to remove this restriction, please? > > > > 2. I have 350 data formats, each having dozens of fields with nillable > complexTypes. So there is a strong use case for removing the restriction. > > > > 3. The choice idea that you presented, although clever and interesting, is > not suitable. In the example I presented, the output XML should be one of > these: > > > > <MyField>-</MyField> > > > > <MyField> > > <DateTimeIso>…</DateTimeIso> > > </MyField> > > > > <MyField> > > <MonthName>…</MonthName> > > </MyField> > > > > With the technique you showed, the output would be one of these: > > > > <noValue>-</noValue> > > > > <MyField> > > <DateTimeIso>…</DateTimeIso> > > </MyField> > > > > <MyField> > > <MonthName>…</MonthName> > > </MyField> > > > > That first one -- <noValue> -- is not unacceptable to my community. > > > > /Roger > > > > *From:* Mike Beckerle <mbecke...@apache.org> > *Sent:* Wednesday, December 1, 2021 4:06 PM > *To:* users@daffodil.apache.org > *Subject:* [EXT] Re: Huh? Nillable complex type elements can only have > '%ES;' as their dfdl:nilValue property > > > > This is definitely a DFDL language restriction, not a Daffodil-specific > thing. > > > > I have made inquiries as to what the rationale is for this restriction, > and I'll report back. > > > > In the mean time, maybe this sort of technique. > > > > <choice> > > <element name="noValue" type="xs:string" dfdl:lengthKind="explicit" > dfdl:length="0" dfdl:initiator="-"/> > > <element name="myComplexType"> > > .... non nillable complex type definition .... > > </element> > > </choice> > > > > I have to admit that this workaround sort of suggests that there isn't a > coherent rationale for the restriction, as this is pretty obviously > equivalent to the complex type being nillable with nilValue="-". > > > > > > On Wed, Dec 1, 2021 at 12:43 PM Roger L Costello <coste...@mitre.org> > wrote: > > Hi Folks, > > I am creating a DFDL schema for a data format that has a field whose value > is a hyphen when no data is available and when data is available, then the > field contains either an ISO datetime or a 3-letter month name. Here's how > I specified the field: > > <xs:element name="MyField" nillable="true" dfdl:nilValue="-"> > <xs:complexType> > <xs:choice dfdl:choiceLengthKind="implicit"> > <xs:element name="DateTimeIso"> > <xs:complexType> > <xs:sequence> > ... > </xs:sequence> > </xs:complexType> > </xs:element> > <xs:element name="MonthName" type="xs:string" > dfdl:length="3" dfdl:lengthKind="explicit" /> > </xs:choice> > </xs:complexType> > </xs:element> > > When I run it, Daffodil gives this error message: > > [error] Schema Definition Error: Nillable complex type elements can only > have '%ES;' as their dfdl:nilValue property. > > Is that an error in Daffodil? Or, is it an actual DFDL restriction? If the > latter, why is there such a restriction? How do I work around this error? > > /Roger > >