XML: esquemas

El esquema XML se conoce comúnmente como XML Schema Definition (XSD). Se utiliza para describir y validar la estructura y el contenido de los datos XML. El esquema XML define los elementos, atributos y tipos de datos. El elemento de esquema admite espacios de nombres. Es similar a un esquema de base de datos que describe los datos en una base de datos.

Sintaxis

Debe declarar un esquema en su documento XML de la siguiente manera:

Ejemplo

El siguiente ejemplo muestra cómo utilizar el esquema:

<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = "contact">
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "name" type = "xs:string" />
            <xs:element name = "company" type = "xs:string" />
            <xs:element name = "phone" type = "xs:int" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

La idea básica detrás de los esquemas XML es que describen el formato legítimo que puede adoptar un documento XML.

Elementos

Como vimos en el capítulo XML - Elementos , los elementos son los componentes básicos del documento XML. Un elemento se puede definir dentro de un XSD de la siguiente manera:

<xs:element name = "x" type = "y"/>

Tipos de definición

Puede definir elementos de esquema XML de las siguientes formas:

Tipo simple

El elemento de tipo simple se usa solo en el contexto del texto. Algunos de los tipos simples predefinidos son: xs: integer, xs: boolean, xs: string, xs: date. Por ejemplo

<xs:element name = "phone_number" type = "xs:int" />

Tipo complejo

Un tipo complejo es un contenedor para otras definiciones de elementos. Esto le permite especificar qué elementos secundarios puede contener un elemento y proporcionar alguna estructura dentro de sus documentos XML. Por ejemplo

<xs:element name = "Address">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "company" type = "xs:string" />
         <xs:element name = "phone" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element>

En el ejemplo anterior, el elemento Dirección consta de elementos secundarios. Este es un contenedor para otros<xs:element> definiciones, que permite construir una jerarquía simple de elementos en el documento XML.

Tipos globales

Con el tipo global, puede definir un solo tipo en su documento, que puede ser utilizado por todas las demás referencias. Por ejemplo, suponga que desea generalizar la persona y la empresa para diferentes direcciones de la empresa. En tal caso, puede definir un tipo general de la siguiente manera:

<xs:element name = "AddressType">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "company" type = "xs:string" />
      </xs:sequence> 
   </xs:complexType>
</xs:element>

Ahora usemos este tipo en nuestro ejemplo de la siguiente manera:

<xs:element name = "Address1">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone1" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element> 

<xs:element name = "Address2">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone2" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element>

En lugar de tener que definir el nombre y la empresa dos veces (una para Address1 y otra para Address2 ), ahora tenemos una única definición. Esto simplifica el mantenimiento, es decir, si decide agregar elementos de "Código postal" a la dirección, debe agregarlos en un solo lugar.

Atributos

Los atributos en XSD proporcionan información adicional dentro de un elemento. Los atributos tienen propiedad de nombre y tipo como se muestra a continuación:

<xs:attribute name = "x" type = "y"/>