[ 
https://issues.apache.org/jira/browse/DAFFODIL-2887?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Lawrence resolved DAFFODIL-2887.
--------------------------------------
    Fix Version/s: 3.8.0
       Resolution: Fixed

Fixed in commit 2037fe9a54db0ea17ba4871c99a6e2f0eb4f13a3

> Choice branch array with discriminator or direct dispatch broken
> ----------------------------------------------------------------
>
>                 Key: DAFFODIL-2887
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2887
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Front End
>    Affects Versions: 3.7.0
>            Reporter: Steve Lawrence
>            Priority: Major
>             Fix For: 3.8.0
>
>
> Say we have this schema:
> {code:xml}
> <schema
>   xmlns="http://www.w3.org/2001/XMLSchema";
>   xmlns:xs="http://www.w3.org/2001/XMLSchema";
>   xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
>   xmlns:ex="http://example.com";
>   targetNamespace="http://example.com";
>   elementFormDefault="unqualified">
>   <include 
> schemaLocation="/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
>   <annotation>
>     <appinfo source="http://www.ogf.org/dfdl/";>
>       <dfdl:format ref="ex:GeneralFormat" lengthKind="delimited"/>
>     </appinfo>
>   </annotation>
>   <element name="file">
>     <complexType>
>       <sequence dfdl:separator="%SP;">
>         <element name="Type" type="xs:string" />
>         <element name="Values">
>           <complexType>
>             <choice>
>               <element name="Foo" type="xs:string" maxOccurs="unbounded">
>                 <annotation>
>                   <appinfo source="http://www.ogf.org/dfdl/";>
>                     <dfdl:discriminator test="{ ../Type eq 'foo' }" />
>                   </appinfo>
>                 </annotation>
>               </element>
>               <element name="Bar" type="xs:string" maxOccurs="unbounded">
>                 <annotation>
>                   <appinfo source="http://www.ogf.org/dfdl/";>
>                     <dfdl:discriminator test="{ ../../Type eq 'bar' }" />
>                   </appinfo>
>                 </annotation>
>               </element>
>             </choice>
>           </complexType>
>         </element>
>       </sequence>
>     </complexType>
>   </element>
> </schema>
> {code}
> So it is a space separated list of items, where the first is either "foo" or 
> "bar", and that defines the type of all following items to be an array of 
> Foo's or an array of Bar's.
> This currently fails to compile with the error
> {code}
>  Relative path '../../Type eq foo' past root element
> {code}
> If we remove an up step and change the discriminators to "../Type eq 'foo'", 
> then we get the error:
> {code}
> No element corresponding to step {}Type found. Possibilities for this step 
> include: {}Foo, {}Bar.
> {code}
> So there is no way to reference Type using up-steps. 
> A workaround is to wrap the array elemens in a sequence so the choice 
> branches are now sequenes instead of arrays. Doing this allows the scheme to 
> work. But when a choice branch is an array, there is an implied surrounding 
> sequence so these should be exactly the same.
> Potentially related, if we change the above snippet to remove the 
> discriminators and instead use direct dispatch and put dfdl:choiceDispatchKey 
> on the choice and dfdl:choiceBranchKey on the Foo/Bar arrays, we get the 
> warning and error:
> {code}
> DFDL property was ignored: choiceBranchKey="foo" (id: ignoreDFDLProperty)
> [error] Parse Error: Choice dispatch branch failed: List(Parse Error: Array 
> element parsed succesfully, but consumed no data and is stuck in an infinite 
> loop as it is unbounded.
> {code}
> Something seems to be wrong with our implied sequence choice branches.



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

Reply via email to