You can use mixed content in a schema and an XML document.
Mixed content in a schema and XML document
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 is translated to a single String that
concatenates 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 1. 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 2. 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 3. 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;
}
|