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 <slawre...@apache.org> 
Sent: Thursday, August 18, 2022 11:54 AM
To: users@daffodil.apache.org
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>
> 
> 

Reply via email to