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