Feature | Detection | IBM DFDL | Daffodil v2.0 |
Validation | External switch | Yes | partial. Parsing only. |
Named Formats | dfdl:defineFormat or dfdl:ref | Yes | Yes |
Choices | xs:choice in xsd | Yes | Partial - choiceDispatchKey and choiceBranchKey not supported. |
Arrays where size not known in advance | dfdl:occursCountKind 'implicit', 'parsed', 'stopValue' | Partial - not 'stopValue' | Partial – not ‘stopValue’ |
Expressions | Use of a DFDL expression in any property value | Yes | Yes. Limitation - query-style expressions not supported. These are expressions which require iteration over children of an element rather than constant-time access. For example fn:count(/a/b) where element 'a' has multiple element 'b' children separated by other element declarations. Hence, gathering all the b children requires iterating. |
End of parent | dfdl:lengthKind "endOfParent" | No | No |
Simple type restrictions | xs:simpleType in xsd | Partial - not unions | Partial – not unions |
Text representation for types other than String | dfdl:representation "text" for Number, Calendar or Boolean types | Yes | Partial – type Boolean not implemented |
Delimiters | dfdl:separator <> "" or dfdl:initiator <> "" or dfdl:terminator <> "" or dfdl:lengthKind "delimited" | Yes | Yes |
Nils | XSDL nillable 'true' in xsd | Yes | Partial - nilKind 'logicalValue' not supported |
Defaults | XSDL default or fixed in xsd | Partial - unparsing only | Partial Simple types - ?? (Some support in parsing and in unparsing) Complex types – No |
Bi-Directional text. | dfdl:textBiDi 'yes' | No | No |
Lengths in Bits | dfdl:alignmentUnits 'bits' or dfdl:lengthUnits 'bits' | Yes | Yes |
Delimited lengths and representation binary element | dfdl:representation 'binary' (or implied binary) and dfdl:lengthKind 'delimited' | Yes | Partial – delimiters must not use character class entities like %NL or %WSP*. |
Regular expressions | dfdl:lengthKind 'pattern', dfdl:assert with dfdl:testkind 'pattern' , dfdl:discriminator with dfdl:testkind 'pattern' |
Partial - only for dfdl:lengthKind | Yes |
Zoned numbers | dfdl:textNumberRep 'zoned' | Yes | No |
IBM 390 packed numbers | dfdl:binaryNumberRep 'packed' | Yes | No |
IBM 390 packed calendars | dfdl:binaryCalendarRep 'packed' | No | No |
IBM 390 floats | dfdl:binaryFloatRep 'ibm390Hex' | Yes | No |
Unordered sequences | dfdl:sequenceKind 'unordered' | Yes | No |
Floating elements | dfdl:floating 'yes' | No | No |
dfdl functions in expression language | dfdl:functions in expression | No | Yes |
Hidden groups | dfdl:hiddenGroupRef <> '' | No | Yes |
Calculated values | dfdl:inputValueCalc <> '' or dfdl:outputValueCalc <> '' | No | Yes |
Escape schemes | dfd:defineEscapeScheme in xsd | Yes | Yes |
Extended encodings | Any dfdl:encoding value beyond the core list | Yes | Partial - iso-8859-1 works. Others - TBD. |
Asserts | dfdl:assert in xsd | Partial - not on global elements or simple types | Yes |
Discriminators | dfdl:discriminator in xsd | Partial - not on global elements or simple types | Yes |
Prefixed lengths | dfdl:lengthKind 'prefixed' | Partial - not nested prefixed lengths | No |
Variables | dfdl:defineVariable, dfdl:newVariableInstances, dfdl:setVariable Variables in DFDL expression language Note that variables as a feature is dependent on the Expressions feature. |
Partial - not newVariableinstance or external variables | Partial – not newVariableInstance |
BCD calendars | dfdl:binaryCalendarRep "bcd" | Yes | No |
BCD numbers | dfdl:binaryNumberRep "bcd" | Yes | No |
Multiple schemas | xs:include or xs:import in xsd | Yes | Yes |
IBM 4690 packed numbers | dfdl:binaryNumberRep "ibm4690Packed" | Yes | No |
IBM 4690 packed calendars | dfdl:binaryCalendarRep "ibm4690Packed" | Yes | No |
DFDL Byte Value Entities | Use of %#r syntax in a DFDL String Literal other than the dfdl:fillByte property | Yes | No |
DFDL Standard Character Set Encodings | dfdl:encoding name begins with "X-DFDL-". | No | Partial: X-DFDL-US-ASCII-7-BIT-PACKED, but not the 6-bit variant. |
Bit Order - Least Significant Bit First | dfdl:bitOrder with value 'leastSignificantBitFirst' | No | Yes |
Daffodil has fn:count(), fn:exactlyOne(), but not the other 3.
Daffodil does not yet support BOMs
No known limitation here - I would be curious as to a test that illustrates this limitation so we could try it on Daffodil
Daffodil supports prefixed QNames in path steps. However, Daffodil's interpretation of NCNames in path steps does NOT currently take any default namespace into account. This makes Daffodil incompatible with IBM DFDL, which does not allow QNames, and so depends on those names being made meaningful by way of default namespace. Making Daffodil compatible with IBM's behavior here is Daffodil JIRA ticket https://opensource.ncsa.illinois.edu/jira/browse/DFDL-1446
286Create table that compares Daffodil features to IBM DFDL features (Steve/Mike)
16/2: Take table from section 22 of DFDL 1.0 spec and add columns showing implementations.
1/3: No progress
10/5: No progress. Work on this for next call.
...
7/6: No further progress
5/7:
To kick this off here is the optional features table from spec section 21 with a column added for IBM DFDL
Feature Detection IBM DFDL Validation External switch Yes Named Formats dfdl:defineFormat or dfdl:ref Yes Choices xs:choice in xsd Yes Arrays where size not known in advance dfdl:occursCountKind 'implicit', 'parsed', 'stopValue' Partial - not 'stopValue' Expressions Use of a DFDL expression in any property value Yes End of parent dfdl:lengthKind "endOfParent" No Simple type restrictions xs:simpleType in xsd Partial - not unions Text representation for types other than String dfdl:representation "text" for Number, Calendar or Boolean types Yes Delimiters dfdl:separator <> "" or dfdl:initiator <> "" or dfdl:terminator <> "" or dfdl:lengthKind "delimited" Yes Nils XSDL nillable 'true' in xsd Yes Defaults XSDL default or fixed in xsd Partial - unparsing only Bi-Directional text. dfdl:textBiDi 'yes' No Lengths in Bits dfdl:alignmentUnits 'bits' or dfdl:lengthUnits 'bits' Yes Delimited lengths and representation binary element dfdl:representation 'binary' (or implied binary) and dfdl:lengthKind 'delimited' Yes Regular expressions dfdl:lengthKind 'pattern',
dfdl:assert with dfdl:testkind 'pattern' ,
dfdl:discriminator with dfdl:testkind 'pattern'Partial - only for dfdl:lengthKind Zoned numbers dfdl:textNumberRep 'zoned' Yes IBM 390 packed numbers dfdl:binaryNumberRep 'packed' Yes IBM 390 packed calendars dfdl:binaryCalendarRep 'packed' No IBM 390 floats dfdl:binaryFloatRep 'ibm390Hex' Yes Unordered sequences dfdl:sequenceKind 'unordered' Yes Floating elements dfdl:floating 'yes' No dfdl functions in expression language dfdl:functions in expression No Hidden groups dfdl:hiddenGroupRef <> '' No Calculated values dfdl:inputValueCalc <> '' or dfdl:outputValueCalc <> '' No Escape schemes dfd:defineEscapeScheme in xsd Yes Extended encodings Any dfdl:encoding value beyond the core list Yes Asserts dfdl:assert in xsd Partial - not on global elements or simple types Discriminators dfdl:discriminator in xsd Partial - not on global elements or simple types Prefixed lengths dfdl:lengthKind 'prefixed' Partial - not nested prefixed lengths Variables dfdl:defineVariable,
dfdl:newVariableInstances,
dfdl:setVariable
Variables in DFDL expression language
Note that variables as a feature is dependent on the Expressions feature.Partial - not newVariableinstance or external variables BCD calendars dfdl:binaryCalendarRep "bcd" Yes BCD numbers dfdl:binaryNumberRep "bcd" Yes Multiple schemas xs:include or xs:import in xsd Yes IBM 4690 packed numbers dfdl:binaryNumberRep "ibm4690Packed" Yes IBM 4690 packed calendars dfdl:binaryCalendarRep "ibm4690Packed" Yes DFDL Byte Value Entities Use of %#r syntax in a DFDL String Literal other than the dfdl:fillByte property Yes DFDL Standard Character Set Encodings dfdl:encoding name begins with "X-DFDL-". No Bit Order - Least Significant Bit First dfdl:bitOrder with value 'leastSignificantBitFirst' No
Some IBM DFDL restrictions are not captured in the table, mainly due to non-implementation of many of the later errata. Full details here https://www.ibm.com/support/knowledgecenter/SSMKHH_10.0.0/com.ibm.etools.mft.doc/df00150_.htm but the key omissions are:
- fn:count(), fn:exactlyOne(), fn:name(), fn:local-name(), fn:namespace-uri()
- BOMs
- Correct distinction between 'empty' and 'missing' when parsing (action 140)
- Use of namespaces in expression paths
- dfdl:separatorSuppressionPolicy "trailingEmptyStrict"
Regards
Steve Hanson
IBM Integration Bus, Hursley, UK
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
smh@uk.ibm.com
tel:+44-1962-815848
mob:+44-7717-378890
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
--
dfdl-wg mailing list
dfdl-wg@ogf.org
https://www.ogf.org/mailman/listinfo/dfdl-wg