1Helder da Rochawww.argonavis.com.br
XML: uma introduo prtica
2Por que validar?
Para a maior parte das aplicaes, um XML bem formado suficiente possvel, em documentos XML no vlidos Montar a rvore usando DOM Extrair ns, acrescentar ns, alterar o contedo dos
elementos usando SAX ou DOM Transformar o documento em outro usando XSLT Gerar um PDF ou um SVG com dados contidos no
documento Exibir o XML em um browser usando CSS
Para que serve, ento, o trabalho de desenvolver um DTD?
3Definir uma linguagem
Para se ter uma linguagem precisa-se de um esquema Linguagem implica comunicao. No h comunicao eficiente sem uma
conveno entre as partes sobre vocabulrios, regras de formao, etc.
4Definir um esquema
Documentos no vlidos so "individualistas" Um esquema representa um conjunto de documentos,
que existem e que viro a existir possvel fazer muitas coisas com UM documento no
vlido. difcil automatizar os processos sem considerar uma CLASSE de documentos
Um esquema uma formalidade necessria Se voc tem uma grande coleo de documentos que
foram construdos segundo determinadas regras, voc jtem, informalmente, um esquema Para validar documentos de acordo com suas convenes,
preciso ter um esquema
5Classes vs. instncias
Um esquema define uma classe de documentos Os documentos que quiserem fazer parte dessa
classe devem aderir ao esquema Um documento pode pertencer a vrias
classes Um documento pode ser vlido em vrios
esquemas
6Documentos vlidos
Documentos vlidos contm Declarao de tipo de documento (para DTD), ou
Declarao de namespace e schema (para XMLSchema)
Para validar Use um validador (com suporte a Schema)
7O que define um esquema
Um vocabulrioElementos, atributosUma gramticaRelacionamentosUma coleo de entidadesNo caso dos DTDs
8Exemplo
Richard Feynman
F sico Matemtico Arrombador de cofres
9DTD
10
Documento vlido
RichardFeynman
11
Documento no vlido (1)
Por que?
Richard
Arrombador de cofres
12
Documento no vlido (2)Documento no vlido (2)
Por que?
Arrombador de cofres
RichardFeynman
F sico
13
DTD Externo SYSTEM
Como vincular
(...)
Elementos: vincula o DTD a um documento define um elemento define os atributos de um elemento define uma entidade ( ex: &nome;) define uma notao interna para uma URI
nome do elementoraiz do documento
onde buscar validao:SYSTEM ou PUBLIC
URI ou identificador
14
DTD pblico
Comum em linguagens consolidadas No precisa de URI, mas deve ser fornecida
por segurana FPI: formal public identifier arquivo chamado de "catalog" guardado com a
aplicao verifica o FPI se no encontrar, busca o DTD na URI fornecida
15
DTD Interno
]>
RichardFeynman
16
DTD incompleto
O DTD foi importado, mas est incompleto. Parte dele definido localmente
Elementos, atributos e entidades definidos no documento tm prioridade sobre declaraes importadas Processador l primeiro elementos locais, depois externos A primeira declarao usada. Declaraes adicionais
para o mesmo elemento/atributo/entidade so desconsideradas
]>
17
href CDATA #REQUIRED >
href CDATA #REQUIRED >
DTD: exemplozero ou uma ocorrncia exatamente uma
ocorrncia cada
zero ou mais ocorrncias
uma ou mais ocorrncias
no pode conter outros ns(exceto atributos)
definio deelemento
lista de atributos
atributo obrigatriocontm "Character DATA"
atributo opcionalcontm nome ou nmero
um ou o outro
valor default
18
Sintaxe
O contedo pode ser (1) ( #PCDATA) ,(2) ( uma seqncia) ,(3) ( uma lista para escolha) ,(4) ( contedo misto) ,(5) a palavra EMPTYou (6) a palavra ANY.
19
#PCDATA
Parsed Character Data Elemento pode conter textoNo pode conter elementos
20
Seqncias de Elementos-filho
O contedo deve ter uma lista de elementos separados por vrgula Podem ter sufixos indicando multiplicao * zero ou mais +um ou mais ? zero ou um
Exemplos
email *, website ?) >
21
Seleo de um Elemento-filho
Lista de elementos separada por |(barra vertical) Exemplos
22
Contedo misto
(#PCDATA | elem1 | ... | elemn)* #PCDATA tem que ser o primeiro elemento O * no final obrigatrio No possvel controlar o nmero ou a estrutura
dos elementos Exemplo: a seguinte declarao em DTD:
permite o seguinte contedoA frase que ele leu n o foi a que elaouviu.
23
Elementos Vazios e Any
Elementos que no podem conter nada devem ser declarados como EMPTY
Elementos EMPTY podem conter atributos
A declarao acima permite elementos como
ANY: para elementos que podem conterqualquer coisa
24
Sintaxe
atributo 1 tipo valor_ default >
atributo 2 tipo valor_default >...
ou
atributo 1 tipo valor_ defaultatributo 2 tipo valor_ defaultatributo 3 tipo valor_defaultatributo 4 tipo valor_default
... >
25
Exemplos
numero CDATA #FIXED "12/32 - 1"
para (REC|CGH|GRU|SDU) #REQUIRED
transportador (RG | JH) "RG" >
26
Tipos de dados
CDATANMTOKENNMTOKENS
SeleoID
IDREFIDREFSENTITYENTITIESNOTATION
27
CDATA e NMTOKEN
CDATA (character data) representa qualquer texto arbitrrio pode conter espaos, pontuao, etc.
NMTOKEN (name token). semelhante a um nome de elemento ou atributo caracteres alfanumricos no pode conter espaos
NMTOKENS representa um ou mais NMTOKEN separados por espaos.
28
Seleo
Uma Seleo uma lista de NMTOKENS de onde pode-se escolher o valor do atributo. As escolhas so separadas por |:
Elementos no podem conter espaos ou outros caracteres no-alfanumricos Tipo NMTOKEN!
29
ID
Atributos do tipo ID tem que conter um nome (e noNMTOKEN) que seja unvoco no documento. Nome tem mesmas regras que identificador XML
(caracteres alfanumrico, no comea com nmero, etc.) No se pode usar um nmero como ID. A soluo colocar um prefixo antes do nmero que seja
ou uma letra ou um sublinhado. Elementos s podem ter um tipo ID. No pode haver outro elemento na mesma pgina com
mesmo ID Exemplos
30
IDREF
IDREF referncia para um ID. Exemplo:
Aplicao (codigo e numero so IDs)
... ...
...
...
31
IDREFS
Lista de elementos IDREF. Exemplo:
Aplicao (codigo e numero so IDs)
... ... ...
32
Valores default
#REQUIRED: fora o autor do documento a definir um valor explcito ao atributo. #IMPLIED: o atributo opcional. #FIXED: o atributo tem um valor fixo, constante Valor no pode ser mudado Autor no precisa definir atributo e, se o fizer, no pode
mudar o valor. Exemplo:
Valor inicial, entre aspas Autor no precisa definir atributo, mas pode mud-lo
33
e tipo NOTATION
Associa URI a um nome Usado frequentemente para associar valores CDATA a
NMTOKEN (mesmo onde no h URIs) Exemplos
Tipo NOTATION de til em situaes onde no se pode usar CDATA
store NOTATION(amazon | barnes) #REQUIRED>
Assim pode-se limitar melhor valores dos atributos
34
Vrios tipos de Constantes usadas nos DTDs e documentos XML
De parmetro (%nome; - s no DTD) internas - incluem texto definido localmente externas - incluem sub-DTDs de arquivos externos
Gerais (&nome; - s no XML) internas (texto local - sempre processadas) caracter - globais - < & definidas pelo usurio
externas (carregam arquivos externos) processadas - incluem texto no XML no-processadas - incluem formatos binrios (como imagens)
35
Entidades gerais internas
Exemplos:
Uso: &nome;no documento XML Visite a &empresa; ainda hoje!.
©right;
36
Entidades gerais externas
Carregam texto de arquivos externos
Exemplo
Uso
&menu_sup;
Contedo de menu.xml:
Texto
Resultado
Texto
37
Entidades externas no processadas
Usadas para carregar dados que no podem ser processados (que no so texto) atravs de atributos
Depende de uma declarao NOTATION Neste caso tpico usada para informar tipo de dados
Exemplo de uso no DTD
Atributos podem declarar receber tipo ENTITY
Uso no XML:
38
Entidades de parmetro
Variveis para uso dentro do DTD Exemplos. Em vez de repetir ...
Declare as entidades
E use as entidades no DTD
39
Entidades de parmetro externas
Carregam trechos de DTD de outros arquivos
Exemplo
preciso chamar a entidade dentro do DTD. Uso
%tabela;
...
Contedo de voos.dtd:
Resultado
40
Condicionais
Servem para construir DTDs configurveis Ignora o contedo
]]>
Declara que o contedo deve ser interpretado
]]>
Parecem inteis, no?
41
Utilidade das condicionais
Um DTD com declaraes "desligadas"
]]>
]]>
Na utilizao, pode-se ligar as declaraes:
...
42
Namespaces e XML Schema
DTDs validam "documentos", no "linguagens" DTDs supem que documentos contm apenas uma
linguagem DTDs no suportam namespaces. Para declarar um
elemento preciso usar o nome qualificado:
Para validar namespaces em vez de documentos, use XML Schema Cada namespace pode ser associado a um esquema
diferente (um documento pode ter vrios esquemas) DTDs ainda podem ser usados, para declarar, por
exemplo, entidades.
43
Validao: alm do DTD
DTD vantagem: simples desvantagens: (1) no usa sintaxe XML; (2) limitado.
XML Schema vantagem: (1) XML; (2) permite validao mais
detalhada. desvantagem: muito mais complicado que DTD
XML Schema ainda no resolve todos os problemas H outras alternativas: Trax, Relax, Schematron Em certos casos preciso realizar validao adicional
usando alguma linguagem (Python, Java)