The DFDL specification allows for each branch of a direct dispatch choice to specify only a single choiceBranchKey.

The current Daffodil implementation extends this behavior to make the dfdlx:choiceBranchKey annotation specify a space delimited list of keys.

This proposal further extends branchKeys by adding a dfdlx:choiceBranchKeyRanges annotation. dfdlx:choiceBranchKeyRanges is a space delimited list of integers, interperated as "min1 max1 min2 max2 ... minN maxN". It will match to any integer contained in any of the specified ranges.

Logically, setting dfdlx:choiceBranchKeyRanges="a b" is equivelent to dfdl:choiceBranchKey="a a+1 a+2 ... b"; although using choiceBranchKeyRanges may allow for a more efficient implementation.

choiceBranchKeyRanges and choiceBranchKey may be used at the same time. In such a case, both must specify only integers.

This feature may be thought of as analogous to the repValueRanges annotation in the enum/typeCalc proposal.

  • No labels