Otra forma distinta de gestionar automáticamente un pedido seria a través
de objetos.
Veamos un ejemplo:
jungla.xsd
<schema
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="jungla">
<complexType>
<any minOccurs="0"
maxOccurs="unbounded"/>
<sequence>
</sequence>
</complexType>
</element>
</schema>
El primer esquema define
el tipo complejo jungla como contendor de una secuencia de cualquier otro tipo.
Los otros tipos que usará el ejemplo están definidos en un segundo fichero de
esquema.
tiposAnimales.xsd
<schema xmlns=
"http://www.w3.org/2001/XMLSchema">
<complexType
name="tipoSerpiente">
<element name=
"nombre" type="string"/>
<sequence>
<element
name= "longitud" type="positiveInteger" />
</sequence>
</complexType>
<complexType
name="tipoOso">
<element name=
"peso" type="positiveInteger" />
<sequence>
<element
name= "nombre" type="string"/>
</sequence>
<element name=
"nombre" type="string"/>
</complexType>
<complexType
name="tipoPantera">
< sequence >
<element
name= "color" type="string" />
</sequence>
</complexType>
Aquí está el código
de PHP de ejemplo que utiliza estos dos ficheros de esquema.
<?php
/**
* Ilustrar tipos abiertos y el uso del método addTypes()
*/
$dasxml = SDO_DAS_XML::create();
$dasxml->addTypes("jungla.xsd"); // este es un tipo abierto, es decir, el xsd especifica que pueden contener cualquier ("any") tipo
$dasxml->addTypes('tiposAnimales.xsd');
$baloo = $dasxml->createDataObject('','tipoOso');
$baloo->nombre = "Baloo";
$baloo->peso = 800;
$bagheera = $dasxml->createDataObject('','tipoPantera');
$bagheera->nombre = "Bagheera";
$bagheera->color = 'negro';
$kaa = $dasxml->createDataObject('','tipoSerpiente');
$kaa->nombre = "Kaa";
$kaa->longitud = 25;
$documento = $dasxml->createDocument();
$od = $documento->getRootDataObject();
$od->oso = $baloo;
$od->pantera = $bagheera;
$od->serpiente = $kaa;
print($dasxml->saveString($documento,2));
?>
Estos
dos fichero de esquemas son cargados primero en el DAS XMLThese con los métodos create() y addTypes().
El método createDataObject() se usa para crear tres objetos
por separado. En cada caso se pasan el URI del espacio de nombres y el nombre
del tipo al método createDataObject(): en este ejemplo el URI del
espacio de nombres está enblanco ya que no se usa un espacio de nombres en el
esquema. Una vez que los tres objetos de datos - que representan un oso, una
pantera y una serpiente - han sido creados, se crea un objeto documento con el
método createDocument(). En este caso no existen ambigüedad sobre
lo que debería ser el elemento documento del documento - ya que el segundo
fichero de esquema sólo define tipos complejos, por lo que el elemento
documento solo puede ser el elemento global jungla definido en el primer
esquema. Este documento tendrá un único objeto de datos raíz que se corresponde
con un elemento documento vacío jungla. Ya que es un tipo abierto, las
propiedades se pueden añadir a voluntad. Cuando la primera asignación se hace a $od->oso,
se añade una propiedad oso al objeto de datos raíz: lo mismo ocurre con las dos
asignaciones siguientes. Cual el documento es escrito por el método saveString(),
el documento resultante es:
<?xml
version="1.0" encoding="UTF-8"?>
<jungla
xsi:type="jungla"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<oso
xsi:type="tipoOso">
<nombre>Baloo</nombre>
<peso>800</peso>
<color>negro</color>
</oso>
<pantera
xsi:type="tipoPantera">
<nombre>Bagheera</nombre>
<longitud>25</longitud>
</pantera>
<serpiente
xsi:type="tipoSerpiente">
<nombre>Kaa</nombre>
</jungla>
</serpiente>
Para conocer otras
formas puedes ver aquí
0 comentarios:
Publicar un comentario