I think it doesn't work because the nilValue in this element doesn't accept the data:
<xs:element name="RunwayNum_" type="xs:string" nillable="true" dfdl:nilKind="literalValue" dfdl:nilValue="%WSP*;-"> <xs:annotation> <xs:appinfo source=" http://www.ogf.org/dfdl/"> <dfdl:assert>{ fn:nilled(.) }</dfdl:assert> </xs:appinfo> </xs:annotation> </xs:element> That is delimited (from the default format), but the nilValue doesn't allow for any characters after the hyphen, so it doesn't match and doesn't become nil. I think making the nil value "%WSP*;-%WSP*;" should fix it. As for why those properties can't go on the root element, that's because your root element has complex type, and none of those properties are applicable to complex types. Those properties all apply to simple types with text representation or even more narrowly, just string type. On Wed, Aug 31, 2022 at 1:03 PM Roger L Costello <coste...@mitre.org> wrote: > Hi Folks, > > > > I am creating a DFDL schema for this category of field: > > > > Fixed length, nillable, not composite, choice > > > > My input contains data about a runway. The field is fixed length(7), > nillable (hyphen), and a choice of non-composite values. Here are sample > inputs: > > > > .../24L-36R/... > > .../24L /... > > .../ - /... > > > > The first two samples work, the last one fails and Daffodil reports: > > > > [error] Parse Error: All choice alternatives failed. Reason(s): List(Parse > Error: Alternative failed. Reason(s): List(Parse Error: Assertion failed: { > fn:nilled(.) } failed > > > > My DFDL schema employs the techniques that Mike and Steve gave last week: > make the choice branch for the nil value first, and use checkConstraints(). > So why am I getting the error? How do I fix it? > > > > Second question: The top-level element (RunwayWrapper) contains just these > two properties: > > > > dfdl:lengthKind="explicit" > > dfdl:length="7" > > > > I thought that I should also be able to also specify these properties on > the top-level element: > > > > dfdl:textTrimKind="padChar" > > dfdl:textPadKind="padChar" > > dfdl:textStringPadCharacter="%SP;" > > dfdl:textStringJustification="left" > > > > But Daffodil ignores those properties and generates this warning message > (and others): > > > > [warn] Schema Definition Warning: DFDL property was ignored: > textPadKind="padChar" > > > > Why can’t I put those properties on the top-level element? > > > > Here is my DFDL schema: > > > > <?xml version="1.0" encoding="UTF-8"?> > > <xs:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > xmlns:fn="http://www.w3.org/2005/xpath-functions"> > > <xs:annotation> > > <xs:appinfo source="http://www.ogf.org/dfdl/"> > > <dfdl:format alignment="1" > > alignmentUnits="bytes" > > emptyValueDelimiterPolicy="none" > > encoding="ASCII" > > encodingErrorPolicy="replace" > > escapeSchemeRef="" > > fillByte="%SP;" > > floating="no" > > ignoreCase="yes" > > initiatedContent="no" > > initiator="" > > leadingSkip="0" > > lengthKind="delimited" > > lengthUnits="characters" > > nilValueDelimiterPolicy="none" > > occursCountKind="implicit" > > outputNewLine="%CR;%LF;" > > representation="text" > > separator="" > > separatorSuppressionPolicy="anyEmpty" > > sequenceKind="ordered" > > textBidi="no" > > textPadKind="none" > > textTrimKind="none" > > trailingSkip="0" > > truncateSpecifiedLengthString="no" > > terminator="" > > textNumberRep="standard" > > textStandardBase="10" > > textStandardZeroRep="0" > > textNumberRounding="pattern" > > textStandardExponentRep="E" > > textNumberCheckPolicy="strict"/> > > </xs:appinfo> > > </xs:annotation> > > <xs:element name="Test"> > > <xs:complexType> > > <xs:sequence dfdl:separator="/" dfdl:separatorPosition="infix"> > > <xs:element name="A" type="xs:string" /> > > <xs:element name="RunwayWrapper" > > dfdl:lengthKind="explicit" > > dfdl:length="7"> > > <xs:complexType> > > <xs:choice dfdl:choiceLengthKind="implicit"> > > <xs:element name="RunwayNum_" type="xs:string" > > nillable="true" > > dfdl:nilKind="literalValue" > > > dfdl:nilValue="%WSP*;-"> > > <xs:annotation> > > <xs:appinfo source=" > http://www.ogf.org/dfdl/"> > > <dfdl:assert>{ fn:nilled(.) > }</dfdl:assert> > > </xs:appinfo> > > </xs:annotation> > > </xs:element> > > <xs:element name="RunwayNum"> > > <xs:complexType> > > <xs:choice > dfdl:choiceLengthKind="implicit"> > > <xs:element name="RunwayShort" > > > > dfdl:textTrimKind="padChar" > > > dfdl:textPadKind="padChar" > > > dfdl:textStringPadCharacter="%SP;" > > > > dfdl:textStringJustification="left"> > > <xs:annotation> > > <xs:appinfo source=" > http://www.ogf.org/dfdl/"> > > <dfdl:assert > message="Invalid RunwayShort value">{ dfdl:checkConstraints(.) > }</dfdl:assert> > > </xs:appinfo> > > </xs:annotation> > > <xs:simpleType> > > <xs:restriction > base="xs:string"> > > <xs:pattern > value="[0-9]{2,2}(C|L|R){0,1}"/> > > </xs:restriction> > > </xs:simpleType> > > </xs:element> > > <xs:element name="RunwayLong" > > > > dfdl:textTrimKind="padChar" > > > dfdl:textPadKind="padChar" > > > dfdl:textStringPadCharacter="%SP;" > > > dfdl:textStringJustification="left"> > > <xs:annotation> > > <xs:appinfo source=" > http://www.ogf.org/dfdl/"> > > <dfdl:assert > message="Invalid RunwayLong value">{ dfdl:checkConstraints(.) > }</dfdl:assert> > > </xs:appinfo> > > </xs:annotation> > > <xs:simpleType> > > <xs:restriction > base="xs:string"> > > <xs:pattern > value="[0-9]{2,2}(C|L|R){0,1}-[0-9]{2,2}(C|L|R){0,1}"/> > > </xs:restriction> > > </xs:simpleType> > > </xs:element> > > </xs:choice> > > </xs:complexType> > > </xs:element> > > </xs:choice> > > </xs:complexType> > > </xs:element> > > <xs:element name="B" type="xs:string" /> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > </xs:schema> >