XML: O documento é válido?

Introdução

No artigo anterior foi iniciada a apresentação da XML, durante o artigo foi possível conhecer um pouco da história e entender o que é um documento XML bem formatado. Neste artigo você será levado a entender o que é um documento XML válido e qual a diferença entre um DTD (Document Type Definition - Definição de Tipos de Documento) e um XML Schema (Esquema XML).

Critério de validação

O critério de validação é mais rigoroso, segundo [DATE] um documento XML só é válido "se e somente se ele estiver bem formatado e estiver de acordo com alguma DTD especificada", e [ELMASRI] complementa afirmando que a validação pode ser efetuada usando tanto um arquivo DTD quanto um arquivo XML Schema.

 sddfas

 

O documento XML

Na sequência é mostrado o documento XML que foi apresentado e explicado no artigo anterior. Ele será usado neste artigo para expor a utilização do critério de validação baseado tanto num arquivo DTD quanto num arquivo XML Schema.

<?xml version="1.0" encoding="UTF-8"?>
<aluno situacao="Não Matriculado">
    <nome>Tadeu</nome>
    <idade>42</idade>
</aluno>

DTD (Document Type Definition - Definição de Tipos de Documentos)

Um arquivo DTD estabelece as regras que definem a composição de um documento XML. Num arquivo DTD é possível definir (i) quais elemento e atributos um documento XML deve ter, (ii) que tipo de relacionamento um elemento tem com outro, (iii) quais partes do documento XML são obrigatórias ou opcionais, etc. O arquivo DTD pode ser criado separado do documento XML, ou fazer parte do mesmo.

Um arquivo DTD que pode ser usado para validar o exemplo do documento XML apresentado no artigo anterior é mostrado na sequência.

<!ELEMENT aluno (nome, idade?)>
<!ATTLIST aluno situacao (Matriculado | Não Matriculado) “Matriculado”>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT idade (#PCDATA)>

Este arquivo DTD declara que para um documento XML ser válido, ele precisa ter um elemento raiz chamado aluno. Esse elemento raiz deve ter obrigatoriamente um elemento nome e opcionalmente o elemento idade. O elemento aluno possui o atributo situacao, onde os valores possíveis para esse atributo são Matriculado e Não Matriculado, caso o atributo não seja declarado, o valor padrão que deve ser assumido é Matriculado.

Segundo [ELMASRI] o DTD é "adequado para especificar estruturas de árvores com elementos obrigatórios, opcionais e repetitivos", mas ele possui limitações tais como:

  • Não utiliza a sintaxe XML, obrigando a criação de um analisador diferente para o seu processamento.
  • Os tipos de dados não são genéricos.
  • Força a ordem especifica para os elementos no documento, onde elementos fora de ordem não são permitidos.

XML Schema (Esquema XML)

Para resolver as limitações apresentadas pelo DTD foi proposta a padronização XML Schema. Uma desvantagem da padronização XML Schema apresentada por [DATE] é que eles "são consideravelmente mais complexos do que uma simples DTD". Mas, de uma maneira geral, o XML Schema proporciona mais vantagens que desvantagens, algumas das vantagens do XML Schema em relação ao DTD são:

  • XML Schema por si só é um documento XML.
  • XML Schema admite tipos mais sofisticados.
  • XML Schema oferece um meio simples para especificar que a ordem dos elementos não importa.

Um equivalente em XML Schema do arquivo DTD apresentado anteriormente pode ser visto no exemplo abaixo:

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

  <xsd:element name="aluno">
    <xsd:complexType>
      <xsd:element name="nome" type="xsd:string"/>
      <xsd:element name="idade" type="xsd:integer" minOccurs="0" maxOccurs="1"/>
      <xsd:attibute name= "situacao" type="tpSituacao" default="Matriculado"/>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="tpSituacao">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Matriculado"/>
      <xsd:enumeration value="Não Matriculado"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

Explicando o XML Schema

No exemplo o <xsd:schema> é o elemento raiz do XML Schema. A declaração xmlns:xsd="http://www.w3.org/2001/XMLSchema" indica que os elementos e tipos de dados usados no XML Schema vêm do namespace "http://www.w3.org/2001/XMLSchema"; também informa que todos os elementos e tipos desse namespace devem ter o prefixo xsd.

O elemento aluno é do tipo complexo (ou composto), isso quer dizer que ele pode conter valores, elementos ou valores e elementos. O elemento nome é um elemento simples, ou seja, só pode conter valores, além disso os valores tem que ser do tipo xsd:string (alfanumérico).

O elemento idade também é um elemento simples, mas neste caso ele só aceita valores do tipo xsd:integer (inteiro), podendo ter no mínimo 0 (zero) ocorrência (minOccurs="0") e no máximo 1 (uma) ocorrência (maxOccurs="1").

O elemento aluno também têm o atributos situacao do tipo tpSituacao com valor Matriculado como padrão. Mas como é possível perceber que o tipo tpSituacao não está declarado como pertencente ao namespace informado na linha 2 (dois). Esse tipo na realidade é um elemento simples que tem o início da sua definição na linha 12 (doze). Ele é do tipo xsd:string e os seus valores são restringidos a um conjunto enumerado, no caso Matriculado e Não Matriculado.

Conclusão

O artigo anterior mostrou as principais características de um documento XML. Já este artigo o levou a entender como as regras de validação de um documento XML são criados,  sendo mostrada a diferença entre um arquivo DTD e um arquivo XML Schema. No próximo artigo será abordado características que podem ser usadas no XML Schema.

Até o próximo artigo.

Bibliografias Citadas

[DATE] DATE, C.J. Introdução a Sistemas de Banco de Dados. 8 ed. Rio de Janeiro: Elsevier, 2003.

[ELMASRI] ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de Banco de Dados. 4 ed. São Paulo: Pearson Addison Wesley, 2005.