Thanks Mike. I took a look at the proposal. It would be terrific if I could
express this:
<xs:simpleType name="machine-constant-type" dfdl:repType="../Raw_Value">
<xs:restriction base="xs:string">
<xs:enumeration value="IMAGE_FILE_MACHINE_UNKNOWN" dfdl:repValues="0" />
<xs:enumeration value="IMAGE_FILE_MACHINE_AM33" dfdl:repValues="1" />
<xs:enumeration value="IMAGE_FILE_MACHINE_AMD64" dfdl:repValues="2" />
<xs:enumeration value="IMAGE_FILE_MACHINE_ARM" dfdl:repValues="3" />
</xs:restriction>
</xs:simpleType>
Can't wait for that functionality to be implemented in DFDL/Daffodil!
/Roger
From: Beckerle, Mike <[email protected]>
Sent: Monday, April 29, 2019 7:39 AM
To: [email protected]
Subject: [EXT] Re: What is the easiest way to express an enumeration list in
DFDL?
We are prototyping such a feature in Daffodil. If we're happy with it, we will
propose it for a future revision of DFDL.
We will show you some examples of it in use, but there is a writeup about it on
the Daffodil wiki:
https://cwiki.apache.org/confluence/display/DAFFODIL/Proposal%3A+Feature+to+support+enumerations+and+typeValueCalc
________________________________
From: Costello, Roger L. <[email protected]<mailto:[email protected]>>
Sent: Monday, April 29, 2019 7:33:25 AM
To: [email protected]<mailto:[email protected]>
Subject: What is the easiest way to express an enumeration list in DFDL?
Hello DFDL community,
My input file contains an unsigned integer that represents the name of a
machine (CPU). I want to output that raw integer plus the name of the machine
that it corresponds to plus a description, e.g.,
<machine>
<raw_value>3</raw_value>
<constant>IMAGE_FILE_MACHINE_ARM</constant>
<description>ARM</description>
</machine>
I know how to implement this using inputValueCalc. See below. Is there is
another way to implement it, using xs:enumeration? Somehow, it would be really
neat if the element declaration for the <constant> element could use
xs:enumeration to enumerate its allowable values:
<xs:element name="constant">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="IMAGE_FILE_MACHINE_UNKNOWN" />
<xs:enumeration value="IMAGE_FILE_MACHINE_AM33" />
<xs:enumeration value="IMAGE_FILE_MACHINE_AMD64" />
<xs:enumeration value="IMAGE_FILE_MACHINE_ARM" />
</xs:restriction>
</xs:simpleType>
</xs:element>
Somehow, each enumeration value would then be correlated to a specific value of
the <raw_value> element.
Is there a way to express this? That is, is there some way to leverage the XML
Scheme enumeration facet to enumerate the list of allowable values of the
<constant> element (as opposed to, essentially, using XPath the list the
allowable values)? /Roger
<xs:element name="machine">
<xs:complexType>
<xs:sequence>
<xs:element name="raw_value" type="xs:integer" />
<xs:element name="constant" type="xs:string" dfdl:inputValueCalc="{
if (../raw_value eq 0) then 'IMAGE_FILE_MACHINE_UNKNOWN'
else if (../raw_value eq 1) then 'IMAGE_FILE_MACHINE_AM33'
else if (../raw_value eq 2) then 'IMAGE_FILE_MACHINE_AMD64'
else if (../raw_value eq 3) then 'IMAGE_FILE_MACHINE_ARM'
else fn:error()
}"/>
<xs:element name="description" type="xs:string"
dfdl:inputValueCalc="{
if (../raw_value eq 0) then 'The contents of this field are
assumed to be applicable to any machine type'
else if (../raw_value eq 1) then 'Matsushita AM33'
else if (../raw_value eq 2) then 'x64'
else if (../raw_value eq 3) then 'ARM'
else fn:error()
}"/>
</xs:sequence>
</xs:complexType>
</xs:element>