Generate PL/I constants for enumerated strings

This topic describes how to generate constants for strings that include an enumeration facet.

Regardless of whether your XML schema was created with named types or anonymous types, PL/I constants can be generated for strings that contain an enumeration facet.

Named simple types

When an XML schema is constructed by using named simple types that include an enumeration facet, the named simple type only needs to be constructed once within the schema. Named types are unique which allows PL/I constants to be generated only once for enumerated strings. After being generated, they can be referenced by elements or attributes as many times as needed without the need to regenerate the constants again, avoiding the issue of duplicate PL/I constants. An example of such a schema is show in Figure 1

Figure 1. XSD declaration of a named simple type with enumeration
<xs:simpleType name="rainbowcolor">
	<xs:restriction base="xs:string">
		<xs:enumeration value="Violet"/>
		<xs:enumeration value="Indigo"/>
		<xs:enumeration value="Blue"/>
		<xs:enumeration value="Green"/>
		<xs:enumeration value="Yellow"/>
		<xs:enumeration value="Orange"/>
		<xs:enumeration value="Red"/>
	</xs:restriction>
</xs:simpleType>

The named simple type rainbowcolor can be referenced numerous times as shown in Figure 2.

Figure 2. XSD named simple type references
<xs:schema xmlns:poc="http://schemas.cs.csg.com/poc"...
	<xs:element name="color1" type="poc:rainbowcolor:/>
	<xs:element name="color2" type="poc:rainbowcolor:/>
	<xs:attribute name="att_color3" type="poc:rainbowcolor:/>

After the XML schema has been defined, the PL/I include file includes the generated PL/I constants for the named data types with enumeration facets. The naming convention used for this type is <name of the type>_typ_enm where typ indicates type and enm indicates enumeration. See Suffixes appended to PL/I identifiers for more information about these and other suffixes. An example of the PL/I include file is shown in Figure 3.

Figure 3. Generated PL/I constants in the include file (Host code page: SBCS)
/*********************************************************************
  * PL/I constants for enumerated strings declared in named simple type 
  * "poc:rainbowcolor".
  **********************************************************************/
 DCL 01 rainbowcolor_typ_enm,
  02 Violet CHAR VALUE('E589969385A3'x),
  02 Indigo CHAR VALUE('C99584898796'x),
  02 Blue CHAR VALUE('C293A485'x),
  02 Green CHAR VALUE('C799858595'x),
  02 Yellow CHAR VALUE('E885939396A6'x),
  02 Orange CHAR VALUE('D69981958785'x),
  02 Red CHAR VALUE('D98584'x);
Note: If there are two or more simple types that have the same name but different namespaces, all of the structures are declared in the include file since they could contain different enumerations. To eliminate confusion between the structures, an incremented value is appended to the end of each structures name (_enm, _enm1, _enm2) and the comment section of the include file will identify the type.
Figure 4.
<xs:element name="color1" type="poc1:rainbowcolor:/>
<xs:element name="color2" type="poc2:rainbowcolor:/>


/***************************************************************
  * PL/I constants for enumerated strings declared in named simple type 
  * "poc1:rainbowcolor".
  ********************************************************************/
 DCL 01 rainbowcolor_typ_enm,
   02 Violet CHAR VALUE('E589969385A3'x),
   02 Red CHAR VALUE('D98584'x);
 
 /*********************************************************************
  * PL/I constants for enumerated strings declared in named simple type 
  * "poc2:rainbowcolor".
  ********************************************************************/
 DCL 01 rainbowcolor_typ_enm1,
   02 Violet CHAR VALUE('E589969385A3'x),
   02 Red CHAR VALUE('D98584'x);

Anonymous simple types

For anonymous simple types, PL/I constants are generated each time an anonymous instance is referenced in an element or attribute.

Figure 5. XSD declaration of an anonymous simple type with enumeration
<xs:element name="rcolor">
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:enumeration value="Violet"/>
			<xs:enumeration value="Red"/>
		</xs:restriction>
	</xs:simpleType>
</xs:element>
Figure 6. Generated PL/I constants in the include file for an anonymous type
 /*********************************************************************
  * PL/I constants for enumerated strings declared in an anonymous simpl
  * e type for element "rcolor".
  ********************************************************************/
 DCL 01 rcolor_ele_enm,
   02 Violet CHAR VALUE('E589969385A3'x),
   02 Red CHAR VALUE('D98584'x);

The naming convention used for this type is <name of the element>_[ele/att]_enm where ele indicates element, att indicates attribute, and enm indicates enumeration. See Suffixes appended to PL/I identifiers for more information about these and other suffixes.

Note:
For PL/I constants, when the host code page is:
  • DBCS: WCHAR is used and encode VALUEs as UTF-16 hexadecimal literals. The memConvert function can be used to convert UTF-16 to DBCS when wanted.
  • SBCS: CHAR is used and encode VALUEs as hex in the specified target code page.