Latest web development tutorials

instância XML Schema

Esta secção irá mostrar-lhe como escrever um esquema XML. Você também vai aprender maneiras diferentes de escrever o esquema.


documentos XML

Vamos olhar para isso, chamado de "shiporder.xml" documento 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>

O elemento acima da raiz do documento XML "shiporder", que contém o atributo deve ser nomeado "orderid" de. "ShipOrder" elemento contém três diferentes elementos filho: "orderperson", "shipto" e "item". "Item" elemento aparece duas vezes, e ele contém um "título", um opcional "nota" elemento, a "quantidade" e um elementos "preço".

Os xmlns linha acima: xsi = "http://www.w3.org/2001/XMLSchema-instance", disse um esquema baseado no parser XML para validar esse documento. A linha: xsi: noNamespaceSchemaLocation = "shiporder.xsd" esquema define a posição (neste caso, "shiporder.xml" na mesma pasta).


Criar um esquema XML

Agora, precisamos criar um esquema para o documento XML acima.

Podemos começar por abrir um novo arquivo e esse arquivo é chamado "shiporder.xsd". Para criar um esquema, só precisamos de simplesmente seguir a estrutura do documento XML, cada elemento da definição de o que encontramos. Primeiro, começamos a definir uma declaração XML padrão:

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

No esquema acima, usamos o namespace padrão (xs), espaço URI associado a este nome é a definição da linguagem de esquema de (definição de linguagem Schema), o seu valor padrão é http://www.w3.org/ 2001 / XMLSchema.

Em seguida, precisamos definir elemento "shiporder". Este elemento tem uma propriedade que contém outros elementos, por conseguinte, que identificou-o como um tipo complexo. Sub-element "shiporder" é xs: sequence elemento rodeado define a ordem de sub-elementos:

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

Então precisamos "orderperson" elemento é definido como um tipo simples (porque ele não contém quaisquer atributos ou outros elementos). Tipo (xs: string) é prefixado pelo disposto namespace prefix deste namespace e instruções predefinidas esquema esquema de tipos de dados XML associados com:

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

Em seguida, eu preciso de os dois elementos definidos como tipo complexo: "shipto" e "item". Começamos por definir "shipto" elemento começa:

<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>

Pelo esquema, podemos definir o número de vezes que um elemento pode ocorrer usando maxOccurs e minOccurs atributos. maxOccurs definir um número máximo de elementos aparecer, e minOccurs define o número mínimo de ocorrências de um elemento. Padrão maxOccurs e minOccurs é 1!

Agora, podemos definir o elemento "item" de. Este elemento pode aparecer várias vezes dentro do elemento "shiporder". Isso é feito por o "item" maxOccurs elemento de atributo valor é definido como "ilimitado" para alcançar, de modo que elemento "item" pode ser o criador aparece como quantas vezes desejar. Por favor note, "nota" elemento é opcional. Temos minOccurs atributo desse elemento é definido como 0 em:

<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>

Nós agora pode declarar atributo "shiporder" do elemento. Como este é um atributo obrigatório, nós especificar use = "required".

Nota: Esta propriedade deve ser declarado no último:

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

Esta é uma lista de documentos, chamado de "shiporder.xsd" o arquivo 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>


Dividir Schema

Em frente ao método de projeto é muito fácil, mas é difícil de ler e manter documentos estão Shique complexa.

Em seguida, com base no método de criação descrito na primeira definição de todos os elementos e atributos, e, em seguida, usar o atributo ref para se referir a elas.

Esta nova abordagem é projetado arquivo 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>


Usando o tipo especificado (tipos nomeados)

O terceiro método de projeto define uma classe ou tipo, de modo que temos a capacidade de definir elementos reutilizáveis. abordagem específica é: primeiro elemento de simples e complexos elementos name e digite atributo do elemento para apontar a eles

Este terceiro método é a utilização do esquema de criação arquivo ( "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 restrição mostrando o tipo de dados derivados do namespace tipo de dados W3C XML Schema. Por isso, o seguinte fragmento significa que o valor do valor de elemento ou atributo deve ser um tipo de cadeia:

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

elemento de restrição muitas vezes utilizados para impor restrições aos elementos. Considere o seguinte fragmento do esquema acima:

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

Esse código indica que o valor do elemento ou atributo deve ser uma cadeia, e deve ser consecutivos seis caracteres, e esses caracteres devem ser 0-9.