[DFDL-WG] dfdl:prefixLengthType with dfdl:assert on it

Steve Hanson smh at uk.ibm.com
Wed Feb 16 12:36:04 EST 2022


Hi Mike

Unfortunately I can't test this with IBM DFDL, as one of our limitations is that you can't specify assert or discriminator on a global element or global type, and by definition a prefix length type must be global [:-)] .  However, although the DFDL spec does not explicitly say that assert or discriminator can be used  on such a simple type, that's not the way the spec usually works; it usually says when you can't do something. So, given that there is no wording to say you can't, both are allowed.

Regards

Steve Hanson

IBM Integration, Hursley, UK
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
smh at uk.ibm.com<mailto:smh at uk.ibm.com>
tel:+44-7717-378890
Note: I work Tuesday to Friday

-----Original Message-----
From: Mike Beckerle <mbeckerle at apache.org<mailto:Mike%20Beckerle%20%3cmbeckerle at apache.org%3e>>
Reply-To: mbeckerle at apache.org<mailto:mbeckerle at apache.org>
To: DFDL-WG <dfdl-wg at ogf.org<mailto:DFDL-WG%20%3cdfdl-wg at ogf.org%3e>>
Subject: [EXTERNAL] [DFDL-WG] dfdl:prefixLengthType with dfdl:assert on it
Date: Tue, 15 Feb 2022 17:02:31 -0500

I believe the DFDL spec does not specify whether the prefixLengthType for an element of lengthKind 'prefixed' can have assertions, and
if those assertions are evaluated, and when.

Consider this example below. We really want the assert on the bufferPayload type to be evaluated before the length computed from the prefix is used as a length because we'd like good diagnostic behavior that points out that the prefix value is way out of realistic range.

In many formats we see 4-byte length prefixes, but the range of values for specific fields is relatively tiny, often even just 1 to 100. Enforcing this via the assert expressed on the prefixLengthType's simpleType definition makes this easy.

I could go either way on whether a prefixLengthType can carry a discriminator. But an assert should definitely be allowed.


        ...
        <complexType>
          <sequence>
            <element name="payload" type="xs:hexBinary"
                     dfdl:lengthKind="prefixed"
                     dfdl:prefixIncludesPrefixLength="no"
                     dfdl:prefixLengthType="p8:bufferPayload"/>
          </sequence>
        </complexType>
        ...


<simpleType name="bufferPayload">
  <annotation>
    <appinfo source="http://www.ogf.org/dfdl/<http://www.ogf.org/dfdl/>">
      <dfdl:assert>{ dfdl:checkConstraints(.) }</dfdl:assert>
    </appinfo>
  </annotation>
  <restriction base="p8:unsignedLong">
    <minInclusive value="0"/>
    <maxInclusive value="32768"/>
  </restriction>
</simpleType>

--

  dfdl-wg mailing list

  dfdl-wg at ogf.org<mailto:dfdl-wg at ogf.org>

  https://www.ogf.org/mailman/listinfo/dfdl-wg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20220216/d77ef16a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: face-smile.png
Type: image/png
Size: 871 bytes
Desc: face-smile.png
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20220216/d77ef16a/attachment.png>


More information about the dfdl-wg mailing list