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>