[
https://issues.apache.org/jira/browse/DAFFODIL-2324?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18031216#comment-18031216
]
Steve Lawrence commented on DAFFODIL-2324:
------------------------------------------
That commit was made in March of 2020, and this ticket was made a month later
in April of 2020. I think that indicates that what we implemented in that
change was incorrect and clarifications were made aftewards?
I'm wondering if the issue is in ChoiceTermRuntime1Mixin.scala? It first looks
for empty branches, but if there no empty branches it looks for "open"
branches, and if none of those exist then it looks for defaultable branches.
But I'm wondering if instead it should just pick the first any of those that
exist? Our current logic prefers "empty" branches over open and defaultable,
but I think the earrta says it shouldn't do that, and that should instead pick
the first thing of those?
> 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)