Olabusayo Kilo created DAFFODIL-3059:
----------------------------------------

             Summary: prefixed Element can't be bit aligned
                 Key: DAFFODIL-3059
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-3059
             Project: Daffodil
          Issue Type: Bug
          Components: Back End
    Affects Versions: 4.0.0
            Reporter: Olabusayo Kilo


The spec expects the prefixedType of the prefixed element to be 1 (without 
specification of alignment Units). Everything works as expected when alignment 
units is in bytes, with the following schema.
{code:xml}
<xs:include 
schemaLocation="/org/apache/daffodil/xsd/DFDLGeneralFormatPortable.dfdl.xsd"/>
    <dfdl:format
        ref="ex:GeneralFormat"
        representation="text"
        lengthKind="delimited"
        separatorPosition="infix"
        lengthUnits="bytes"
        alignmentUnits="bytes"
        encoding="US-ASCII"
    />
    <xs:simpleType name="prefixType" dfdl:lengthKind="explicit" dfdl:length="1">
      <xs:restriction base="xs:int"/>
    </xs:simpleType>

    <xs:element name="prefixed_element">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="e1" dfdl:lengthKind="implicit"
                      dfdl:fillByte="E">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="c" type="xs:string"
                            dfdl:length="2"
                            dfdl:lengthKind="explicit"
                            dfdl:alignment="2"
                            dfdl:fillByte="C"/>
                <xs:element name="a" type="xs:string"
                            dfdl:prefixLengthType="ex:prefixType"
                            dfdl:prefixIncludesPrefixLength="no"
                            dfdl:lengthKind="prefixed"
                            dfdl:alignment="2"
                            dfdl:fillByte="A"/>
                <xs:element name="b" type="xs:string"
                            dfdl:length="2"
                            dfdl:lengthKind="explicit"
                            dfdl:alignment="2"
                            dfdl:fillByte="B"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
</xs:defineSchema>
{code}
However things break with the following SDE  if alignmentunits = bits, since 
the alignment still has to fulfill the requirement of being 1. But it is going 
to be 1 bit instead, which is illegal for US-ASCII encoding

 

SDE: org.apache.daffodil.tdml.TDMLExceptionImpl: (Implementation: daffodil) 
SchemaDefinitionError: The given alignment (1 bits) must be a multiple of the 
encoding specified alignment (8 bits) for int when representation='text'. 
Encoding: US-ASCII
{code:xml}
<tdml:defineSchema name="s2" elementFormDefault="unqualified">

    <xs:include 
schemaLocation="/org/apache/daffodil/xsd/DFDLGeneralFormatPortable.dfdl.xsd"/>
    <dfdl:format
      ref="ex:GeneralFormat"
      representation="text"
      lengthKind="delimited"
      separatorPosition="infix"
      lengthUnits="bits"
      alignmentUnits="bits"
      encoding="US-ASCII"
    />
    <xs:simpleType name="prefixType" dfdl:lengthKind="explicit" dfdl:length="8">
      <xs:restriction base="xs:int"/>
    </xs:simpleType>

    <xs:element name="prefixed_element">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="e1" dfdl:lengthKind="implicit"
                      dfdl:fillByte="E">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="c" type="xs:string"
                            dfdl:length="16"
                            dfdl:lengthKind="explicit"
                            dfdl:alignment="16"
                            dfdl:fillByte="C"/>
                <xs:element name="a" type="xs:string"
                            dfdl:prefixLengthType="ex:prefixType"
                            dfdl:prefixIncludesPrefixLength="no"
                            dfdl:lengthKind="prefixed"
                            dfdl:alignment="16"
                            dfdl:fillByte="A"/>
                <xs:element name="b" type="xs:string"
                            dfdl:length="16"
                            dfdl:lengthKind="explicit"
                            dfdl:alignment="16"
                            dfdl:fillByte="B"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

  </tdml:defineSchema>
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to