TOC PREV NEXT INDEX


Example: Extension Elements


The following complexContent type contains a choice of two additional elements that were not defined in the base type (ProductType):

   <xsd:complexType name="ShirtType">
 
      <xsd:complexContent>
 
         <xsd:extension base="ProductType">
 
            <xsd:choice>
 
               <xsd:element name="size" type="SizeType"/>
 
               <xsd:element name="color" type="ColorType"/>
 
            </xsd:choice>
 
         </xsd:extension>
 
      </xsd:complexContent>
 
   </xsd:complexType>
 

The following are the C typedefs that are generated for this definition:
#define T_ShirtType_1x2_size   	1
 
#define T_ShirtType_1x2_color	  2
 

 
typedef struct EXTERN ShirtType_1x2 {
 
   OSUINT16 t;
 
   union {
 
      /* t = 1 */
 
      SizeType size;
 
      /* t = 2 */
 
      ColorType color;
 
   } u;
 
} ShirtType_1x2;
 

 
typedef struct EXTERN ShirtType {
 
   ProductType base;
 
   ShirtType_1x2 ext;
 
} ShirtType;
 

In the case of C++, a new class is derived from the ProductType base class:
class EXTERN ShirtType : public ProductType {
 
public:
 
   // tag constants
 
   enum {
 
      T_size = 1,
 
      T_color = 2
 
   } ;
 
   OSUINT16 t;
 
   union {
 
      /* t = 1 */
 
      SizeType *size;
 
      /* t = 2 */
 
      ColorType *color;
 
   } u;
 
   ...
 
} ;
 

In this case, the contents of the extension are generated directly in the derived class. A temporary type is not created.

Objective Systems, Inc.

102 Pickering Way, Suite #506
Exton, Pennsylvania 19341
http://www.obj-sys.com
Phone: (484) 875-9841
Toll-free: (877) 307-6855 (US only)
Fax: (484) 875-9830
info@obj-sys.com
TOC PREV NEXT INDEX