Mike Beckerle created DAFFODIL-2324:
---------------------------------------

             Summary: 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
             Fix For: 3.0.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.3.4#803005)

Reply via email to