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>