ILOG JRules User Guide > Integrating Application Data > Reference > Mapping Between XML Schema and Dynamic Classes > Schema Types > Complex Types

This example demonstrates the use of mixed content in a schema and an XML document. The schema contains an element of type int and an element of type string.

Here is the schema:

<element name="observation">
    <complexType mixed="true">
       <sequence>
          <element name="temperature" type="int">
          <element name="city" type="string">
       </sequence>
    ...
    </complexType>
</element>

Here is the excerpt from an XML document:

<observation>
It is <temperature>10</temperature>degrees in <city>London</city>.
</observation>

And here is the XOM representation:

class Observation extends IlrXmlObject
{
   int temperature;
   String city;
   String content;
}

The content of the observation element will be translated into a single String (that is, a concatenation of all the strings) and put in a special attribute named content.

Complex Type Mapping

The following table shows some complex type mappings between a schema and dynamic model.

Table 4 Standard Complex Type Mapping 
Case 
Schema 
Dynamic Model 
Element with local complex type of unary component 
<element name="e1"> 
<complexType> 
<sequence> 
<element name="e2" type="t2"/> 
<element name="e3" type="t3"/> 
</sequence> 
<attribute name="a1" type="t4"/> 
</complexType> 
</element> 
class E1 extends IlrXmlObject 
{ 
[map(t2)] e2; 
[map(t3)] e3; 
[map(t4)] a1; 
} 

 
E1 e1; 
Element with local complex type of unary component 
<element name="e1"> 
<complexType> 
<sequence> 
<element name="e2" type="t2" 
maxOccurs="unbounded"/> 
<element name="e3" type="t3" 
minOccurs="2" /> 
</sequence> 
</complexType> 
</element> 
class E1 extends IlrXmlObject 
{ 
// collection of [map(t2)] 
Vector e2List; 

 
// collection of [map(t3)] 
Vector e3List; 
} 

 
E1 e1; 
Typed element 
<complexType name="t1"> 
<sequence> 
<element name="e2" type="t2"/> 
<element name="e3" type="t3"/> 
</sequence> 
</complexType> 

 
<element name="e1" type="t1" /> 
class T1 extends IlrXmlObject 
{ 
[map(t2)] e2; 
[map(t3)] e3; 
} 

 
T1 e1; 
Typed element with collection group 
<complexType name="t1"> 
<sequence maxOccurs="1001"> 
<element name="e2" type="t2"/> 
<element name="e3" type="t3"/> 
</sequence> 
</complexType> 

 
<element name="e1" type="t1" /> 
class T1 extends IlrXmlObject 
{ 
// collection of [map(t2)] 
Vector e2List; 

 
// collection of [map(t3)] 
Vector e3List; 
} 

 
T1 e1; 
Local complex type: when inner classes are permitted 
<complexType name="t1"> 
<sequence> 
<element name="e1"> 
<complexType> 
... 
</complexType> 
</complexType> 
</element> 
class T1 extends IlrXmlObject 
{ 
class E1 extends IlrXmlObject 
{ 
...  
} 
E1 e1; 
} 
Local complex type: when inner classes are not permitted 
<complexType name="t1"> 
<sequence> 
<element name="e1"> 
<complexType> 
... 
</complexType> 
</complexType> 
</element> 
Class E1 extends IlrXmlObject 
{ 
} 

 
class T1 extends IlrXmlObject 
{ 
E1 e1; 
} 

Simple Content Mapping

The following table shows some simple content mappings between a schema and dynamic model.

Table 5 Simple Content Mapping 
Case 
Schema 
Dynamic Model 
Complex type with simple content 
<simpleType name="st0" > 
... 
</simpleType> 

 
<complexType name="ct0"> 
<simpleContent> 
<extension base="st0">  
<attribute name="a1" type="st1" /> 
</extension> 
<simpleContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st0)] content; 
[map(st1)] a1; 
} 
Complex type inheriting by extension from complex type with simple content 
<complexType name="ct0" > 
<simpleContent> 
... 
<simpleContent> 
</complexType> 

 
<complexType name="ct1"> 
<simpleContent> 
<extension base="ct0">  
<attribute name="a1" type="st1" /> 
</extension> 
</simpleContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st0)] content; 
... 
} 

 
class Ct1 extends Ct0 
{ 
[map(st0)] content; 
[map(st1)] a1; 
... 
} 
Complex type inheriting by restriction from complex type with simple content 
<complexType name="ct0" > 
<simpleContent> 
... 
<simpleContent> 
</complexType> 

 
<complexType name="ct1"> 
<simpleContent> 
<restriction base="ct0">  
<attribute name="a1" type="st1" /> 
</restriction> 
<simpleContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st0)] content; 
... 
} 

 
class Ct1 extends Ct0 
{ 
} 

Complex Content Mapping

The following table shows some complex content mappings between a schema and dynamic model.

Table 6 Complex Content Mapping 
Case 
Schema 
Dynamic Model 
Complex type inheriting by extension 
<complexType name="ct0"> 
<attribute name="a1" type="st1" /> 
</complexType> 

 
<complexType name="ct0"> 
<complexContent> 
<extension base="ct0">  
<attribute name="a2" type="st2" /> 
</extension> 
<complexContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st1)] a1; 
} 

 
class Ct1 extends Ct0 
{ 
[map(st2)] a2; 
} 
Complex type inheriting by restriction 
<complexType name="ct0"> 
<attribute name="a1" type="st1" /> 
</complexType> 

 
<complexType name="ct0"> 
<complexContent> 
<restriction base="ct0">  
<attribute name="a1" type="st2" /> 
</restriction> 
<complexContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st1)] a1; 
} 

 
class Ct1 extends Ct0 
{ 
} 
Complex type with mixed content, inheriting by extension 
<complexType name="ct0" > 
<simpleContent> 
... 
</simpleContent> 
</complexType> 

 
<complexType name="ct0"> 
<complexContent mixed="true"> 
<extension base="st0">  
<attribute name="a1" type="st1" /> 
</extension> 
<simpleContent> 
</complexType> 
class Ct0 extends IlrXmlObject 
{ 
[map(st0)] content; 
} 

 
class Ct1 extends Ct0 
{ 
[map(st1)] a1; 
} 

 

Related Reference

Built-in Simple Types
Simple Type Mapping
Simple Types Derived from Other Simple Types
List and Union Types
Local Simple Types Mapped onto Inner Classes
Extension of Simple Type Content in Complex Types
Complex Type Restriction
Complex Type Extension
Local Complex Types Mapped to Inner Classes
Default Constructor Dynamic Methods
Type Identifier Mapping