Michael Beckerle created DAFFODIL-2019:
------------------------------------------

             Summary: daf extension property to turn on/off "hexBinary with 
bits" lengthUnits behavior
                 Key: DAFFODIL-2019
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2019
             Project: Daffodil
          Issue Type: Bug
          Components: Compatibility, Front End
    Affects Versions: 2.2.0
            Reporter: Michael Beckerle


We need a property to turn on/off the daffodil extension where xs:hexBinary 
elements can have length expressed in bits.

This functionality, as implemented today (Nov 2018) is backwards incompatible 
with the DFDL spec, so is unlikely to be accepted as part of the DFDL standard; 
hence, a way to turn this on and off, with the default setting to be off, is 
needed.

Specifically, this feature of Daffodil makes the hexBinary infoset contents of 
a hexbinary element dependent on the byteOrder and bitOrder properties. Today, 
in the DFDL spec, xs:hexBinary is independent of these properties, making it 
suddenly dependent on them will change behavior of existing schemas. That just 
won't fly. 

Probably we need to deprecate this functionality and remind users to model such 
data as xs:nonNegativeInteger instead. 

The xs:hexBinary type is really heavily constrained by its role in XSD. E.g., 
it has length facets. This really makes it much more like a text string than 
any sort of universal blob that can represent binary data. It's behavior really 
should be like text strings. My preferred concept for hexBinary is that you 
parse a text string as iso-8859-1 then convert each character to 2 hex digits 
one by one for the infoset. That keeps you out of trouble with length facets, 
etc. 

Users will still want to be able to express that some number of unaligned bits, 
not a multiple of 4 or 8 long, and not starting, nor ending, on a byte 
boundary, is in their data and is not numeric data, so base 10 numeric 
presentation in the infoset is not natural.

Such data can be best modeled as a xs:nonNegativeInteger. Changing the infoset 
presentation of this data so that it looks like hex, not base 10, is not really 
DFDL's primary purpose. It is always possible to convert to xs:hexBinary via 
dfdl:inputValueCalc, and for unparsing, converted back by dfdl:outputValueCalc. 
Alas this is always going to run into the "value element problem", i.e., the 
data would be like:

<myDataBits><hexvalue>F34A37</hexvalue></myDataBits>

where the extra <hexvalue>...</hexvalue> is needed to support the 
dfdl:inputValueCalc/dfdl:outputValueCalc pair, and a hidden group that hides 
the base 10 nonNegativeInteger representation.








--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to