[ 
https://issues.apache.org/jira/browse/DAFFODIL-2559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17468875#comment-17468875
 ] 

Mike Beckerle commented on DAFFODIL-2559:
-----------------------------------------

Priority lowered as it is unclear what to do about this issue. 

> 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
>            Priority: Minor
>
> 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.20.1#820001)

Reply via email to