Validando Documentos XML
Vânia Maria Ponte Vidal
[email protected]
Validando Documentos XML

Como em banco de dados, XML pode ter uma
espécie de “esquema” o qual consiste de um
conjunto de regras que definem a estrutura do
documento.

Um documento é válido com relação a um dado
esquema XML se obdece este esquema
Documento
XML
Parser
Esquema
XML
Documento
XML válido
Documento
XML inválido
Validando Documentos XML

Linguagens de Esquemas XML

DTD – Document Type Definition

XML Schema
DTD - Document Type Definition
Elemento Raiz
Definição da DTD:
livraria.dtd
livraria
livro
@ISBN titulo editora autor
livro
autor
1234 Inside New Jennifer U.Tom D.
XML Riders
<!ELEMENT livraria (livro)+>
<!ELEMENT livro (titulo,editora, autor+)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT editora (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ATTLIST livro ISBN CDATA]>
autor
Steven
DTDs


DTD define uma gramática para validar
documentos, isto é, conjunto de regras que
definem a estrutura do documento
Em uma DTD são definidos:




os elementos contidos no documento.
os atributos dos elementos
as entidades
a hierarquia e a ordem desses elementos
DTDs




Descreve os elementos e atributos que podem
aparecer em um documento.
Descreve a estrutura da árvore que pode ser
aceita para o documento
A validação compara um documento em
particular com uma DTD correspondente
É necessário que um documento seja bemformado para ser validado
DTD

Exemplo de aplicações de DTD:











registros médicos
enciclopédias
catálogos de produto
jornais
dicionários
contratos
políticas e procedimentos
artigos científicos
ordens de compra
normas/regulamentos
manuais de usuário
Exemplo
Definição da DTD : livraria.dtd
<! --Definição de Tipo de Documento-->
<!ELEMENT livraria (livro)+>
<!ELEMENT livro (titulo,autor,preco)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT preco (#PCDATA)>
Declaração da DTD

A DTD pode ser definida de duas
formas:


Declarada dentro do documento XML
Utilizando a tag <!DOCTYPE> para apontar
para um entidade externa
Declaração da DTD

Internamente
Documento – livraria.xml
<!DOCTYPE livraria[
<!ELEMENT livraria (livro)*>
<!ELEMENT livro(titulo,autor,preço)>
<!ELEMENT título (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT preço (#PCDATA)>
]>
…Início do documento XML
Declaração da DTD
Documento – livraria.xml
<!DOCTYPE livraria SYSTEM “livraria.dtd”>
Referencia uma entidade externa
DTD

O DTD contém :




Declarações
Declarações
Declarações
Declarações
dos tipos de elementos
de listas de atributos
de entidade
de notação
Declaração de Elementos

Define um novo elemento e especifica o
conteúdo permitido para o elemento.
<!ELEMENT livro (título, autor)>


O Elemento pode ser vazio (geralmente usado para
imagens).
<!ELEMENT imagem EMPTY>
Quando um elemento é composto por somente
texto
<!ELEMENT autor (#PCDATA)>
#PCDATA = Parsable Character Data
Declaração de Elemento

Elementos com conteúdo Misto:

Quando o conteúdo do elemento possui
#PCDATA e outros elementos.
<!ELEMENT título (#PCDATA|tituloPrincipal|subTitulo)>
Declaração de Elementos

Controle de Seqüencia

Conector de sequência. Usa o conector “,”


Conector de Escolha. Usa o conector “|”


EX <!ELEMENT A (B,C,D)>
EX. <!ELEMENT A (B|C|D)>
Ao misturar os conectores, usa-se ()

<!ELEMENT A (B, (C|D)>
Declaração de Elementos

Seqüência de Elementos


O elemento contém os sub-elementos exatamente na ordem
especificada pela seqüência.
<!ELEMENT livro(titulo, autor,preco)>
<livro>
<titulo>…
<autor>…
<preco>…
</livro>
Ex: Válido
<livro>
<titulo>…
<preco>…
<autor>…
</livro>
Inválido
<livro>
<titulo>…
<preco>…
</livro>
Inválido
Declaração de Elementos

Escolha de sub-elemento


somente um dos elementos pode fazer parte do conteúdo
do elemento
<!ELEMENT livro(titulo|autor|preco)>
<livro>
<titulo>…
<preco>…
</livro>
Inválido
Declaração de Elementos

Controle de Ocorrência:




Especifica a quantidade de vezes que um subelemento pode aparecer em um elemento
Opcional (?)
Uma ou mais vezes (+)
Zero ou mais vezes (*)
Declaração de Elementos

(?): Elemento opcional sem repetição

<!ELEMENT livro(titulo, autor?, preco)>
<livro>
<titulo>…
<preco>…
</livro>
Válido
<livro>
<titulo>…
<autor>…
<autor>…
<preco>…
</livro>
Inválido
Declaração de Elementos

(+): Elemento requerido e com repetição

<!ELEMENT livro(titulo, autor+, preco)>
<livro>
<titulo>…
<preco>…
</livro>
Inválido
<livro>
<titulo>…
<autor>…
<autor>…
<preco>…
</livro>
Válido
Declaração de Elementos

(*): Elemento opcional e com repetição

<!ELEMENT livro(titulo, autor*, preco)>
<livro>
<titulo>…
<preco>…
</livro>
Válido
<livro>
<titulo>…
<autor>…
<autor>…
<preco>…
</livro>
Válido
Declaração de Elementos
Exemplos:

<!ELEMENT A (B,C?,D+)>


Um elemento A contém um elemento B,
opcionalmente seguido por um elemento C
seguido de um ou mais elementos D.
<!ELEMENT A (B,C,(D|E)*)>

Um elemento A contém um elemento B seguido
de um elemento C, o qual é seguido por zero ou
mais elementos D ou zero ou mais elementos E.
Declaração de Elementos
Exemplos :

<!ELEMENT A (B,C*,D?)>


Um elemento A contém um elemento B, seguido
por zero ou mais elementos C, opcionalmente
seguido por um elemento D.
<!ELEMENT A (B,(C|D)+,E)>

Um elemento A contém um elemento B seguido
por um ou mais elementos C ou um ou mais
elementos D. Este elemento é seguido de um
elemento E.
Declaração de Atributos

Elementos podem ter atributos e são declarados
separadamente dos elementos, em uma
declaração de lista de atributos.
<!DOCTYPE livro [
<!ELEMENT livro EMPTY>
<!ATTLIST livro titulo CDATA #REQUIRED]>
Tipo do atributo
Nome do atributo
Palavra reservada
Declaração de Atributos

#REQUIRED: Atributos que devem estar presentes cada vez
que o elemento é usado.
<!ATTLIST autor codigo CDATA #REQUIRED]>

#IMPLIED: Atributos que podem estar ausente cada vez
que o elemento é usado.
<!ATTLIST autor EMAIL CDATA #IMPLIED]>

Atributos podem ter valor Default
<!ATTLIST autor sexo CDATA “F”]>
<!ATTLIST autor sexo (F|M) “F”]>
Declaração de Atributos


Todo atributo tem um tipo.
O tipo de um atributo pode ser:






String ( CDATA)
Enumerado
ID
IDREF/ IDREFS
ENTITY/ENTITIES
NMTOKEN/NMTOKENS
Declaração de Atributos

Tipo String  Cadeia de caracteres de
qualquer tamanho

<!ATTLIST livro titulo CDATA>

Ex : <livro titulo=“Inside XML”/>
Declaração de Atributos

Tipo Enumerado  O atributo pode assumir
apenas um dos valores especificados na sua
declaração

<!ATTLIST livro gênero(ficção|romance|técnico)>

Exemplo válido: <livro gênero=“romance”/>

Exemplo inválido: <livro gênero=“terror”/>
Declaração de Atributos

Tipo ID  O valor deste atributo tem
que ser único por todo o documento.
(identificam unicamente elementos em
um documento).


<!ATTLIST livro isbn ID/>
Ex: <livro isbn=“243”/>
Declaração de Atributos


Tipo IDREF  O valor é uma referência
para um ID de um elemento.
<!ATTLIST autor livro IDREF/>

Ex: <autor livro=“243”/>
Declaração de Atributos


Tipo IDREFS  O valor é um conjunto
de valores os quais são referências para
IDs.
<!ATTLIST autor livros IDREFS/>

Ex: <autor livro=“243 567”/>
Exercício

Crie uma DTD externa que valide o documento XML
que está relacionado com o catálogo de Cds
<catalogo>
<cd ano="2002">
<titulo>Dança</titulo>
<artista>Rei do sucesso</artista>
<gravadora>EMI</gravadora>
<faixas><faixa>Boa</faixa><faixa>Melhor</faixa>
</faixas>
<preco>10.00</preco>
</cd>
</catalogo>
Download

validandoXML