Puede utilizar contenido mixto en un esquema y un documento XML.
Contenido mixto en un esquema y un documento XML
Este ejemplo muestra el uso de contenido mixto en un esquema y un documento XML. El esquema contiene un elemento de tipo int y un elemento de tipo string.
A continuación se muestra el esquema:
<element name="observation">
<complexType mixed="true">
<sequence>
<element name="temperature" type="int">
<element name="city" type="string">
</sequence>
...
</complexType>
</element>
Este es el extracto de un documento XML:
<observation>
It is <temperature>10</temperature>degrees in <city>London</city>.
</observation>
Y aquí está la representación XOM:
class Observation extends IlrXmlObject
{
int temperature;
String city;
String content;
}
El contenido del elemento de observación se convierte en un único String que concatena todas las series y se coloca en un atributo especial denominado content.
Correlación de tipos complejos
La tabla siguiente muestra algunas correlaciones de tipos complejos entre un esquema y un modelo dinámico.
Tabla 1. Correlación de tipos complejos estándar
| Caso |
Esquema |
Modelo dinámico |
| Elemento con tipo complejo local de componente unario |
<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;
|
| Elemento con tipo complejo local de componente unario |
<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;
|
| Elemento con tipo |
<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;
|
| Elemento con tipo con grupo de colecciones |
<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;
|
| Tipo complejo local: cuando se permiten clases internas |
<complexType name=”t1”>
<sequence>
<element name=”e1”>
<complexType>
…
</complexType>
</complexType>
</element>
|
class T1 extends IlrXmlObject
{
class E1 extends IlrXmlObject
{
…
}
E1 e1;
}
|
| Tipo complejo local: cuando las clases internas no están permitidas |
<complexType name=”t1”>
<sequence>
<element name=”e1”>
<complexType>
…
</complexType>
</complexType>
</element>
|
Class E1 extends IlrXmlObject
{
}
class T1 extends IlrXmlObject
{
E1 e1;
}
|
Correlación de contenido simple
La tabla siguiente muestra algunas correlaciones de contenido simples entre un esquema y un modelo dinámico.
Tabla 2. Correlación de contenido simple
| Caso |
Esquema |
Modelo dinámico |
| Tipo complejo con contenido simple |
<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;
}
|
| Tipo complejo que hereda por extensión del tipo complejo con contenido simple |
<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;
…
}
|
| Tipo complejo que hereda por restricción del tipo complejo con contenido simple |
<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
{
}
|
Correlación de contenido complejo
La tabla siguiente muestra algunas correlaciones de contenido complejas entre un esquema y un modelo dinámico.
Tabla 3. Correlación de contenido complejo
| Caso |
Esquema |
Modelo dinámico |
| Tipo complejo que hereda por extensión |
<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;
}
|
| Tipo complejo heredado por restricción |
<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
{
}
|
| Tipo complejo con contenido mixto, heredado por extensión |
<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;
}
|