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

Mike Beckerle commented on DAFFODIL-2324:
-----------------------------------------

This logic makes sense to me. It should take the first branch that has any of 
the plausible things that can be acceptable ways of "matching" the requirements 
of the input infoset event. 

 

That said, this makes sense for empty or defaultable branches (which would 
implement defaulting for unparsing which is something we're not doing yet) but 
I'm unsure about the exact meaning of open branches so I have to review the 
code for that. 

> Unparser choice branch selection not conformant to DFDL standard
> ----------------------------------------------------------------
>
>                 Key: DAFFODIL-2324
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2324
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Back End
>    Affects Versions: 2.5.0
>            Reporter: Mike Beckerle
>            Assignee: Olabusayo Kilo
>            Priority: Major
>             Fix For: 4.1.0
>
>
> Erratum 5.60 of the DFDL spec clarifies how choice branch selection works.
> Our current schemas that use presence bits flags use a structure like this:
> {code:java}
> <choice>
>  <sequence>
>    <sequence dfdl:hiddenGroupRef="PI_true"/>
>  
>      <sequence>
>       <element name="foo" minOccurs="0" ...../>
>       <element name="bar" minOccurs="0" ..../>
>    </sequence>
>  
>    <sequence dfdl:hiddenGroupRef="PI_false"/>
>  
>  </choice>{code}
> We depend on the fact that by default this chooses the PI_false hidden group 
> when the incoming infoset event is not for a foo nor bar element. 
> The DFDL spec says (with the Erratum/Clarification) that if we want PI_false 
> to be chosen, then we must flip the order of these two choice branches.
> Daffodil is currently preferring the "more empty" of the two branches, and so 
> seleting PI_false, rather than just taking the first possibly empty branch.
> Once we fix this behavior to conform to the spec., we will have to update 
> DFDL schemas that use this behavior, and actually flip these branches.
> Based on that, we may want to put a compatibility flag into daffodil. Or 
> perhaps a feature to generate a warning whenever there is more than one empty 
> choice branch that *could* be selected, if the current functionality selects 
> a default branch that is not the first possibly empty branch thena warning 
> would be issued indicating that the branches should be reordered. 
> The only schema I know of that is sensitive to this bug is mil-std-6017/VMF 
> (and variants thereof).
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to