Tipos complejos

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;
}