DFDL schemas for:
- TIFF metadata (header, IFD, strip layout) with CCITT-compressed image strips as opaque BLOBs
- CCITT Group 3 (T.4) and Group 4 (T.6) fax stream envelopes (EOL, RTC, fill bits, byte alignment flags)
The actual MH/MR/MMR pixel run-length Huffman encoding is treated as opaque data. DFDL v1.0 cannot decode variable-length Huffman tables natively.
This is a DFDL boundary exploration experiment. TIFF (one of the most pointer-heavy formats in common use) is the instrument.
DFDL deliberately does not support general-purpose pointer following. By systematically attempting to parse real TIFF files using only lookAhead, variables, BLOBs, composition, and sequential constructs — and by expanding the cases that stress arrays, tiles, subIFDs, and indirection — we generate concrete evidence:
- How much useful metadata and layout information is achievable within current DFDL.
- Exactly where the hard walls appear (and which workarounds remain maintainable).
- A clear "achieved / hybrid / impossible" classification map.
The parser, TDML tests, and corpus are the lab. The primary deliverable is reproducible evidence and documentation suitable for the DFDL community and Daffodil developers. A working fax-oriented schema is a valuable byproduct.
- In scope: TIFF IFD parsing, CCITT stream structural envelope (EOL markers, RTC, T4Options/T6Options flags, fill-bit padding), BLOB-wrapped image data
- Out of scope: Actual pixel-level decompression of CCITT MH/MR/MMR codes
mvn clean testsrc/main/resources/com/hiltonroscoe/ccitt/xsd/tiff.dfdl.xsd— TIFF header + IFD parsersrc/main/resources/com/hiltonroscoe/ccitt/xsd/ccitt-envelope.dfdl.xsd— CCITT T.4/T.6 stream envelopesrc/test/resources/com/hiltonroscoe/ccitt/Ccitt.tdml— TDML test suitesrc/test/resources/com/hiltonroscoe/ccitt/corpus/— vendored test datasrc/test/java/com/hiltonroscoe/ccitt/TestCcittSuite.java— JUnit runnerpom.xml— Maven build (Daffodil TDML + JUnit 4)
See the LICENSE file for licensing terms.
Test data sources and their licenses will be documented here. All test data must be public domain or permissively licensed (MIT, BSD, Apache 2.0) to be included in this MIT-licensed project.