Documento XML Bem Formado - Introdução ao XML: Parte IV
Já sabemos como escrever um documento XML. Agora falata saber como criar um documento XML bem formado, ou seja, um documento que obedece algumas regras de formação.
Antes de apresentar algumas regras básicas, precisamos saber o que é exatamente um documento XML bem formado. Os documentos XML bem formados seguem as regras de sintaxe do XML, mas não possuem um DTD ou Schema, ou seja, não possuem um documento de validação (assunto do próximo post, aguardem!).
Algumas regras serão listadas agora.
O documento XML deve começar com uma declaração XML
A pesar da declaração não ser obrigatória, o W3C recomenda que você deve ter uma declaração no documento, 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).
Exemplo de XML inválido:
O Elemento Raiz deve conter todos os outros elementos
Um documento XML deve conter apenas um único elemento raiz. (root), que contém todo o texto e outros elementos do documento.
Exemplo de XML bem formado:
O XML abaixo não contém apenas um único elemento raiz, portanto, não é um documento bem formado:
O documento XML deve ter pelo menos 1 elemento
Para ser um documento válido, o XML deve conter pelo menos 1 elemento. O primeiro elemento deve ser o elemento raiz.
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. A tag final é indicada por uma barra “/”, antes do nome da tag.
O XML abaixo não é bem formado porque o elemento <frase> não possui a tag final (</frase>).
Se um elemento não possui informação (nó de texto), é chamado de elemento vazio. 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>.
O XML abaixo mostra um exemplo que não é bem formado:
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. Simplificando: os elementos, delimitados pelas tags inicial e final, 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:
- Atributos devem ser valorados
- Os valores devem estar entre aspas
O XML abaixo é um exemplo de XML mal formado:
Você pode usar aspas simples (' ') ou aspas duplas (“ ”).
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.
A pesar de terem a mesma grafia, os atributos abaixo são diferentes (lembre-se que o XML é case-sensitive). Mesmo assim, não é uma boa prática.
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. Por este motivo, utilize as entidades pré-definidas.
Se por algum motivo o valor de um atributo ou elemento utilizar algum dos caracteres < > “ ‘ e &, utilize as entidades pré-definidas, pois os processadores dão importância a esses caracteres.
NAMESPACES
O XML é muito poderoso porque dá muita flexibilidade. Você e outras milhares de pessoas podem criar suas próprias tags para descrever uma informação. Com o passar do tempo, os autores do XML perceberam que os primeiros criadores do XML não tinham antecipado: conflito entre tags.
Por exemplo: em uma empresa de TI,o departamento de recursos humanos utiliza um XMLque contém as informações de um funcionário:
Agora, suponha que o chefe dessa empresa também tenha um controle sobre os funcionários, e, além dos dados de cada empregado, ele também adiciona um comentário (<comentario>) sobre a conduta de cada um. Se ele usar o mesmo XML do exemplo acima, haverá um conflito de tags.
O recurso utilizado para resolver esse conflito chama-se namespace. Os namespaces fornecem uma maneira para garantir que um conjunto de tags não irá conflitar com outro conjunto. Basta definir um prefixo para as tags e seus atributos.
Então vamos recriar o XML do exemplo para que não exista mais conflitos.
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. Após definir o namespace rh, deve-se colocar o “rh:” como prefixo de todas as tags e respectivos atributos.
Agora que já está claro que as tags pertencem ao XML utilizado pelo RH, o chefe pode adicionar o seu próprio namespace ao documento XML (cf). Após a adição do próprio namespace, é só adicionar as tags que deseja.
O resultado final é o XML abaixo:
Também é possível definir um namespace padrão (default). Quando isso acontecer, os elementos e atributos que não possuem prefixo pertencem ao namespace padrão.
Para o caso do XML do RH e do chefe, 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. Assim, todos os elementos do namespace padrão não precisaria de prefixo, apenas o elemento do chefe <cf:comentario>. O XML resultante seria o XML acima, acrescentanto as linhas verdes destacadas no XML com 2 namespaces.
Resumindo:
- xmlns="identificador" (namespace default) => associa o identificador com todos os elementos que não possuem prefixo. Ex: <nome>
- xmlns:prefixo="identificador" => associa o identificador com os elementos e atributos cujo nome local é precedido do prefixo. Ex <rh:nome>
Os nomes indentificadores de um namespace parecem com uma URL, mas não são (algumas vezes pode acontecer da URL conter alguma informação sobre o documento). Você pode definir um namespace como xmlns="loiane” que vai funcionar da mesma maneira. A única coisa é que importante sobre os namespaces é que cada um tem que ser único, por isso que muitas vezes são utilizadas URLs.
Conclusão
Este post abordou algumas regras para criação de documentos XML válidos.
Além das regras citadas no post, existem várias outras. Caso deseje conferir todas as regras definidas pelo W3C, você pode ver a especificação neste link: http://www.w3.org/TR/REC-xml (em inglês).
A especificação completa sobre namespaces pode ser encontrada neste link: http://www.w3.org/TR/REC-xml-names/. Ainda existe debate sobre este assunto (em sua maioria, porque o uso de namespaces pode tornar a criação de DTDs mais difícil), porém, é uma recomendação oficial da W3C.
A W3C possui um validador XML online. Muito bom pra quem quiser testar se o seu XML está bem formado. Link: http://www.w3schools.com/dom/dom_validate.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.
Até a próxima!