Articles

Un ejemplo XSD

Este capítulo mostrará cómo escribir un esquema XML. También aprenderá que un esquema se puede escribir de diferentes maneras.

Un documento XML

Echemos un vistazo a este documento XML llamado «shiporder».xml»:

Crear un Esquema XML

Ahora queremos crear un esquema para el documento XML anterior.

Comenzamos abriendo un nuevo archivo que llamaremos «shiporder».xsd». Para crear el esquema, simplemente podríamos seguir la estructura del documento XML y definir cada elemento a medida que lo encontremos. Comenzaremos con la declaración XML estándar seguida del elemento xs: schema que define un esquema:

<?xml version = » 1.0 «encoding =» UTF-8″?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>

< / xs:schema>

En el esquema anterior utilizamos el espacio de nombres estándar (xs), y el URI asociado a este espacio de nombres es la definición del lenguaje de esquema, que tiene el valor estándar de http://www.w3.org/2001/XMLSchema.

A continuación, tenemos que definir el elemento «shiporder». Este elemento tiene un atributo y contiene otros elementos, por lo que lo consideramos un tipo complejo. Los elementos secundarios del elemento» shiporder » están rodeados por un elemento xs: sequence que define una secuencia ordenada de subelementos:

<xs:element name=»shiporder»>
<xs:complexType>
<xs:sequence>

</xs:sequence>
</xs:complexType>
</xs:element>

Then we have to define the «orderperson» element as a simple type (because it does not contain any attributes or other elements). The type (xs:cadena) se antepone el prefijo de espacio de nombres asociado con el Esquema XML que indica un esquema predefinido tipo de datos:

<xs:element name=»orderperson» type=»xs:string»/>

a continuación, tenemos que definir dos elementos que son del tipo complejo: «shipping» y «elemento». Comenzamos definiendo el elemento «shipto»:

Con esquemas podemos definir el número de ocurrencias posibles para un elemento con los atributos maxOccurs y minOccurs. maxOccurs especifica el número máximo de ocurrencias para un elemento y minOccurs especifica el número mínimo de ocurrencias para un elemento. El valor predeterminado para maxOccurs y minOccurs es 1!

Ahora podemos definir el «elemento» element. Este elemento puede aparecer varias veces dentro de un elemento» expedidor». Esto se especifica estableciendo el atributo maxOccurs del elemento «item» en «unbounded», lo que significa que puede haber tantas ocurrencias del elemento «item» como desee el autor. Observe que el elemento «nota» es opcional. Hemos especificado esto estableciendo el atributo minOccurs a cero:

Ahora podemos declarar el atributo del elemento» shiporder». Dado que este es un atributo requerido, especificamos use=»requerido».

Nota: El atributo declaraciones deben ser siempre el último:

<xs:attribute name=»orderid» type=»xs:string» use=»required»/>

Aquí está la lista completa del archivo de esquema llamado «shiporder.xsd»:

Dividir el esquema

El método de diseño anterior es muy simple, pero puede ser difícil de leer y mantener cuando los documentos son complejos.

El siguiente método de diseño se basa en definir primero todos los elementos y atributos, y luego referirse a ellos utilizando el atributo ref.

Aquí está el nuevo diseño del archivo de esquema («shiporder.xsd»):

Usando tipos con nombre

El tercer método de diseño define clases o tipos, lo que nos permite reutilizar definiciones de elementos. Esto se hace nombrando los elementos simpleTypes y complexTypes, y luego apuntándolos a través del atributo type del elemento.

Aquí está el tercer diseño del archivo de esquema («shiporder.xsd»):

El elemento restriction indica que el tipo de datos se deriva de un tipo de datos de espacio de nombres de esquema XML de W3C. Así, el siguiente fragmento significa que el valor del elemento o atributo debe ser un valor de cadena:

<xs:restriction base=»xs:string»>

The restriction element is more often used to apply restrictions to elements. Look at the following lines from the schema above:

<xs:simpleType name=»orderidtype»>
<xs:restriction base=»xs:string»>
<xs:pattern value=»{6}»/>
</xs:restriction>
</xs:simpleType>

Esto indica que el valor del elemento o atributo debe ser una cadena, debe tener exactamente seis caracteres seguidos y esos caracteres deben ser un número de 0 a 9.