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.