Está en la página 1de 6

XML Schema elementos simples y tipos de datos

XML Schema, elementos simples

Los ficheros XSD pueden estar formados por elementos simples o complejos. Los
elementos simples son aquellos que solamente pueden contener un valor concreto (un
texto, un número) y nada más. Si necesitamos un elemento que a su vez contenga otros
elementos o atributos eso sería un elemento complejo.

Para definir un elemento simple basta con poner algo así:

<xs:element name="nombrecliente" type="xs:string" />

Está claro que ese elemento contendrá un texto.

Los tipos
Los tipos se pueden aplicar tanto a elementos como a atributos. Los atributos
personalizados
se aplican a elementos complejos. Pero ahora lo que nos ocupa es ver qué tipos tenemos.

Los tipos de los que disponemos son los habituales: string, integer, decimal, date, time,
boolean,... cada uno
con sus peculiaridades y opciones.

El tipo boolean
Es de los más simples, puede contener cuatro posibles valores: true, false, 1, 0

El tipo string y sus derivados


Es un tipo bastante simple del que se pueden crear tipos simples con ciertas restricciones
como whitespace, length,minLength,maxLength,pattern,enumeration,assertions
Por ejemplo el DNI:

<xs:element name="dni">
<xs:simpleType>
<xs:restriction base='string'>
<xs:length value='9' fixed='true' />
</xs:restriction>
</xs:simpleType>
<xs:element>
O una enumeración:
<xs:element name="sistema">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Windows"/>
<xs:enumeration value="Linux"/>
<xs:enumeration value="OS2"/>
<xs:enumeration value="MSDOS"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Los patrones permiten expresiones regulares. El dni se puede hacer así también:
<xs:element name="dni" type="tipoDni" />

<xs:simpleType name="tipoDni">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{8}[A-Z]{1}"/>
</xs:restriction>
</xs:simpleType>

Con el whitespace podemos indicar cómo queremos que se traten los espacios en blanco.
Podemos indicar estos valores:
preserve: mantiene los espacios blancos o caracteres no visibles.
collapse: quita cualquier caracter no visible (espacios, saltos, etc..)
replace: sustituye saltos de línea etc por espacios en blanco.

<xs:element name="nombreLimpio">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Las longitudes también dan juego:


<xs:element name="contrasena">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="8"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Tipos numéricos
Aparte de los clásicos interger y decimal, disponemos de los siguientes:
byte, unsignedByte
decimal,
int, unsignedInt,
integer, negativeInteger (-1,-2,-3,..), nonPositiveInteger (0,-1,-2,...), nonNegativeInteger
(0,1,2,...), positiveInteger (1,2,3,...)
long,unsignedLong
short,unsignedShort

Si cremos tipos propios como con los Strings podemos aplicar estas resitrcciones:
enumeration: un conjunto de números
fractionDigits: total de decimales a mostrar
maxExclusive: valor máximo EXcluyendo el indicado
maxInclusive: valor máximo incluyendo el indicado
minExclusive: valor mínimo EXcluyendo el indicado
minInclusive: valor mínimo incluyendo el indicado
pattern: aplicar patrón regex
totalDigits: total de dígitos a mostrar
whiteSpace: tratamiendo de espacios en blanco
Las fechas.
Hay varios tipos.
Date
El date de toda la vida
<xs:element name="nacimiento" type="xs:date" />

Por ejemplo (es Año-Mes-Día)


<nacimiento>1983-02-28</nacimiento>

Podemos indicar la zona horaria en la fecha. Añadir una Z para zona UTC o bien
añadir diferencia de zona en positivo o negativo.

<nacimiento>1985-12-23-03:00</nacimiento>
<nacimiento>1985-12-23+03:00</nacimiento>

¡Ojo!! no es la hora, es la diferencia horaria.


Luego está el time para indicar una hora en formato hh:mm:ss
<xs:element name="inicio" type="xs:time" />

Por ejemplo:

<inicio>09:15:00</inicio>

También podemos indicar la zona horaria.


<inicio>09:15:00+01:00</inicio>

El dateTime
Une fecha y hora con formato: YYYY-MM-DDThh:mm:ss
Ojo con la T.
<xs:element name="instalacion" type="xs:dateTime" />
Por ejemplo:
<instalacion>2012-10-23T09:34:23</instalacion>

Y se puede añadir la zona horaria también.


<instalacion>2012-10-23T09:34:23-07:00</instalacion>

Duration, la duración en tiempo


Este tipo nos permite indicar la duración del tiempo.
El formato es el siguiente: PnYnMnDTnHnMnS
La P hay que ponerla sí o sí el resto:
nY indica n años
nM n meses
nD n días
T En el caso de que vayamos indicar un tiempo ponemos la T primero
nH n horas
nM n minutos
nS n segundos

Por ejemplo
<xs:element name="condena" type="duration" />

y un valor:
<condena>P5Y2M1D</condena>

Sería una condena de cinco años dos meses y un día.


Luego tenemos los tipos más básicos
type="xs:gDay" para representar un día en formato DD
type="xs:gMonth" para representar un mes en formato MM
type="xs:gMonthDay" para representar un mes-día en formato MM-DD
type="xs:gYear" para representar un año en formato YYYY
type="xs:gYearMonth" para representar un año-mes en formato YYYY-MM

Si cremos tipos propios como con los Strings y números podemos aplicar estas
resitrcciones:
enumeration
maxExclusive
maxInclusive
minExclusive
minInclusive
pattern
whiteSpace

Otros tipos raros


El binario:
puede ser en formato base64 o hexadecimal. Esto nos puede servir para meter un churro
en alguno de esos formatos dentro del document XML.

<xs:element name="binario" type="xs:hexBinary"/>


Luego
<binario>DEAD0663245345ABDDEAD2346562</binario>

Otro:
<xs:element name="adjunto" type="xs:base64Binary"/>

AnyURI
Es un tipo muy interesante para indicar una URL
<xs:element name="web" type="xs:anyURI" />

Luego
<web>http://pello.io</web>

---

Aplicable para todos


Aparte del tipo podemos especificar un valor por defecto:
<xs:element name="bote" type="xs:int" default="20" />

O incluso un valor fijo con el atributo fixed:

<xs:element name="pi" type="xs:decimal" fixed="3.1415" />

También podría gustarte