released: true apache: true title: 2.4.0 date: 2019-07-12 summary: > Improved DFDL schema compatibility, new extensions, explicit length choices, better DFDL schema validation, and many bug fixes.

source-dist: - “apache-daffodil-2.4.0-incubating-src.zip”

binary-dist: - “apache-daffodil-2.4.0-incubating-bin.tgz” - “apache-daffodil-2.4.0-incubating-bin.zip” - “apache-daffodil-2.4.0-incubating-bin.msi” - “apache-daffodil-2.4.0.incubating-1.noarch.rpm”

scala-version: 2.12


Explicit Length Choices

Support is added for the property dfdl:choiceLengthKind="explicit" and dfdl:choiceLength. Previously, Daffodil ignored the choiceLengthKind property, always acting as if it had the value of implicit. The property is now required to be defined in scope for all choices.

  • {% jira 640 %} choiceLengthKind=‘explicit’

Extension Namespace

A new dfdlx namespace (http://www.ogf.org/dfdl/dfdl-1.0/extensions) was created to support Daffodil extensions to the DFDL specification. The existing daf namespace is deprecated and all uses should be switched to dfdlx. Some properties, such as the layering extension properties are also moved to this namespace with backwards compatibility supported for now. Extensions should be considered experimental--support may change or be removed in a future release.

  • {% jira 2096 %} Add dfdlx extensions namespace prefix. Convert existing extensions to this namespace.

Extension: Empty Element Parse Policy [Proposal]

A new DFDL property named dfdlx:emptyElementParsePolicy is added to control the behavior of empty string and hexBinary elements. This property allows one to switch between different behaviors for empty elements which correspond to currently described behavior in the DFDL v1.0 specification document, and an alternate behavior planned for future inclusion in the DFDL v1.0 specification which also increase compatibility with IBM DFDL.

  • {% jira 110 %} Implement separator suppression policies
  • {% jira 1080 %} RepUnbounded Error: Sequence of Optional Comma-separated String items
  • {% jira 1400 %} broken test: test_text_entities_6_03b - separators with different encoding than terms they separate
  • {% jira 1919 %} Trailing Separator Suppression
  • {% jira 1975 %} Incorrect separator behavior - missing separator for empty sequence (non-backward compatible)
  • {% jira 1976 %} Incorrect creation of empty-string element
  • {% jira 2134 %} emptyElementParsePolicyError not accepted as warning ID in TDML define config.
  • {% jira 2135 %} Array index not maintained properly. Causes nillable failures among others.
  • {% jira 2143 %} dfdl:initiatedContent=“yes” on sequence should only affect optional children
  • {% jira 2154 %} nilled element of zero length inside optional complex element is deleted
  • {% jira 2162 %} direct dispatch choice that has an array branch causes abort during compilation

Extension: Enumeration Values [Proposal]

New DFDL properties and functions are added to support translation of enumeration values.

  • {% jira 2107 %} Implement Enum Support
  • {% jira 2146 %} Incorrectly recognize keyset-value transform as identity transfrom
  • {% jira 2148 %} No compile time error when using nonexistent TypeCalc function
  • {% jira 2165 %} Add *Double functions to the typeCalc family of functions

Extension: Ranged Direct Dispatch [Proposal]

A new property named dfdlx:choiceBranchKeyRanges is added to support direct dispatch based on a range of numeric values.

  • {% jira 2157 %} Implement choiceBranchKeyRanges

Extension: Lookahead Expression Function [Proposal]

A new DFDL expression function named dfdlx:lookAhead() is added to support a simple way to consider data that occurs at a future point in the bitstream.

  • {% jira 2140 %} Implement dfdl:lookAhead()

Improved DFDL Schema Validation

Daffodil now does a better job at validating attribute-, short-, and element-form DFDL properties, which will now result in an error if unknown properties are used, mostly commonly caused by typos. Additionally, if DFDL properties are ignored (e.g. dfdl:textPattern is provided when dfdl:lengthKind is not “pattern”), Daffodil will now provide a warning.

  • {% jira 598 %} No validation of short-form DFDL properties
  • {% jira 1619 %} Warn of when dfdl annotations are ignored
  • {% jira 2142 %} DFDL annotation on complex type is silently ignored
  • {% jira 2150 %} Excessive emptyElementParsePolicy warnings
  • {% jira 2163 %} False warning about unused dfdl:choiceBranchKey on direct dispatch array

Deprecation/Compatibility

The following changes have been made which affect compatibility with past releases:

  • The behavior of separators has been revised to better conform to the DFDL specification, which enables more DFDL schemas to work without Daffodil specific modifications. Schemas that relied on the previous non-comformant behavior may require changes.
  • The dfdl:choiceLengthKind property must now be defined in scope of all xs:choice's. Allowed values are either implicit or explicit. The previous behavior always treated the property as if it had the value of implicit.
  • The daf namespace has been deprecated and replaced with the dfdlx namespace. Some properties were also moved to the new dfdlx namespace. The following properties/functions should be updated to use the new namespace, with backwards compatibility supported for now:
    • dfdl:layerTransform
    • dfdl:layerEncoding
    • dfdl:layerLengthKind
    • dfdl:layerLength
    • dfdl:layerLengthUnits
    • dfdl:layerBoundaryMark
    • daf:parseUnparsePolicy
    • daf:trace()
    • daf:error()

DFDL Schema Compatibility

Many changes and bug fixes specifically made to improve compatibility with more DFDL schemas. With these fixes and features, the schemas HL7-v2.7, IBM4690-TLOG, and EDIFACT now work with Daffodil.

  • {% jira 784 %} Update default properties in examples to have missing required properties for portability.
  • {% jira 828 %} IBM Compatibility - Test out HL7 schemas
  • {% jira 1639 %} IBM Compatibility - EDIFACT
  • {% jira 1720 %} missing properties not reported
  • {% jira 1853 %} ipfix data format parse and unparse tests for “Schema Definition Error”
  • {% jira 1886 %} TLOG: Delimited parsing with occursCountKind=“implicit” with separators is not handling missing optional elements correctly
  • {% jira 1916 %} Properties leadingSkip alignment alignmentUnits trailingSkip should not be required by text formats.
  • {% jira 2121 %} occursStopValue=“-1” in test schemas is non-portable (currently)
  • {% jira 2156 %} daffodil-test-ibm1-crossTest now fails

Infrastructure and Website

  • {% jira 1380 %} Update genjavadoc plugin to 10 when released and enable doclint
  • {% jira 2003 %} Add Coverage Testing
  • {% jira 2070 %} KEYS file should not be included in source releases
  • {% jira 2073 %} Contact information in README.me is incorrect
  • {% jira 2074 %} Tests fail on non-US locales
  • {% jira 2080 %} Prepare for Daffodil 2.4.0 development
  • {% jira 2082 %} Links to hashes sigs and KEYS should use https
  • {% jira 2093 %} Cannot build and test daffodil in IntelliJ
  • {% jira 2095 %} Confirm all commented out tests either work or have an associated bug number
  • {% jira 2098 %} Update README to be more consistent and have extra information
  • {% jira 2105 %} TravisCI builds take too long
  • {% jira 2106 %} Update Line counter utility
  • {% jira 2113 %} Eclipse classpath fixup for removal of scala-debug directories
  • {% jira 2117 %} Generate WarnID.scala and DaffodilTunables.scala off of dafext.xsd
  • {% jira 2160 %} Ignore vim temp files
  • {% jira 2166 %} TravisCI open jdk 11 fails to download

Miscellaneous Changes and Bug Fixes

  • {% jira 1024 %} Property inputValueCalc should not be on element that is optional, global, or an array
  • {% jira 1106 %} Catch of Exception in DFDLSchemaFile.scala
  • {% jira 1109 %} Remove catch of Exception from OccursCountExpressionParser
  • {% jira 1387 %} Data dump no longer showing for left over data
  • {% jira 1407 %} xml comments not accepted in defineFormat, config files
  • {% jira 1475 %} Runtime terminator containing isolated %ES; provides poor diagnostic.
  • {% jira 1477 %} ES now allowed in terminator - causes a test to fail now.
  • {% jira 1478 %} Debugger uses the term arrayIndex. Really should be occursIndex to match the function of the same name.
  • {% jira 1493 %} %ES; delimiter doesn't work right
  • {% jira 1525 %} Determine if there is a better way to convert an XML String to a date/time
  • {% jira 1701 %} dfdl:outputValueCalc on a complex element causes a ClassCastException
  • {% jira 1931 %} Debug/trace - prints spurious error message about “..”
  • {% jira 1955 %} Missing closing dfdl:format tag causes FatalError exception
  • {% jira 1956 %} Terminator with leading space causes assertion failure
  • {% jira 2058 %} Some CLI tests do not work cleanly on the Windows platform.
  • {% jira 2062 %} NadaParser not optimized out
  • {% jira 2064 %} CLI XML text output incorrect with empty complex elements.
  • {% jira 2065 %} Incorrectly attempting to cast signed to unsigned type
  • {% jira 2069 %} Unparser interaction of outputValueCalc with hexBinary with following bitOrder LSBF element.
  • {% jira 2071 %} Performance of Schema Compiler - Need to eliminate redundant XML loading
  • {% jira 2075 %} dfdl:hexBinary does not correcty reduce xs:integer
  • {% jira 2076 %} fn:ceiling does not work on xs:decimal
  • {% jira 2078 %} Unexpected exception with dfdl:contentLength
  • {% jira 2083 %} abort in parser runtime - invariant failed with dynamic separator test
  • {% jira 2084 %} attributeFormDefault=“unqualified” appears in SchemaUtils used by TDML - generates spurious warning
  • {% jira 2089 %} Unparser escaping doesn't escape all the delimiters
  • {% jira 2092 %} Bad diagnostic when using dynamic separator the value of which is NUL (ascii 0)
  • {% jira 2097 %} Non-thread safe code related to EvCalendar
  • {% jira 2099 %} Original errors being surpressed in doParse loop
  • {% jira 2100 %} Error handling some parseErrors
  • {% jira 2108 %} Facet restrictions not allowed on xs:decimal types with bad errror
  • {% jira 2114 %} Delimiter expression should SDE when empty string returned
  • {% jira 2118 %} DFDLSchemas BMP does not work on Daffodil 2.3.0
  • {% jira 2119 %} Debugger RTL data dumps are nibbles-reversed
  • {% jira 2123 %} Exception on error when parsing hex data with trace on
  • {% jira 2125 %} Incorrect unsparse with suspensions and changing bitOrder
  • {% jira 2126 %} XML Catalog uri should use the same semantics as import/include schemaLocation
  • {% jira 2128 %} XML preamble encoding ignored when CLI unparsing with “xml” infoset type
  • {% jira 2130 %} Error on schema with large numbers of files
  • {% jira 2136 %} Fix whitespace spurious changes.
  • {% jira 2155 %} Add support for Link16 Charset DFI311:DUI002
  • {% jira 2164 %} Support Link16 charset DFI1661 DUI001
  • {% jira 2167 %} NITF schema fails to unparse with exception