Introdução ao XML 22/02/2009 | By Loiane | 19 Comments <Objetivo/> Este post tem como objetivo apresentar as noções básicas de XML, e também é o primeiro de uma série de posts sobre como manipular arquivos XML utilizando a linguagem java. Ao final desta série de posts, disponibilizarei um tutorial em pdf, com todo o conteúdo postado aqui, assim como suas respectivas referências. Afinal, o que é XML? Extensible Markup Language (XML) é linguagem de marcação de dados (meta-markup language) que provê um formato para descrever dados estruturados. Isso facilita declarações mais precisas do conteúdo e resultados mais significativos de busca através de múltiplas plataformas. O XML permite a definição de um número infinito de tags, que são usadas para criar dados estruturados. Estes dados podem ser os dados de uma pessoa, tais como nome, endereço, telefone, nome dos filhos, etc. XML x HTML HTML e XML são primos. Eles derivam da mesma inspiração, o SGML. Ambos identificam elementos em uma página e ambos utilizam sintaxes similares. Se você é familiar com HTML, também o será com o XML. A grande diferença entre HTML e XML é que o HTML descreve a aparência e a ações em uma página na rede enquanto o XML não descreve nem aparência e ações, mas sim o que cada trecho de dados é ou representa ! Em outras palavras, o XML descreve o conteúdo do documento. Estrutura de um XML Existem alguns termos que são usados para descrever partes de um XM: tags, elementos e atributos. Uma tag é o texto que se encontra entre <>. Existem tags que indicam o início (<nome>) e tags que indicam o fim (</nome>). Um elemento é a tag de início, a tag de fim e tudo o que está entre estas tags. No exemplo da figura abaixo, o elemento <telefone> possui os elementos filhos <ddd> e <numero>. Um atributo é o par nome-valor que se encontra dentro da tag de início de um elemento. No exemplo da figura abaixo, tipo é um atributo do elemento <telefone>. Todo documento XML deve contrar apenas um único elemento. Este único elemento é chamado de elemento raiz, que contém todos os valores e/ou outros elementos. Estrutura de uma árvore XML Geralmente, uma árvore XML possui um nó raiz especial (/) acima do elemento raiz. A figura abaixo representa a árvore XML do documento XML da figura acima. Aplicações do XML Aqui está uma lista completa de aplicações para o XML. Conclusão Por XML deve-se entender meramente uma notação de texto hierarquicamente estruturado. A partir desta breve introdução, você está apto a criar e configurar arquivos XML. Até a próxima! XML: como posso usar, vantagens e desvantagens – Introdução ao XML: Parte II estruturar os dados da forma que achar melhor. o que torna os teste unitários mais efetivos. assim como também outros formatos. ou seja. os custos ficam muito mais elevados. vamos ao próximo passo: como é que posso usar o XML. sem precisar se preocupar com tipo de dado. e a construção de aplicações bem mais fácil. através da criação ilimitada de tags. Por que devo usar XML? Os tópicos abaixo exemplificam algumas razões: • É recomendado pelo W3C (World Wide Web Consortium). Vamos ver então alguns pontos negativos: • A sintaxe do XML é redundante ou torna-se grande em relação a representações de dados semelhantes. • Mensagens e tranferência de dados: XML também é extremamente usado para juntar ou encapsular informação para ser trocada entre diferentes sistemas computacionais que seriam incapazes de se comunicar. • Simplicidade e Legibilidade. pode ser usado para armazenamento de informação em qualquer plataforma. armazenamento e estruturação) significa que podemos utilizar o XML para publicá-lo na Web. como os arquivos properties ou . • Publicação: combinando os últimos três tópicos (identificação. • Concentração na estrutura da informação. e o melhor: free. afetando também transmissão e processamento. permitindo que praticamente qualquer informação escrita em língua humana possa ser transmitida. Para que devo usar XML? O propósito principal do XML é a facilidade de compartilhamento de informações através da Internet. o XML pode ser substituído por documentos com formatos mais simples. utilizando as folhas e estilos apropriadas para cada um dos casos. • A redundância pode afetar a eficiência quando utiliza-se o XML para armazenamento. Isto torna muito mais fácil fazer a expansão ou atualização de um sistema operacional ou de uma aplicação sem perder informações. • Armazenamento de informação: XML é portável e não é proprietário. • Permite validação. Resumindo o que foi dito neste dois pontos: em muitas situações. Não poderia ser diferente com o XML. • É padrão aberto. você não precisa pagar nada para usar. • Possui suporte a Unicode.26/02/2009 | By Loiane | 7 Comments Agora que você já sabe o que é um XML e como ele se parece (que pode ser visto aqui). seja esta longa ou com complexos tipos de dados. suas vantagens e desvantagens. como PDF. Mas o XML não serve apenas para web. e não na sua aparência. • Existem várias ferramentas e editores bons no mercado. • Web Services: o XML é usado para gestão da informação e transmissão. pode-se incluir: • Identificação da informação: você pode definir suas próprias tags. • Simplificação da mudança de plataforma: os dados de um XML são armazenados no formato texto. Dentre as várias aplicações. • Separação do conteúdo da formatação. tanto para humanos quanto para computadores. por ter um padrão internacional. audio. Quando não devo usar XML? Tudo tem um lado positivo e um lado negativo. • Possibilidade de criar sua própria sintaxe de dados. etc. • Estruturar informação: XML pode ser usado para identificar qualquer tipo (hierárquico) de estrutura. A quantidade de informação real (somente dos dados) que está sendo fornecida é bem menor comparada à quantidade de informações “extras” (tags) contidos no arquivo. pode ser necessário utilizar algum outro padrão. Poderíamos criar um XML como o da figura abaixo para transmitir essas informações: Suponha ainda que o XML contenha milhares de itens. Algumas vezes pode ser mais vantajoso. são muito simples. A grande quantidade de informação repetida pode prejudicar a velocidade de transferência real da informação (se estiver em formato XML). Como criar um documento XML – Introdução ao XML: Parte III 02/03/2009 | By Loiane | 15 Comments . e cada item possui um indentificador. e consequentemente. As informações do XML da figura acima poderiam simplesmente ser armazenadas em um arquivo txt simples. em outras. Observe também que as informações que serão transmitidas pelo arquivo não possuem quase nenhuma complexidade. Por exemplo: suponha que exista a necessidade de se transmitir o valor de determinados items.texto. ou seja. como o exemplo da figura abaixo: Repare que o tamanho do arquivo a ser transmitido ficou bem menor (quantidade de informações – caracteres. Outro fato a se observar é que não há a real necesssidade da informação ser representada de forma hierárquica. É importante analisar o objetivo do uso do XML além do tipo de aplicação e/ou sistema que vai gerar e/ou fazer o consumo do arquivo (se este for usado para armazenamento de informação). O próximo post da série XML será sobre como criar documentos bem formados. o tamanho do arquivo em Kbytes). Conclusão O uso do XML deve ser analisado antes de ser implementado. Caso a declaração exista. Os comentários são ignorados por um parser. O padrão é UTF-8. Este atributo é obrigatório se você usar a declaração XML. um XML também pode conter outros elementos. Use “yes” se o documento não faz referência a documentos externos ou entidades. A única restrição é que você não pode usar <?xml?> ou <?XML?> (que também é reservado). Segue a listagem das partes de um XML: • Declaração XML • Prólogo • Instruções de processamento • Elementos e atributos • Comentários • Entidades • Seções CDATA Declarações do XML A maiora dos documentos XML começam com uma declaração XML que fornece informações básicas sobre o documento para o parser. procura por instruções que comecem com cocoon-process. Comentários Você pode incluir comentários em um documento XML para incluir notas explicatórias e/ou descritivas. que pode ser 1. É recomendado que um XML comece com uma declaração. Use “no” caso contrário. Se utilizar <?XML?> terá um erro de validação. assim como também são ignorados por um compilador. os XMLs apresentados como exemplos tinham uma estrutura parecida com essa: Olá! O XML acima possui apenas uma declaração e os elementos que compõem a árvore XML. • Standalone – os valores possíveis são “yes” ou “no”. Até agora. Uma instrução de processamento comença com “<?” e termina com “?>“.0 ou 1. um framework da Apache que é focado em publicação XML. • Enconding – é a linguagem de codificação do documento. a instrução de processamento é para o Cocoon. Este atributo é opcional.O objetivo deste post é apresentar os elementos/partes de um documento XML. Este atributo é opcional. exceto nas tags (“dentro” das tags) e antes da declaração XML. Existem três atributos que podem ser usados na declaração: • Version – é a versão do XML. deve ser a primeira coisa do documento. Quando o Cocoon está processando um XML. No exemplo abaixo.1. mas não é obrigatório. Eis um exemplo de declaração xml: A declaração XML utiliza o elemento <?xml?>. É possível incluir um comentário em qualquer lugar do XML. alguém outra pessoa abcdefghijk Instruções de Processamento O XML permite que você utilize instruções especiais para passar informação para os programas que possam ler o documento XML. então processa o . Porém. e declarações de tipo de documento (DTD). Prólogo O prólogo aparece no início de um documetno XML. mensagem Entidades As entidades são constantes associadas a um valor de texto. comentários (que descreve o documento). No XML. suponha que você queria utilizar a fórmula “x < y”. O XML abaixo exemplifica um prólogo contendo uma declaração XML. O XML possui alguns caracteres especiais. uma instrução de processamento e um DTD (no elemento <!DOCTYPE>). como abaixo: ã CDATA A seção CDATA serve para prevenir o processamento de uma porção de conteúdo. instruções de processamento. O atributo type=”sql” indica que o documento XML contém uma instrução SQL. que corresponde a < • >. O que está confundindo a leitura é o carácter “<”. que podem até gerar conflito com o conteúdo do documento. O XML escrito corretamente com a entidade fica assim: x < y A listagem abaixo contém as entidades pré-definidas: • <. se o texto “XML é legal” for aparecer em várias partes do documento podemos criar uma entidade assim: Após a criação desta entidade. que corresponde a ‘ Alguns documentos XML possuem caracteres não usuais. Exemplo: Este é o conteúdo do XML de exemplo Maria 99999999 ]]> . Se quisermos inserir o símbolo Π (pi). especialmente os documentos que possuem conteúdo científico ou matemático. e contém informações sobre o restante do documento. basta substituir por &legal. Por exemplo. já que as tags são identificadas por este também. Para evitar essa confusão. Um prólogo pode conter uma declaração XML.XML de acordo com esta instrução. que corresponde a “ • &apos. que corresponde a > • &. Por exemplo. Tudo o que está nessa seção não será processado pelo parser. a fórmula ficaria assim: x<y Observe que a leitura não ficou muito legível. podemos utilizar uma entidade pré-definida. comentário. se quiser usar essa frase no documento XML. Também existem algumas entidades pré-definidas. que corresponde a & • ". devemos fazer referência ao seu código no Unicode. São substituídas durante o processamento do documento XML. e dois pontos. Definindo Tags e Atributos No XML. underscore. O caracter “:” é utilizado por prefixos do namespace (um dos assuntos do próximo post). Você pode começar uma tag com uma letra. Exemplo de tags que são permitidas: <_documento> Algumas tags que são ilegais: <2documento> <. vamos falar sobre como criar um documento XML bem formado no próximo post. Agora falata saber como criar um documento XML bem formado.Se visualizarmos o XML acima. precisamos saber o que é exatamente um documento XML bem formado. underscore (_) ou dois pontos (:). um documento que obedece algumas regras de formação.: Embora seja permitido o uso de dois pontos (:). Sabendo agora o que podemos ter em um XML. teremos: Note que as tags <contato>. O assunto de DTD vai ser abordado em um post futuro. você é quem define o nome das tags e dos elementos que o documento XML vai ter. existem algumas regras para a formação dos nomes. dígitos. Espaço não é permitido. Antes de apresentar algumas regras básicas. A pesar de você poder escolher o nome que quiser para suas tags. <nome> e <telefone> não foram reconhecidas como tags do documento. não é aconselhável usar. Os próximos caracteres podem ser letras. mas sim como conteúdo da tag <conteudo>. ou seja.documento> < 2009> Os nomes de atributos seguem as mesmas regras que as tags. Conclusão Este post abordou as partes de um XML. A especificação XML é bem específica em relação ao nome das tags. Os documentos XML bem formados seguem as regras . Obs. Documento XML Bem Formado – Introdução ao XML: Parte IV 05/03/2009 | By Loiane | 3 Comments Já sabemos como escrever um documento XML. hífen. A tag final é indicada por uma barra “/”. O XML abaixo mostra um exemplo que não é bem formado: . O elemento vazio é indicado por ter uma barra “/” no final da tag inicil. como exemplificado no elemento <frase/> no XML abaixo: As tags são case-sensitive No XML a tag <b> é diferente da tag <B>. Algumas regras serão listadas agora. Exemplo de XML bem formado: O XML abaixo não contém apenas um único elemento raiz.de sintaxe do XML. o XML deve conter pelo menos 1 elemento. o W3C recomenda que você deve ter uma declaração no documento. O documento XML deve começar com uma declaração XML A pesar da declaração não ser obrigatória. aguardem!). Se um elemento não possui informação (nó de texto). não possuem um documento de validação (assunto do próximo post. O XML abaixo não é bem formado porque o elemento <frase> não possui a tag final (</frase>). que contém todo o texto e outros elementos do documento. é chamado de elemento vazio. O exemplo abaixo mostra o menor XML bem formado possível: Elementos devem ter tags inicial e final Não pode existir um elemento sem a tag final. antes do nome da tag. portanto. e que esta deve ser ser a primeira coisa a aparecer no XML (comentários antes da declaração não são válidos). ou seja. (root). O primeiro elemento deve ser o elemento raiz. mas não possuem um DTD ou Schema. Exemplo de XML inválido: O Elemento Raiz deve conter todos os outros elementos Um documento XML deve conter apenas um único elemento raiz. não é um documento bem formado: O documento XML deve ter pelo menos 1 elemento Para ser um documento válido. Se por algum motivo o valor de um atributo ou elemento utilizar algum dos caracteres < > “ ‘ e &. Mesmo assim. Utilize < e & apenas para iniciar uma tag e entidade Os processadores XML sempre assumem que o carácter < inicia uma tag e que o carácter & inicia uma referência a uma entidade. . utilize as entidades pré-definidas. não é uma boa prática. O exemplo abaixo é um exemplo de documento bem formado: Os atributos devem ser únicos Os atributos não devem aparecer mais de uma vez em uma mesma tag de abertura. pois os processadores dão importância a esses caracteres. A pesar de terem a mesma grafia. os atributos abaixo são diferentes (lembre-se que o XML é case-sensitive). Por este motivo. delimitados pelas tags inicial e final. Atributos devem ser valorados 2. devem estar aninhados. Exemplo de XML mal formado: Exemplo de XML bem formado: Os atributos devem estar entre aspas Existem duas regras para atributos nos documentos XML: 1. Os valores devem estar entre aspas O XML abaixo é um exemplo de XML mal formado: Você pode usar aspas simples (‘ ‘) ou aspas duplas (“ ”).Elementos não podem se sobrepor Se a tag inicial está dentro de um elemento. a tag final também deve estar dentro do mesmo elemento. utilize as entidades pré-definidas. Simplificando: os elementos. suponha que o chefe dessa empresa também tenha um controle sobre os funcionários. Os namespaces fornecem uma maneira para garantir que um conjunto de tags não irá conflitar com outro conjunto. Após definir o namespace rh. O primeiro passo é criar um namespace e prefixo para indicar o conjunto de tags que faz parte do XML utilizado pelo departamento de recursos humanos. é só adicionar as tags que deseja. O resultado final é o XML abaixo: . Você e outras milhares de pessoas podem criar suas próprias tags para descrever uma informação. Basta definir um prefixo para as tags e seus atributos. Se ele usar o mesmo XML do exemplo acima. os autores do XML perceberam que os primeiros criadores do XML não tinham antecipado: conflito entre tags. o departamento de recursos humanos utiliza um XML que contém as informações de um funcionário: Agora. Então vamos recriar o XML do exemplo para que não exista mais conflitos. o chefe pode adicionar o seu próprio namespace ao documento XML (cf).NAMESPACES O XML é muito poderoso porque dá muita flexibilidade. haverá um conflito de tags. e. O recurso utilizado para resolver esse conflito chama-se namespace. Após a adição do próprio namespace. Agora que já está claro que as tags pertencem ao XML utilizado pelo RH. Com o passar do tempo. além dos dados de cada empregado. deve-se colocar o “rh:” como prefixo de todas as tags e respectivos atributos. ele também adiciona um comentário (<comentario>) sobre a conduta de cada um. Por exemplo: em uma empresa de TI. Também é possível definir um namespace padrão (default). Quando isso acontecer. também seria possível definir um namespace padrão para o XML do RH e utilizar um namespace com prefixo para o elemento do chefe. O XML resultante seria o XML acima. apenas o elemento do chefe <cf:comentario>. os elementos e atributos que não possuem prefixo pertencem ao namespace padrão. Para o caso do XML do RH e do chefe. acrescentanto as linhas verdes destacadas no XML com 2 namespaces. Assim. . todos os elementos do namespace padrão não precisaria de prefixo. Muito bom pra quem quiser testar se o seu XML está bem formado. porém. Ex <rh:nome> Os nomes indentificadores de um namespace parecem com uma URL.w3.org/TR/REC-xml (em inglês). Além das regras citadas no post. A única coisa é que importante sobre os namespaces é que cada um tem que ser único. por isso que muitas vezes são utilizadas URLs.w3.Resumindo: • xmlns=”identificador” (namespace default) => associa o identificador com todos os elementos que não possuem prefixo. é uma recomendação oficial da W3C.w3schools. você pode ver a especificação neste link: http://www. A especificação completa sobre namespaces pode ser encontrada neste link: http://www. Ex: <nome> • xmlns:prefixo=”identificador” => associa o identificador com os elementos e atributos cujo nome local é precedido do prefixo. porque o uso de namespaces pode tornar a criação de DTDs mais difícil). Conclusão Este post abordou algumas regras para criação de documentos XML válidos. A W3C possui um validador XML online. mas não são (algumas vezes pode acontecer da URL conter alguma informação sobre o documento).org/TR/REC-xml-names/. Validação de documentos XML – Introdução ao XML – Parte V 13/03/2009 | By Loiane | 3 Comments . Caso deseje conferir todas as regras definidas pelo W3C. existem várias outras. Link:http://www. Você pode definir um namespace comoxmlns=”loiane” que vai funcionar da mesma maneira.asp Até a próxima! O próximo post da série será sobre como criar documentos XML válidos através de DTD e Schema. Ainda existe debate sobre este assunto (em sua maioria.com/dom/dom_validate. Apesar de toda a liberdade. escrito numa sintaxe própria para descrever uma linguagem de XML. você pode construir o XML que desejar. você pode torná-lo público. “Um contato pode ter mais de um endereço?”. Quando você restringe. tais como: “Um contato precisa ter um telefone celular?”. • Seu documento XML deve ter alguns campos obrigatórios.Este post tem como objetivo mostrar o que é e por qual motivos devemos utilizar a validação de documentos XML. • Você solicita um XML a pessoas que não estão familiarizadas com a estrutura do XML. como você vai enviar a mensagem? Utilizando um documento modelo. As aplicações são exigentes em relação ao formato dos dados. um email precisa ter um destinatário. Um modelo de documento responde algumas perguntas. Um modelo é um tipo especial de documento. você garante a validação. O processo de definir formalmente a linguagem de um XML denomina-se modelagem de documento. Mas o que é exatamente modelar um documento XML? Um modelo de documento determina quais documentos XML estão de acordo com a linguagem definida. e essas . pois pode ser difícil desenvolver uma aplicação que entenda inúmeras variações de formatos de dados. se não tiver. Em outras palavras. A figura abaixo ilustra essa situação: Como saber se eu preciso criar um documento que especifica o modelo do meu XML? • Os documentos XML são escritos por pessoas (ou uma aplicação) e são usados como dados para outros aplicativos. Essa “linguagem de XML” também pode ser chamada de tipo de documento. Com essas regras. um XML válido é um documento XML que segue as regras de formação definidas em seu tipo de documento. Como o modelo é um documento. Com esse modelo de documento. já que é você quem define suas próprias tags. ainda falta uma maneira para restringir o vocabulário dos elementos e atributos que configuram um conjunto de documentos. Por exemplo. os posts mostraram como construir um documento XML bem formado. escrever um programar= que vai consumir aquele XML fica muito mais fácil e reduz bastante a possibilidade de erros. você garante que todos os campos obrigatórios estarão presentes no XML. cria uma padrão. ou seja. Até agora. é possível dizer se um documento XML está escrito conforme seu tipo de documento. é possível fazer muitas coisas. O W3C desenvolveu a especificação do XML Schema apenas um pouco depois da especificação original do XML. Um DTD define os elementos que podem aparecer no XML. e se você parar para especificar o documento. Mas se você estiver trabalhando com poucos documentos. Com apenas um documento não válido. pode perder um tempo precioso. Você é quem decide se vai usar um modelo de documento ou não. Tudo depende do ambiente em que o contexto está inserido. Conclusão Um documento XML não válido (sem DTD ou Schema associado) é individualista. e estes não tiverem restrições. A segunda forma é utilizando um XML Schema. você não precisa criar um modelo de documento XML. • Sem regras de gramática: um elemento pode conter qualquer coisa: conteúdo misto. você precisa saber como os elementos e os atributos se comportam: • Vocabulário ilimitado: você pode utilizar qualquer nome para seus elementos.pessoas poderão fazer o download. Existem duas formas de criar esses documentos de definição de conteúdo do XML (linguagem XML): A primeira forma é utilizando um DTD (Document Type Definition). texto. Construindo um DTD – Introdução ao XML – Parte VI 06/04/2009 | By Loiane | 3 Comments . elementos. mas fica muito difícil automatizar os processos sem considerar uma classe de documentos. Quando um DTD ou Schema são definidos. O XML foi projetado para funcionar das duas maneiras. E se eu não quiser usar um documento que especifique o conteúdo do meu XML? Se você decidir não usar um modelo de documento XML. como este elementos devem estar relacionados e outros detalhes básicos da estrutura de um documento XML. Um modelo de documento XML também pode ser utilizado em editores de XML (serve de guia. Um schema pode definir todas as estruturas do documento que você pode colocar em um DTD. Você é quem decide se deve usar a validação. e que podem ser usados para construir o XML). representam um conjunto de documentos XML que poderão existir. ou pode ser vazio. • Sem restrições aos atributos: qualquer elemento pode conter qualquer atributo. O seu conjunto é pequeno. e também pode definir tipos de dados e outras regras mais complicadas do que um DTD. Os DTDs fazem parte da especificação original do XML. pois contém a lista dos elementos apropriados. em qual ordem. Você deve especificar a codificação no XML também (e esta pode ser diferente do DTD). o DTD é um conjunto de regras. Cada declaração especifica um elemento. seus atributos. Você não pode utilizar outros elementos que não estejam definidos neste conjunto. Uma solução é criar um arquivo externo ao XML que contém o DTD. Estrutura de um DTD Como já foi dito acima. entidades e conteúdo. • Declaração de um conjunto de atributos para cada elemento. Um DTD (Document Type Definition) especifica um conjunto de regras que define a estrutura de um documento. . Nesta declaração. tipo (datatype). e em cada XML fazer uma referência ao DTD. Imagine como se fosse a gramática do XML. A figura abaixo exemplifica a estrutura de um DTD: A ordem da declaração dos elementos é importante em duas situações: A primeira. pois você vai precisar atualizar cada XML sempre que o DTD sofrer alterações. Os tópicos abordados são: introduzir a teoria básica do DTD. Ter o DTD no topo do documento XML não tem nenhum problema se apenas um XML utilizar este DTD. valores padrões (se aplicável). Cada declaração de atributo define o nome. Sintaxe de um DTD Um DTD defini um documento XML da seguinte maneira: • Declaração de um conjunto de elementos. também chamadas de declarações. Uma declaração de elemento faz duas coisas: adiciona um novo nome de elemento ao vocabulário da linguagem e documenta qual é o conteúdo desse elemento. Imagine como se fosse o vocabulário do XML. e comportamento (obrigatório ou opcional). Essa informação é importante caso você vá sobrescrever declarações. você pode definir a versão do XML e a codificação (ver introdução XML aqui). não significa que o XML irá ‘importar’ essa configuração. o primeiro elemento declarado toma a precedência e todos os outros são ignorados. se entidades de parâmetro são utilizadas nas declarações. Você vai ter um problema se vários documentos XML utilizarem o mesmo DTD.Este post tem como objetivo mostrar como fazer a validação de um documento XML utilizando DTD. Cada elemento que você for usar no documento XML deve ser declarado no DTD. se houver declarações redundantes (atenção na hora de declarar o mesmo tipo de elemento duas vezes). Declaração dos elementos do XML A primeira e mais importante consideração na linguagem XML é o conjunto de elementos. quantidade e se é opcional ou obrigatório. A definição de conteúdo é um padrão que nos diz quais os elementos ou dados que aquele determinado elemento XML pode conter. O DTD pode aparecer no topo do XML (no prólogo) ou em um documento separado. • Definição do conteúdo para cada elemento. A segunda. Quando você indica a codificação no DTD. precisam ser declaradas antes de serem usadas como referências. O DTD pode ter uma declaração na primeira linha (assim como no XML – se for um documento externo). secao*) | secao+))> . • * -> Significa que o elemento pode aparecer várias vezes. A figura abaixo ilustra a estrutura de uma declaração. mas não outros elementos. e este deve ser seguido por um C. Exemplos: <!ELEMENT artigo (paragrafo+)> <!ELEMENT artigo (titulo. funciona como o operador OU (OR). Exemplo: A ? significa que você pode escolher se vai usar ou não o elemento A. lembra?). Também funciona como operador E (AND). Exemplo: (A|B).Elementos que não contém restrições de conteúdo: neste tipo de declaração. e caso houver alguma. e neste tipo de modelo. Portanto. utiliza-se (#PCDATA). não tendo limite. B seguido de A não é permitido. C significa que você deve escolher entre A ou B. • ? -> Descreve uma sentença opcional. ((paragrafo+. é utilizada a palavrachave ALL. seguida pelo nome do elemento declarado (2).Elementos que podem contem apenas outros elementos: para declarar elementos dentro de um outro elemento. este tipo pode ser interessante temporariamente. Exemplo: (A|B)* significa que a sequência pode ter tamanho zero e pode ter inúmeros elementos A ou B. Exemplo: <!ELEMENT grafico EMPTY> 2. Um elemento XML pode conter cinco tipos diferentes de conteúdo: 1. criam uma gramática para a linguagem. • | -> Descreve uma alternativa. o elemento XML pode conter qualquer outro elemento. tanto A C e B C são permitidos. • (…) -> Agrupa o conteúdo. o conteúdo (3) e o delimitador ‘>’ (fechamento/fim da declaração). Isso significa que os caracteres serão verificados por um parser XML à procura de referências de entidades. Para rápida prototipação de documentos. utiliza-se uma notação especial.Elementos vazios: a maneira mais simples de declarar um elemento vazio é através da palavra-chave EMPTY. O elemento Casa é diferente do elemento CASA ou casa.Juntos (novo elemento + conteúdo). que é composta da String <!ELEMENT (1). então esta entidade será substituída por seu valor correspondente.Elementos que podem conter apenas dados do tipo texto (informação): Para elementos que apenas podem conter informação. você deve escolher entre um dos três elementos.B significa que B deve vir depois de A. Por convenção. Exemplo: (A|B)+ significa que deve haver um número positivo e diferente de zero de As ou Bs. Neste caso. descrita na lista abaixo: • . e também é opcional. Você pode usar a quantidade e parênteses que for preciso. e não limite de quantas vezes este se repete. Apenas uma opção é permitida. um padrão para determinar quais elementos são válidos. subtitulo?. que significa “parsed-character data”. O nome do elemento é case-sensitive (o XML é case-sensitive. Exemplo: <!ELEMENT contem_qualquer_coisa ALL> É claro que um elemento pode conter qualquer conteúdo limitado ao valor declarado no DTD. • + -> Requere que pelo menos uma vez o elemento seja declarado. -> Descreve uma sentença obrigatória de elementos. 4. Exemplo: A. (paragrafo | secao)+)> <!ELEMENT artigo (titulo. nome de elementos são sempre lowercase (letras minúsculas). A sequência ABBBAAA é válida. Exemplo: A|B|C significa que qualquer elemento é aceitável. 3. não há controle da estrutura que um DTD mais rigoroso tem. pois fornece ao atributo a garantia de ser único no documento. A estrutura pode ser conferida na estrutura abaixo: A declaração dos atributos começam com a string (7). descreve o comportamento do atributo: se existe um valor padrão. Declaração: <!ATTLIST circulo raio CDATA “12 cm”> Exemplos: dimensoes=”35x12x9 mm” | expressao=” 5 + 7 = 3 * 4 “ 2.ID (unique identifier) Este tipo de atributo é especial. o parser mostrará um erro.CDATA (character data) Qualquer caracter pode ser usado. Este tipo é usado para fazer referência a relacionamentos.IDREF (identifier reference) Este tipo de atributo é similar ao tipo ID. Exemplo: <!ATTLIST relacionamento cliente ref IDREF #REQUIRED> 5. seguido do nome do elemento. 3. Declaração dos atributos Após declarar os elementos. dá um nome ao atributo. Cada declaração de atributo consiste: no nome do atributo (4). Tipos de atributos: 1.Elementos com conteúdo misto: conteúdo misto é quando um elemento pode conter tanto elementos quanto informação. você pode declarar os atributos. o parser mostrará um erro. Exemplo: <!ATTLIST parte numero NMTOKEN #REQUIRED> Obs. letras e alguns caracteres de pontuação. mas em vez do valor do atributo se referir ao elemento em questão. Para cada elemento. um asterisco ( * ). especifica o tipo do atributo.NMTOKEN (name token) Um name token é uma sequência de caracteres que começam com uma letra e pode conter números. incluindo caracteres de entidades. Segundo. limitados por parênteses e finalmente. Um elemento desse tipo deve ser declarado como no exemplo abaixo: A palavra chave ELEMENT deve vir primeiro. Se não existir nenhum elemento com o ID referenciado.5. separados por uma barra vertical ( | ).: qualquer espaço em branco (whitespace) é removido pelo processador XML. você geralmente declara todos os seus atributos em apenas um lugar. refere-se ao ID de outro elemento. ou se é necessário (obrigatório) dar ao atributo um valor. Dois elementos do XML não podem ter o mesmo valor de um atributo do tipo ID. Exemplo: <!ATTLIST boxdvd refs IDREFS #REQUIRED> .IDREFS (identifier reference list) Uma lista separada por um espaço de valores de IDREF. E terceiro. a lista dos elementos permitidos e #PCDATA. ou uma possível lista de valores que o atributo pode receber. Se não existir nenhum elemento com o ID referenciado. e a descrição do comportamento do atributo (6). e após este. seu repectivo valor (5). A declaração de um atributo faz três coisas: Primeiro. Exemplo: <!ATTLIST nome_id ID #REQUIRED> 4. png”> E assim seria o uso: <bulletlist icon=”bluedot”> 7. os atributos podem conter várias particularidades e possuem bem mais detalhes que a declaração dos elementos. você não precisa fazer todas as declarações de atributos para um elemento num só lugar. o processador XML assume o valor padrão indicado no DTD. o próximo post será um exemplo prático de como construir um DTD. Especificar um valor padrão para o atributo pode ser uma boa ideia se este valor é o mais comum. .Valor padrão (default) Se o usuário não colocar nenhum valor para determinado atributo. O XML permite que você faça várias declarações para um mesmo elemento.ENTITIES (lista de nomes de entidades) O valor do atributo é uma lista de nomes de entidades separados por um espaço. Isso nos dá certa flexibilidade na hora de customizar o DTD. Por isso. Você pode usá-lo após declarar uma entidade no DTD. Não se preocupe. Uma notação pode ser definida para preservar espaços em um elemento que normalmente seriam removidos pelo parser. o atributo não pode ser deixado em branco.Atributo opcional Quando você declara que um atributo pode ser opcional.Lista de valores Enumerados Uma lista de valores enumerados é uma lista com palavras-chave que você define. Esse tipo de atributo é util quando se tem um conjunto pequeno de possibilidades de valores. e na hora da execução é feito um ‘merge’. Se você quer adicionar declarações de atributos para um elemento que já exista no DTD. esse tipo é utilizado para momentos em que você quer que o atributo sempre tenha o mesmo valor. Exemplo: <!ATTLIST cliente genero ( F | M ) #IMPLIED> Um atributo só pode ter um valor: <cliente genero=”F”> 9.NOTATION (lista de notações) O valor de um atributo do tipo notação consiste em uma sequência de name tokens. ou seja. Além dos tipos descritos acima.ENTITY (nome de entidade) Este tipo aceita um nome de entidade como valor. Conclusão Neste post apenas a teoria foi apresentada. separados por barras verticais (|). .Atributo de valor fixo O usuário não pode modificar o valor desse atributo.6. Exemplo: <!ATTLIST album filelist ENTITIES #REQUIRED> 8. você especifica a lista de valores cercada por parênteses. o processador XML não atribui nenhum valor padrão. o atributo fica ausente. Na declaração. você pode criar uma nova declaração. Exemplo: <!ATTLIST bulletlist icon ENTITY #IMPLIED> <!ENTITY bluedot SYSTEM “icons/bluedot. os atributos também podem ter os seguintes comportamentos: .Atributo com valor obrigatório O usuário deve fornecer um valor ao atributo. . Como visto. . quebramos o endereço em rua. Agora precisamos especificar o tipo dos elementos que não possuem outros elementos contidos nestes: . numero. A figura abaixo representa o nosso modelo: Vamos então declarar os elementos desse XML conforme foi visto neste post. Entre essas informações. e o contato em endereço e telefone. O primeiro passo foi feito! Declaramos toda a árvore de elementos.Validação de documentos XML com DTD – Introdução ao XML – Parte VII 13/04/2009 | By Loiane | 2 Comments Agora que já sabemos como construir um DTD. estado e cep. cidade. comercial e celular. bairro. meio e último nome. Suponha que você queira criar um XML que tenha as informações de um cliente. Também quebramos o telefone em residencial. Ainda. vamos construir um. mão na massa! O primeiro passo é definir como vai ser nosso XML. Ainda quebramos o nome do cliente em primeiro. você quer incluir o nome do cliente e os dados para contato. ou seja. complemento. que indica se é um cliente ativo ou inativo (não é mais cliente) e também tem como valor padrão o valor ‘ativo’. uma pessoa pode não ter nome do meio. que é o nosso DTD completo! . afinal. não é necessário indicar o atributo de correspondência em todos. O endereço terá um atributo que indica o tipo do endereço: residencial ou comercial. além da situação. . Observação: se um cliente tiver mais de um endereço. .Não é necessário preencher o campo complemento. um cliente pode possuir um ou mais endereços.O cliente pode não ter um telefone comercial. . O cliente terá um atributo id que será sua identificação única. . Vamos então acrescentar alguns atributos aos elementos.O elemento meio é opcional. um atributo que indica se aquele endereço é o endereço para correspondência. o atributo sempre terá esse valor.Como já foi dito.O cliente pode ter nenhum ou vários números de celular. Acrescentando os atributos ao DTD: Vamos adicionar novas restrições aos elementos agora: . mas como nossa aplicação apenas tratará cliente de São Paulo. O cliente também terá um atributo que indica em qual loja realizou a compra (São Paulo. já temos um DTD básico formado. Vitória).Pronto. Belo Horizonte. apenas no que for afirmativo. E terá também. Fazemos então as alterações e teremos o seguinte DTD. Rio de Janeiro. o XML mais simples que podemos gerar a partir do DTD criado: Ah. No próximo post. Abaixo. lembra que no post passado foi dito que um XML poderia ter um DTD embutido? Eis um exemplo bem simples: Conclusão Vimos neste post como construir um DTD na prática. vamos ver uma alternativa ao DTD.Prontinho! Agora vamos criar um XML que seja compatível com nosso DTD. o XML Schema. . disponivel e ling. especificar o número mínimo e o número máximo de vezes que um elemento pode aparecer no documento. incluindo diretamente no elemento xs:schema do documento XML Schema: . que é bem utilizada para validação de documentos XML. dataNascimento. caracteristica. além de especificar a sintaxe (como no DTD). utilizar vários namespaces. Bem. ‘complex’ (complexo) quando apenas subelementos são aceitos e ‘mixed’ (misto) quando tanto texto quanto subelementos são aceitos. personagem. Vamos considerar a maneira que é mais similar para quem já conhece a linguagem utilizada no DTD. Com o XML Schema você pode. Como a linguagem do DTD é diferente do XML. O XML Schema considera os elementos que tem apenas texto e nenhum atributo como tipo simples. O XML Schema é uma linguagem baseada na linguagem XML. Vamos começar com a declaração dos elementos e atributos que encontramos no XML acima. Os elementos que existem no XML de exemplo são:biblioteca. algumas pessoas têm dificuldade de compreendê-la.Validação de documentos XML com Schema – Introdução ao XML – Parte VIII 17/04/2009 | By Loiane | 11 Comments Vimos no post anterior como criar um DTD. autor. enquanto todos os outros elementos são tipos complexos. falecimento. titulo. e é muito mais poderosa e muito mais precisa que o DTD. vamos considerar o XML abaixo como exemplo para o post: Existem diferentes maneiras de se ecrever um XML Schema. ‘simple’ (simples) quando são aceitos apenas texto. restringir os valores de um elemento. O objetivo deste post é mostrar um overview dessa poderosa linguagem. utilizamos um xs:element (definição). nome. E os atributos são: id. Antes de começarmos a definir o Schema. precisamos entender quais são os tipos de elementos que existem: ‘empty’ (vazio) quando nenhum elemento filho ou texto são esperado. Para definir um elemento. você pode: especificar o tipo de dado de qualquer elemento. livro. e muito mais. isbn. criar tipo de listas. criar tipos de dados simples e complexos. Os outros elementos (biblioteca. é um tipo complexo: Traduzindo o que foi escrito acima: o elementos titulo é um tipo complexo que possui conteúdo simples obtido pela extensão do tipo pré-definido xs:string. Vamos agora definir todos os tipos simples do XML utilizado como exemplo: Vamos agora definir o elemento titulo.O valor usado para referenciar o tipo do elemento (xs:string) possui como prefixo xs. Estes elementos são definidos pela sequência de elementos e atributos que os compõe. Como este possui um atributo. e um atributo lang que já foi declarado no schema. que possui um atributo que podemos considerar como uma data e opcional: . O elemento biblioteca é definido como: A definição acima pode ser lida como: o elemento biblioteca é um tipo complexo composto por uma sequência de 1 ou mais (maxOccurs) elementos livro. Agora vamos declarar o elemento autor. livro. autor e personagem) são tipos complexos com conteúdos de tipos complexos. que é o prefixo associado com o W3C XML Schema. Os outros elementos. DataNascimnento e falecimento). além do atributo id. podem ser definidos da mesma maneira. Os atributos precisam ser definidos pós a sequência. como livro e personagem.Isso significa que o elemento autor é um tipo complexo composto de uma sequência de três elementos (nome. O nosso schema completo pode ser visto abaixo: . pode ocorrer nenhuma vez (minOccurs=”0″). O elemento falecimento é opcional. pode acessar a especificação completa neste link:http://www. . Como o assunto é muito extenso.w3.org/XML/Schema Este foi o último post sobre a introdução sobre XML. se você tiver curiosidade. Os próximos post serão sobre como manipular um arquivo XML com Java e alguns frameworks.Conclusão: Esse foi apenas um overview de como construir um XML Schema.