Thanks Steve. Unfortunately, specifying an explicit length on each element is
not going to work. The second element - LatitudeMinutes - can actually be 2, 4,
5, 6, or 7 characters in length:
<xs:element name="LatitudeMinutes">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}"/>
<xs:pattern value="[0-9]{2}\.[0-9]{1}"/>
<xs:pattern value="[0-9]{2}\.[0-9]{2}"/>
<xs:pattern value="[0-9]{2}\.[0-9]{3}"/>
<xs:pattern value="[0-9]{2}\.[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
And after it are more elements. For example, following it is this element
<xs:element name="Hemisphere">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="N"/>
<xs:enumeration value="S"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
How to handle this situation?
/Roger
-----Original Message-----
From: Steve Lawrence <[email protected]>
Sent: Thursday, August 18, 2022 11:54 AM
To: [email protected]
Subject: [EXT] Re: Bug in Daffodil
You haven't specified a length of the LatitudeDegrees (or
LatitudeMinutes). So the lengthKind is just delimited and so will end up
delimited by the nearest enclosing delimiter, which is the /. So
LatatitudeDegrees is parsed as "2006", and things go off the rails.
Instead, you want your LatitudeDegrees/Minutes elements to have
lengthKind="explicit" with length="2", e.g.:
<xs:element name="Origin">
<xs:complexType>
<xs:sequence>
<xs:element name="LatitudeDegrees"
dfdl:lengthKind="explicit" dfdl:length="2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LatitudeMinutes"
dfdl:lengthKind="explicit" dfdl:length="2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
On 8/18/22 11:08 AM, Roger L Costello wrote:
> Hi Folks,
>
> Daffodil is unable to parse DFDL schemas containing two consecutive element
> declarations, each with a simpleType which has a facet.
>
> With this input:
>
> John Doe/2006/Sally Smith
>
> The part of interest is the middle part - 2006 - which consists of two
> subparts: 20 (LatitudeDegrees) and 06 (LatitudeMinutes). Each subpart is
> constrained via XSD facets.
>
> I get this error message when I parse using Daffodil version 3.2.1 (using the
> -V limited option):
>
> [error] Validation Error: LatitudeMinutes failed facet checks due to: facet
> enumeration(s): 06
>
> Below is my DFDL schema.
>
> I believe this is a bug, yes? Is there a workaround?
>
> <xs:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
> xmlns:xs="http://www.w3.org/2001/XMLSchema">
> <xs:annotation xmlns:f="function"
> xmlns:fn="http://www.w3.org/2005/xpath-functions"
> xmlns:regex="regex-functions">
> <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="Origin">
> <xs:complexType>
> <xs:sequence dfdl:separator="">
> <xs:element name="LatitudeDegrees">
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:pattern value="[0-9]{2}"/>
> </xs:restriction>
> </xs:simpleType>
> </xs:element>
> <xs:element name="LatitudeMinutes">
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <!--<xs:pattern
> value="[0-9]{2}"/>--> <!-- This also fails -->
> <xs:enumeration value="06" />
> </xs:restriction>
> </xs:simpleType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> <xs:element name="B" type="xs:string" />
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> </xs:schema>
>
>