Latest web development tutorials

ejemplo de esquema XML

Esta sección le mostrará cómo escribir un esquema XML. También podrá aprender diferentes formas de escribir el esquema.


documentos XML

Veamos esto, denominado documento XML "shiporder.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>

El elemento raíz del documento XML anterior "ShipOrder", que contiene el atributo debe llamarse "idpedido" de. elemento "ShipOrder" contiene tres diferentes elementos hijo: "orderperson", "enviarA" y "elemento". elemento "elemento" aparece dos veces, y contiene un "título", un elemento opcional "nota", una "cantidad" y una serie de elementos "precio".

Los xmlns línea anterior: xsi = "http://www.w3.org/2001/XMLSchema-instance", dijo a un esquema basado en el analizador XML para validar este documento. La línea: xsi: noNamespaceSchemaLocation = "shiporder.xsd" esquema define la posición (en este caso, "shiporder.xml" en la misma carpeta).


Crear un esquema XML

Ahora, tenemos que crear un esquema para el documento XML anterior.

Podemos empezar por abrir un nuevo archivo y el archivo es llamado "shiporder.xsd". Para crear un esquema, sólo tenemos que seguir simplemente la estructura del documento XML, cada elemento de la definición de lo que encontramos. En primer lugar, comenzamos a definir una declaración XML estándar:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

En el esquema anterior, se utiliza el espacio de nombres estándar (x), el espacio URI asociado con este nombre es la definición del lenguaje de esquema de (lenguaje de definición de esquema), su valor estándar es http://www.w3.org/ 2001 / XMLSchema.

A continuación, tenemos que definir el elemento "ShipOrder". Este elemento tiene una propiedad que contiene otros elementos, por lo tanto, lo identificamos como un tipo complejo. elemento o elemento secundario "ShipOrder" es xs: sequence elemento rodeado define el orden de los subelementos:

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>

Entonces necesitamos elemento "orderperson" se define como un tipo simple (porque no contiene ningún atributo o de otros elementos). Tipo (xs: string) es prefijado por las disposiciones de prefijo de espacio de nombres de este espacio de nombres y las instrucciones predefinidas esquema esquema de tipos de datos XML asociados con:

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

A continuación, necesito los dos elementos definidos como de tipo complejo: "enviarA" y "elemento". En principio el elemento "enviarA" comienza así:

<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Por esquema, podemos definir el número de veces que un elemento puede aparecer utilizando maxOccurs y atributos minOccurs. maxOccurs definen un número máximo de elementos aparecen, y minOccurs define el número mínimo de ocurrencias de un elemento. MaxOccurs predeterminado y minOccurs es 1!

Ahora, podemos definir el elemento "elemento" de. Este elemento puede aparecer varias veces dentro del elemento "ShipOrder". Esto se hace mediante el "punto" maxOccurs elemento de atributo valor se establece en "sin límites" para lograr, de manera que el elemento "elemento" puede ser el creador aparece tantas veces como se desee. Tenga en cuenta que "tenga en cuenta" elemento es opcional. Tenemos minOccurs atributo de este elemento se establece en 0 en:

<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Ahora podemos declarar atributo "ShipOrder" del elemento. Como este es un atributo obligatorio, se especifica el uso = "required".

Nota: Esta propiedad debe ser declarado en la última:

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

Esta es una lista de documentos, llamado "shiporder.xsd" el archivo de esquema:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


esquema de Split

Delante del método de diseño es muy fácil, pero es difícil de leer y mantener documentos son Shique compleja.

A continuación, basado en el método de diseño descrito en la primera definición de todos los elementos y atributos, y luego usar el árbitro atributo para referirse a ellos.

Este nuevo enfoque está diseñado archivo de esquema ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


El uso del tipo especificado (tipos con nombre)

El tercer método de diseño define una clase o tipo, por lo que tenemos la capacidad de definir los elementos reutilizables. Enfoque específico es: primer elemento de simple y complejo nombre de cada elemento, y luego tipo de atributo del elemento para que apunte a ellas

Este tercer método es el uso de archivo de diseño de esquema ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

elemento de restricción que muestra el tipo de datos derivados del tipo de datos de espacio de nombres de esquema XML de W3C. Por lo tanto, el siguiente fragmento significa que el valor del valor de elemento o atributo debe ser un tipo de cadena:

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

elemento de restricción de uso frecuente para imponer restricciones a los elementos. Considere el siguiente fragmento del siguiente esquema:

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

Este código indica que el valor del elemento o atributo debe ser una cadena, y debe ser consecutivos seis caracteres, y estos caracteres debe ser 0-9.