Mike Beckerle created DAFFODIL-2559:
---------------------------------------
Summary: forward-lookahead enhancement dfdlx:distance
Key: DAFFODIL-2559
URL: https://issues.apache.org/jira/browse/DAFFODIL-2559
Project: Daffodil
Issue Type: New Feature
Components: Back End, Front End
Affects Versions: 3.1.0
Reporter: Mike Beckerle
In ticket DAFFODIL-641, an experimental forward-lookahead feature is added to
Daffodil to enable use of choice flags that come a fixed distance ahead in the
data.
This is to handle cases from the format NATO STANAG 5516 (link16), where as a
particular message format was extended to add new fields, some earlier fields
in the message were no longer needed and were repurposed, resulting in fields
earlier in the message the format of which depends on a flag that appears after
them.
Ticket DAFFODIL-641 details two things. A lookahead feature, and a second
aspect that was not implemented, which is a dfdlx:choiceDispatchKeyPolicy which
can be "immediate" (the default) or "deferred", meaning a lookahead behavior is
needed as the choiceDispatchKey expression refers forward.
This capability is possibly more than is needed, and introduces substantial
complexity. For example the schema compiler must prove that the distance to the
flag is constant for all possible parses.
Alternatives are possible such as providing a function in the expression
language which computes a constant distance between two sibling elements. E.g.,
{code:java}
dfdl:choiceDispatchKey='{
xs:string(
dfdlx:lookAhead(
dfdlx:distance(., ../flag, "bits"),
8)
)
}'
{code}
In the above we see an extension function dfdlx:distance which is intended to
compute a constant, and fails with a schema definition error if the distance
between the two sibling elements is non-constant. The intention here is that
this measures the distance from the end of the first argument to the start of
the second argument.
This function could be quite restrictive to only sibling elements within the
same element parent so as to avoid a lot of complexity in Daffodil's schema
compiler for this use case.
Note that this same function might; however, be generalized to help compute
things like dfdl:choiceLength, when the dfdl:choiceLengthKind is 'explicit'.
This is another case where the schema author must compute an exact distance in
the data requiring knowledge of the details of the format that would better be
left to the schema compiler to figure out.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)