This section describes how XSD structures
are mapped to PL/I structures in the WSDL2PLI scenario.
Typically a PL/I major structure (01-level) is generated to contain
all of the PL/I minor structures, elementary variables, and arrays
that correspond to XML elements and XML attributes in a source XSD.
With few exceptions, the hierarchy of the PL/I major and minor structures
generated from the XSD will match that of the XSD.
The mappings in the this topic use the following pseudocode function
definitions:
- depth(): This function returns the hierarchical depth of
an XSD element or attribute.
pli_name(): This function returns a unique PL/I identifier
derived from an XSD element or attribute name. Uniqueness is determined
using the fully qualified path of the identifier. (See Creation of PL/I identifiers.)
pli_type(): This function returns a PL/I data declaration
derived from an XSD simple type definition. For user-defined types,
derivation is performed using the base built-in or derived simple
type. (See Enterprise PL/I structures in the WSDL2PLI scenario.)
Mapping elementary XML elements
An
elementary XML element is one that does not contain other elements,
although it can have attributes and character content.
This mapping shows the simple case:
Table 1. Elementary XML elements with built-in or derived simple types| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName” type=”simpleTypeName”
/> |
| PL/I |
depth(xsd:element) pli_name(eleName) pli_type(simpleTypeName) |
An optional elementary XML element contains "minOccurs=0" and
"maxOccurs=1":
Table 2. Optional elementary
XML elements| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName” type=”simpleTypeName”
minOccurs=”0” maxOccurs=”1” /> |
| PL/I |
depth(xsd:element) (pli_name(eleName) + ”_bit1”) BIT(1) ALIGNED,
depth(xsd:element) pli_name(eleName) pli_type(simpleTypeName)
|
| 1See Suffixes appended to PL/I identifiers. |
A repeating elementary XML element is mapped to an array:
Table 3. Repeating elementary XML elements (arrays)| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName” type=”simpleTypeName”
minOccurs=”m” maxOccurs=”n” /> |
| PL/I |
One of the following:- [ depth(xsd:element) (pli_name(eleName) + ”_lim1”)
SIGNED FIXED BINARY(31), ]2
- [ depth(xsd:element) (pli_name(eleName) + ”_cnt1”)
SIGNED FIXED BINARY(31), ]3
- [ depth(xsd:element) pli_name(eleName) (n) pli_type(simpleTypeName),
]4 or
- [ depth(xsd:element) pli_name(eleName) (_ref._lim1 REFER
_lim1) pli_type(simpleTypeName) ]5
|
1See Suffixes appended to PL/I identifiers.
2Generated when maxOccurs > element_max_occurs_limit or maxOccurs=”unbounded”.
3Generated when minOccurs != maxOccurs and maxOccurs) > 1.
4Generated when maxOccurs <= element_max_occurs_limit.
5Generated when maxOccurs) > element_max_occurs_limit or maxOccurs=”unbounded”.
|
An elementary XML element can contain characters and attributes:
Table 4. Elementary XML elements with character
and attribute contents| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName” type=”complexTypeName” />
<xsd:complexType name=”complexTypeName”>
<xsd:simpleContent>
<xsd:extension base=”simpleTypeName1”>
<xsd:attribute name=”attName” type=”simpleTypeName2” />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
|
| PL/I |
depth(xsd:element) pli_name(eleName) ,
(depth(xsd:element) + 1) pli_name(“text”) pli_type(simpleTypeName1),
(depth(xsd:element) + 1) (pli_name(attName) + “_bit1”) BIT(1) ALIGNED,
(depth(xsd:element) + 1) (pli_name(attName) + “_att1”) pli_type(simpleTypeName2)
|
| 1See Suffixes appended to PL/I identifiers. |
Mapping composed XML elements
A
composed XML elements is one that can contain further elementary or
composed XML elements and XML attributes.
This mapping shows the simple case:
Table 5. Composed XML elements with elementary
and attribute contents| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName1” type=”complexTypeName” />
<xsd:complexType name=”complexTypeName” mixed=”false”>
<xsd:sequence or all>
<xsd:element name=”eleName2” type=”simpleTypeName1” />
</xsd:sequence or all>
<xsd:attribute name=”attName1” type=”simpleTypeName2” use=”optional”/>
</xsd:complexType>
|
| PL/I |
depth(xsd:element) pli_name(eleName1) ,
(depth(xsd:element) + 1) pli_name(eleName2) pli_type(simpleTypeName1),
(depth(xsd:element) + 1) pli_name(attName1 + ”_bit1”)) BIT(1) ALIGNED,
(depth(xsd:element) + 1) pli_name(attName1 + ”_att1”) pli_type(simpleTypeName2)
|
| 1See Suffixes appended to PL/I identifiers. |
An optional composed XML element contains "minOccurs=0" and
"maxOccurs=1":
Table 6. Optional composed
XML elements | Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName1” type=”complexTypeName” minOccurs=”0” maxOccurs=”1”/>
<xsd:complexType name=”complexTypeName” >
<xsd:sequence or all>
<xsd:element name=”eleName2” type=”simpleTypeName” />
</xsd:sequence or all>
</xsd:complexType>
|
| PL/I |
depth(xsd:element) pli_name(eleName1 + “_bit1”),
depth(xsd:element) pli_name(eleName1),
(depth(xsd:element) + 1) pli_name(eleName2) pli_type(simpleTypeName)
|
| 1See Suffixes appended to PL/I identifiers. |
A repeating composed XML element is mapped to an array:
Table 7. Repeating composed XML elements (arrays)| Language: |
Declaration: |
| XSD |
<xsd:element name=”eleName1” type=”complexTypeName” minOccurs=”m”
maxOccurs=”n”/>
<xsd:complexType name=”complexTypeName” mixed=”false”>
<xsd:sequence or all>
<xsd:element name=”eleName2” type=”simpleTypeName” minOccurs=”3” maxOccurs=”3” />
</xsd:sequence or all>
</xsd:complexType>
|
| PL/I |
One of the following:- [ depth(xsd:element) pli_name(eleName1 + “_lim1”) SIGNED
FIXED BINARY(31), ]2
- [ depth(xsd:element) pli_name(eleName1 + “_cnt1”) SIGNED
FIXED BINARY(31), ]3
- [ depth(xsd:element) pli_name(eleName1) (n), ]4 or
- [ depth(xsd:element) pli_name(eleName1) (_ref._lim1 REFER
_lim1) ]5
- depth(xsd:element) pli_name(eleName2) (3) pli_type(simpleTypeName)
|
1See Suffixes appended to PL/I identifiers.
2Generated when maxOccurs > element_max_occurs_limit or maxOccurs=”unbounded”.
3Generated when minOccurs != maxOccurs and maxOccurs > 1.
4Generated when maxOccurs <= element_max_occurs_limit.
5Generated when maxOccurs > element_max_occurs_limit or maxOccurs=”unbounded”.
|