*   You can work around by wrapping a sequence around each of your elements 
and putting the dfdl:choiceBranchKey on the sequence.

Yep, that works. See below. But, .........., that's awful!  /Roger

<xs:element name="input">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Magic-Number" type="xs:string" />
            <xs:choice>
                <xs:choice dfdl:choiceDispatchKey="{./Magic-Number}">
                    <xs:sequence dfdl:choiceBranchKey="MZ">
                        <xs:element name="Executable" type="xs:string"
                                    dfdl:inputValueCalc="{'Windows 
executable'}" />
                    </xs:sequence>
                    <xs:sequence dfdl:choiceBranchKey="PNG">
                        <xs:element name="Image" type="xs:string"
                                    dfdl:inputValueCalc="{'PNG image'}" />
                    </xs:sequence>
                    <xs:sequence dfdl:choiceBranchKey="PK">
                        <xs:element name="Archive" type="xs:string"
                                    dfdl:inputValueCalc="{'Zip archive'}" />
                    </xs:sequence>
                </xs:choice>
                <xs:sequence>
                    <xs:element name="Unrecognized" type="xs:string"
                                    dfdl:inputValueCalc="{'Unrecognized magic 
number'}" />
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>



From: Beckerle, Mike <[email protected]>
Sent: Tuesday, September 24, 2019 1:36 PM
To: [email protected]
Subject: [EXT] Re: Why can't the element referenced by dfdl:choiceBranchKey use 
dfdl:inputValueCalc?

DFDL spec says "If this property appears on an element declaration or element 
reference schema component, the appearance of any other DFDL properties on that 
component is a schema definition error. "

So you have dfdl:choiceBranchKey on these elements also.

This restriction in DFDL is also unnecessary. dfdl:choiceBranchKey causes no 
issues in conjunction with dfdl:inputValueCalc, because choiceBranchKey is not 
a format property.

You can workaround by wrapping a sequence around each of your elements and 
putting the dfdl:choiceBranchKey on the sequence.

________________________________
From: Costello, Roger L. <[email protected]<mailto:[email protected]>>
Sent: Tuesday, September 24, 2019 1:30 PM
To: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Subject: Re: Why can't the element referenced by dfdl:choiceBranchKey use 
dfdl:inputValueCalc?


Hi Mike,



But, but, but, ...



Even when I make the elements local (not global), I get the same error message. 
Here's the local version of the DFDL schema:



<xs:element name="input">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Magic-Number" type="xs:string" />
            <xs:choice>
                <xs:choice dfdl:choiceDispatchKey="{./Magic-Number}">
                    <xs:element name="Executable" type="xs:string"
                                    dfdl:choiceBranchKey="MZ"
                                    dfdl:inputValueCalc="{'Windows 
executable'}" />
                    <xs:element name="Image" type="xs:string"
                                    dfdl:choiceBranchKey="PNG"
                                    dfdl:inputValueCalc="{'PNG image'}" />
                    <xs:element name="Archive" type="xs:string"
                                    dfdl:choiceBranchKey="PK"

                                    dfdl:inputValueCalc="{'Zip archive'}" />
                </xs:choice>
                <xs:element name="Unrecognized" type="xs:string"
                                    dfdl:inputValueCalc="{'Unrecognized magic 
number'}" />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>









From: Beckerle, Mike <[email protected]<mailto:[email protected]>>
Sent: Tuesday, September 24, 2019 1:18 PM
To: [email protected]<mailto:[email protected]>
Subject: [EXT] Re: Why can't the element referenced by dfdl:choiceBranchKey use 
dfdl:inputValueCalc?



A global element is not allowed to have inputValueCalc property.



This is an arbitrary restriction in DFDL. At one point before there were any 
implementations of inputValueCalc property, someone thought this could keep 
implementors out of trouble.



Having implemented this now, I see no reason for this restriction.



DFDL workgroup is supposed to be getting an "experience document" about 
calculated value properties from our experience with it. We have a draft of 
that on the Daffodil Wiki.



See: https://s.apache.org/daffodil-experience-with-computed-elements



Unless it is already there, I will update this page with a note that this 
restriction is unnecessary.



________________________________

From: Costello, Roger L. <[email protected]<mailto:[email protected]>>
Sent: Tuesday, September 24, 2019 1:11 PM
To: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Subject: Why can't the element referenced by dfdl:choiceBranchKey use 
dfdl:inputValueCalc?



Hello DFDL community,



If my input file is this:



MZ



Then I want the output XML to be this:



<input>

    <Magic-Number>MZ</Magic-Number>

   <Executable>Windows executable</Executable>

</input>



If my input file is this:



PNG



Then I want the output XML to be this:



<input>

    <Magic-Number>PNG</Magic-Number>

   <Image>PNG image</Image>

</input>



If my input file is this:



PK



Then I want the output XML to be this:



<input>

    <Magic-Number>PK</Magic-Number>

   <Archive>Zip archive</Archive>

</input>



If the input is none of those, then I want the output XML to be this:



<input>

    <Magic-Number>...</Magic-Number>

    <Unrecognized>Unrecognized magic number</Unrecognized>

</input>



Below is my DFDL schema. It produces this error:



element reference {}Executable cannot have the dfdl:inputValueCalc property.



Why am I getting that error?  /Roger



<xs:element name="input">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Magic-Number" type="xs:string" />
            <xs:choice>
                <xs:choice dfdl:choiceDispatchKey="{./Magic-Number}">
                    <xs:element ref="Executable" dfdl:choiceBranchKey="MZ" />
                    <xs:element ref="Image" dfdl:choiceBranchKey="PNG" />
                    <xs:element ref="Archive" dfdl:choiceBranchKey="PK" />
                </xs:choice>
            </xs:choice>
            <xs:element name="Unrecognized" type="xs:string" 
dfdl:inputValueCalc="{'Unrecognized magic number'}" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="Executable" type="xs:string" dfdl:inputValueCalc="{'Windows 
executable'}" />
<xs:element name="Image" type="xs:string" dfdl:inputValueCalc="{'PNG image'}" />
<xs:element name="Archive" type="xs:string" dfdl:inputValueCalc="{'Zip 
archive'}" />


Reply via email to