XML: Como assim XSD?

Introdução

No primeiro artigo foi iniciada a apresentação da XML, enquanto o segundo artigo mostrou o que é um documento XML válido e como é possível validar-lo. Neste artigo você verá como criar um XML Schema (Esquema XML), mas como foi dito no segundo artigo, e não deve ser esquecido, um XML Schema também é um documento XML.

Relembrar é viver

Como mostrado no segundo artigo, o XML Schema por si só é um documento XML, logo, todas as regras aplicadas a um documento XML também devem ser aplicadas ao XML Schema. A grande diferença é que o XML Schema descreve a estrutura de documento XML, além de ser uma alternativa aos DTD (Document Type Definition - Definição de Tipos de Documento). O XML Schema é uma linguagem que também pode ser designada como XSD (XML Schema Definition - Definição de Esquema XML).

 

 

Já no primeiro artigo foi dito que um documento XML é usada para representar dados e não descrever aparência, como é feito pela HTML, sendo a XML o resultado de estudos do W3C (World Wide Web Consortium - Consórcio da Rede Mundial de Computadores).

Elemento da XML

Um elemento simples pode ser definido como um elemento XML que suporta apenas valores, enquanto um elemento complexo são divididos em 4 (quatro) categorias:

  1. Elementos vazios.
  2. Elementos que só contêm outros elementos.
  3. Elementos que só contêm valores.
  4. Elementos que contêm outros elementos e valores.

Obs.: No decorre do artigo a criação do arquivo XSD será baseado no namespace "http://www.w3.org/2001/XMLSchema", para maiores esclarecimentos leia o segundo artigo desta série.

A partir deste ponto o artigo será divido em exemplos explicados para facilitar a sua compreensão, seguindo a filosofia do nosso blog "Retirando dúvida de forma clara, objetiva e sem dá voltas".

O primeiro exemplo

Nesse exemplo será criado um documento para armazenar o nome e idade de uma pessoa.

<?xml version="1.0" encoding="UTF-8"?>
<pessoa>
    <nome>Tadeu</nome>
    <idade>42</idade>
</pessoa>

Explicando o documento

O documento informa que o arquivo terá um elemento raiz chamado pessoa, esse elemento raiz é do tipo complexo contendo dois elemento simples (nome e idade). O elemento nome tem o valor Tadeu já o elemento idade contém o valor 42. Este documento pode ser validado pelo esquema abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="pessoa">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="nome" type="xsd:string"/>
                <xsd:element name="idade" type="xsd:integer"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

 Explicando o esquema

O XSD declara que o documento para ser válido deve ter um elemento complexo chamado pessoa, esse elemento complexo deve ter os elementos simples nome e idade, onde nome é do tipo xsd:stringidade do tipo xsd:integer.

Elemento: Omissão de Valor vs. Valor Fixo

Um elemento pode ter um valor omitido (default) ou fixo (fixed).
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:element name="cor_1" type="xsd:string" default="vermelho"/>
    <xsd:element name="cor_2" type="xsd:string" fixed="vermelho"/>
...
</xsd:schema>

Explicando o esquema

O esquema informa que o elemento cor_1 é do tipo xsd:string e se nada for especificado receberá o valor vermelho. O elemento cor_2 também é do tipo xsd:string e o seu valor vermelho não pode ser mudado.

Elemento: Definindo atributo

Um elemento pode ter nenhum, um ou vários atributos definidos.
<?xml version="1.0" encoding="UTF-8"?>
<pessoa>
    <nome>Tadeu</nome>
    <idade>42</idade>
    <apelido idioma="pt-br">Pereira</apelido>
</pessoa>

Explicando o documento

Esse documento já foi quase todo explicado, sendo acrescentado apenas o elemento apelido, que tem o atributo idioma com o valor pt-br.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:element name="apelido">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:attribute name="idioma" type="xsd:string"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
</xsd:schema>

Explicando o esquema

O esquema define que o elemento apelido é do tipo simples, só aceita valores xsd:string e tem o atributo idioma que também só aceita valores xsd:string.

Atributo: Omissão de Valor vs. Valor Fixo

Assim como os elementos, os atributos podem ter um valor omitido (default) ou fixo (fixed).
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:attribute name="idioma_1" type="xsd:string" fixed="pt-br"/>
    <xsd:attribute name="idioma_2" type="xsd:string" default="en"/>
...
</xsd:schema>

Explicando o esquema

O atributo idioma_1 tem o valor fixo em pt-br, por sua vez, o atributo idioma_2 tem en como valor caso nada seja especificado.

Atributo: Opcional vs. Requerido

Um atributo pode ser opcional ou requerido (exigido, obrigatório).

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:attribute name="idioma_1" type="xsd:string" use="required"/>
    <xsd:attribute name="idioma_2" type="xsd:string" use="optional"/>
...
</xsd:schema>

Explicando o esquema

O atributo idioma_1 foi definido como uso obrigatório, já o atributo idioma_2 foi definido como uso opcional.

Faixa de valores

É possível especificar as faixas de valores que um elemento ou atributo pode receber.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:element name="idade">
        <xsd:simpleType>
            <xsd:restriction base="xsd:integer">
                <xsd:minInclusive value="20"/>
                <xsd:maxInclusive value="70"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
</xsd:schema>

Explicando o esquema

O elemento idade pode ter valores do tipo xsd:integer compreendidos entre 20 (vinte) e 70 (setenta), incluído os mesmos.

Comprimento do valor

O tamanho mínimo e máximo de um valor (em caractere alfanumérico) pode ser determinado no esquema.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:element name="password">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:minLength value="5"/>
                <xsd:maxLength value="10"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
</xsd:schema>

Explicando o esquema

O elemento password é do tipo xsd:string e deve ter no mínimo 5 (cinco) e no máximo 10 (dez) caracteres.

Padronizando valores

Os valores a serem incluídos podem ser restringidos por uma padronização definida no esquema.

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
    <xsd:element name="letra">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="[a-z]"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
    <xsd:element name="telefone">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:pattern value=“3511-[0-9]{4}"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
    <xsd:element name="palavra">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="([a-z])*"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
    <xsd:element name="sexo">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="m|f"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
...
</xsd:schema>

Explicando o esquema

O elemento letra é do tipo xsd:string e permite uma e somente uma única letra minúscula entre a e z, inclusive. O elemento telefone é do tipo xsd:string, devendo deve iniciar com os caracteres 3511, seguido por um traço, seguido por 4(quatro) dígitos entre 0 (zero) e 9 (nove), inclusive.

O elemento palavra é do tipo xsd:string, esse elemento aceita 0 (zero) ou mais ocorrências de letras minúscula entre a e z, inclusive. Por fim, o elemento sexo também é do tipo xsd:string e só aceita como valor a letra m ou f.

Conclusão

Neste artigo foram dados exemplos que podem ser estudados e incluídos na criação de um XML Schema, o próximo artigo continuará apresentando novos exemplos, mostrando como é possível criar um arquivo XSD robusto e de forma simples.

Se você ainda não leu o primeiro e o segundo artigo desta série, leia agora, pois eles são a base para esse artigo e para o próximo.

Até o próximo artigo.