O presente trabalho procura apresentar, de forma clara e prática, conhecimentos essenciais sobre a linguagem XML (eXtensive Markup Language — Linguagem de Marcação Extensível). Para um perfeito entendimento do que será exposto, presume-se que quem o estiver lendo já conheça HTML.
Assim como a HTML, a XML é derivada da SGML (Standard Generalized Markup Language — Linguagem Padronizada de Marcação Genérica). A SGML é uma metalinguagem através da qual se pode definir outras linguagens de marcação.
A SGML não é nova, nasceu na IBM em meados dos anos 60 e, na época, era designada por GML (Generalized Markup Languagem — Linguagem de Marcação Generalizada). Seu objetivo inicial era o de permitir o compartilhamento de documentos de projetos de grandes dimensões na área governamental e na indústria aeroespacial. Seus criadores foram Charles Goldfarg, Edward Mosher e Raymond Lorie (cujas iniciais dos sobrenomes por acaso coincidem com GML).
A GML foi trabalhada pela IBM por muitos anos, tendo sido reconhecida pela ISO (Intenational Organization for Standardization — Organização Internacional de Padronização), em 1986. A partir de então passou a chamar-se SGML (Standard Generalized Markup Languagem — Linguagem de Marcação Generalizada Padrão), tornando-se a linguagem padrão para muitos tipos de documentos que eram distribuídos no mundo.
No início da década de 90, acreditava-se que a SGML poderia tornar-se a linguagem de marcação padrão da Web, que na época ganhava popularidade. Mas os criadores de páginas web queriam algo mais fácil e a SGML, pelo seu alto grau de complexidade, não teve boa aceitação.
Dentro desse quadro foi concebida a HTML (HiperText Markup Language) que amenizava a complexidade da SGML especificando um pequeno conjunto de tags com características estruturais e semânticas e que adicionava suporte para Hiper Texto. Seu criador Tim Berners-Lee pretendia inicialmente que a linguagem fosse utilizada para promover o tráfego de documentos científicos e técnicos. Depois a linguagem foi adaptada para ser utilizada por não especialistas naqueles tipos de documentos e, mais tarde, ganhou também recursos de multimídia. A HTML ganhou popularidade e é hoje mundialmente reconhecida como a linguagem padrão da Web.
Mas a HTML era eficiente (e ainda é) apenas para exibir informações ao usuário. Quando havia necessidade de se criar aplicações mais avançadas, deixava muito a desejar. Principalmente quando se tratava de aplicações em que era necessária a manipulação de grande volume de dados.
Era preciso que se criasse uma nova linguagem, mais flexível e extensível. Uma linguagem que fosse tão poderosa quanto a SGML (que é uma linguagem que possui recursos suficientes para solucionar qualquer problema de linguagens de marcação). Mas essa nova linguagem deveria ser mais simples de ser manipulada e deveria ter a mesma aceitação da HTML.
Então, para suprir essa carência, o World Wide Web Consortium (W3C) desenvolveu a XML (eXtensive Markup Language — Linguagem de Marcação Extensível), cujo propósito principal é o compartilhamento de informações através da Internet.

Assim como a SGML é uma metalinguagem de marcação, a XML também o é. Em ambas, é o desenvolvedor que cria os elementos, atribuindo a cada uma das tags que os introduzem o nome que julgar apropriado, sem limitação; daí o nome metalinguagem. Metalinguagem é uma linguagem utilizada para descrever outras linguagens.
Várias linguagens são derivadas da SGML, entre elas a HTML e a XML.
Por outro lado, várias linguagens também são derivadas da XML, entre elas a XHTML, sendo que esta veio para tomar o lugar da HTML.
A HTML é uma aplicação da SGML — uma linguagem de marcação.
A XML é também uma aplicação da SGML — uma aplicação da SGML que é um perfil dela, um subconjunto específico. É uma metalinguagem de marcação. Não veio para substituir a HTML porque tem propósito diferente. Na verdade, ambas se complementam.
Já a XHTML é uma aplicação da XML. É uma nova versão da HTML, pois tem exatamente o mesmo propósito.| Meados dos anos 60 |
Nasce na IBM a GML (Generalized Markup Languagem — Linguagem de Marcação Generalizada), que futuramente viria chamar-se SGML. |
| 1986 | A ISO (Intenational Organization for Standardization — Organização Internacional de Padronização) estabelece como padrão internacional a SGML (Standard Generalized Markup Languagem — Linguagem de Marcação Generalizada Padrão), herdeira da GML — norma ISO 8879. |
| 1992 | Surge a HTML. |
| 1993 | A HTML ganha algumas definições de aparência, bem como tabelas, formulários e equações matemáticas, sendo designada como HTML+. |
| 1994 | Surgem a HTML 2.0 e HTML 3.O (uma extensão da HTML+) |
| 1994 | É fundado o World Wide Web Consortium (W3C), cujo objetivo era o de desenvolver tecnologias denominadas Padrões Web. |
| 1996 | O W3C dá início a uma padronização: define o padrão HTML 3.2. |
| 1997 | O W3C define o padrão HTML 4.0, separando a estrutura da apresentação, através das Folhas de Estilo em Cascata (CSS). |
| 1998 | O W3C cria a XML (eXtensive Markup Language — Linguagem de Marcação Extensível). |
| 1999 | O W3C define o padrão HTML 4.1 (poucas modificações na versão 4.0). |
| 2000 | É lançada pelo W3C a XHTML 1.0 — uma versão XML da HTML 4.01. |
XML é o acrônimo de eXtensive Markup Language — Linguagem de Marcação Extensível.
A XML é uma linguagem de marcação (Markup Language) porque seus elementos são introduzidos por marcadores (tags). É uma metalinguagem, podendo ser utilizada, não só para a criação de documentos web, mas também para a criação de outras linguagens de marcação. Haja vista a XHTML que é derivada dela.
A XML 1.0 é uma recomendação do W3C e sua versão atual data de 10/02/1998 — W3C Recommendation. Na introdução desse documento encontram-se listados os objetivos do projeto XML, que abaixo traduzimos:
Como na HTML, os elementos também são introduzidos por marcadores (tags) e podem possuir atributos. As tags são iniciadas pelo símbolo < (menor que) e finalizadas pelo símbolo > (maior que). Mas na HTML são utilizadas tags predefinidas, como <h1>, <p>, etc., e na XML é o autor do documento que "inventa" as tags e o faz de maneira a dar entender o conteúdo que elas encerram. Por exemplo, um documento criado para listar os clientes de uma empresa poderia ser estruturado assim:
<clientes>
<cliente>
<nome> ... </nome>
<endereco> ... </endereco>
</cliente>
...
</clientes>
Note como é fácil entender um documento assim estruturado. Um documento XML é autodescritivo.
Sabemos que a linguagem HTML é voltada tanto para a estruturação de dados quanto para a apresentação visual desses dados em um navegador (browser). Mesmo depois de terem sido criadas condições de separar o conteúdo da formatação através das folhas de estilo (CSS), essa característica da HTML ainda prevalece, já que, com ela a apresentação visual pode ser feita mesmo sem o emprego dessas folhas de estilo. Quando, por exemplo, incluimos num documento HTML o elemento <h1>, o browser sempre saberá como apresentá-lo; dará a ele a seu modo uma formatação.
Na XML, a separação do conteúdo da formatação é plena. Um documento XML por si só não tem uma apresentação visual ( uma página web formatada) porque sua única finalidade é a de transportar dados estruturados. Um documento XML tem de ter obrigatoriamente uma folha de estilos a ele associada para que se possa fazer uma apresentação visual dos dados que ele contém.
Na HTML, sabemos (e o browser também sabe) que o elemento <a> define um link. Mas na XML, como é o autor do documento que cria os elementos (estabelece qualquer nome para uma tag), é impossível para o browser saber qual deles é um link.
Então, é necessário recorrer a outras linguagens para definir links. São elas a XLink (XML Linking Language) e a XPointer (XML Pointer Language).
Na HTML alguns elementos podem ser inseridos com a omissão da tag de fechamento (por exemplo, os elementos <p> e <li>). Há também alguns (poucos) elementos para os quais podemos omitir ambas as tags, de abertura e fechamento (por exemplo, <head> e <body>).
Na XML, ambas as tags são obrigatórias. Portanto, o seguinte formato tem de ser rigorosamente seguido:
<elemento>conteúdo</elemento>
Na HTML elementos vazios (sem conteúdo) são inseridos através de tags que não possuem fechamento, tais como, <hr>, <br>, <img>, etc. Na XML também é assim, mas é adotado um formato especial. O símbolo > (maior que) que aparece no final da tag deve ser substituído por />. Eis o formato:
<elemento/>
É permitido também introduzir um elemento vazio utilizando as tags de abertura e de fechamento, mas obviamente sem colocar nada entre ambas, já que o conteúdo não existe:
<elemento></elemento>
Entretanto, para que fique garantida a interoperabilidade, é aconselhável a utilização do formato especial.
Um documento XML deve possuir um elemento raiz (somente um) que englobe todos os demais elementos. Tudo que um documento XML contém deve estar entre suas tags de abertura e de fechamento.
<elemento_raiz>
...
</elemento_raiz>
Erros de aninhamento podem ser tolerados pela HTML. Por exemplo:
<b><i>texto em negrito e itálico</b></i>
Isso em XML jamais poderia ocorrer. Teríamos de fazer assim:
<b><i>texto em negrito e itálico</i></b>
Na XML os valores dos atributos devem ficar obrigatoriamente entre aspas, diferentemente da HTML onde as aspas são facultativas. Eis um exemplo de como deve ser:
<nota data="17/12/2007">
A sintaxe para escrever comentários na XML é similar à que se usa na HTML:
<!-- Isto é um comentário -->Pode-se utilizar quaisquer caracteres ou referências a caracteres, exceto dois hífens contíguos (--).
Na HTML é possível abrir um documento no qual não tenha sido digitado nada. Num caso desses, o browser apresenta uma página em branco. Um documento XML que tenha sido salvo desse jeito irá gerar uma mensagem de erro. Não pode haver um documento XML sem nenhum elemento.
A XML diferencia letras maiúsculas e minúsculas. Por exemplo, <Mensagem> é diferente de <mensagem>.
Um DOCUMENTO BEM FORMADO é aquele que segue estritamente as regras da sintaxe XML (enunciadas no tópico anterior).
Na HTML existem certas liberdades como deixar de colocar algumas tags de fechamento, colocar o valor dos atributos sem aspas, etc. Existe até a faculdade, em relação a poucos elementos, de omitir-se ambas as tags, a de abertura e a de fechamento. Mesmo nos casos de existência de obrigatoriedade, se houver desobediência ou erro, isso é tolerado, e o browser faz a exibição do documento de alguma maneira. Pode-se dizer que na HTML o desenvolvedor fica um tanto quanto "à vontade".
Quanto a XML, um dos objetivos estabelecidos quando da sua criação foi o de que "deveria ter um mínimo de recursos opcionais; idealmente zero". Isto quer dizer que, dentro das regras, o "obrigatório" tem de prevalecer. Portanto, as regras são mais rígidas.
Todo documento XML tem que obedecer tais regras rigorosamente. Em outras palavras: todo documento XML tem de ser obrigatoriamente BEM FORMADO. O que não é BEM FORMADO não é visto como um documento XML e, quando tentamos abri-lo, o browser apresenta-nos uma mensagem de erro.
Um DOCUMENTO VÁLIDO é aquele que além de BEM FORMADO está de acordo com uma DTD (Document Type Definition — Definição do Tipo de Documento), se houver uma.
Uma DTD contém a definição das marcações que o documento XML terá, ou seja, uma explicação da gramática utilizada para que o documento seja lido. Elementos, atributos e outros componentes utilizados devem estar definidos na DTD, para que o documento possa ser VALIDADO.
Diferentemente da SGML, a XML não exige uma DTD. Assim, um documento XML pode prescindir dela, bastando que seja bem formado. Entretanto, é altamente recomendável a sua inclusão, garantindo dessa forma que os dados estejam adequadamente registrados, colocados na ordem correta e com os valores dos atributos apropriados.
Analisadores XML (parsers) são programas que podemos utilizar para verificar a integridade de um documento XML. Tais programas podem ser de dois tipos:
Existem muitos desses programas disponíveis. Os próprios navegadores (browsers) são capazes de fazer as duas análises. A necessidade de os browsers possuirem essa funcionalidade fica óbvia quando lembramos de que um documento XML, para ser exibido, tem de seguir obrigatoriamente a sintaxe XML e as regras impostas na DTD, se houver uma. Quando não segue, o browser disponibiliza uma mensagem de erro resultante da análise, em vez de exibir o conteúdo do documento.
Os programas projetados especificamente para serem analisadores XML bem como os Editores XML normalmente fazem tanto a análise sem validação, como a análise com validação.Apresentamos desde já um exemplo de um documento XML. Para criá-lo, precisamos apenas de um editor de texto simples, como o Bloco de Notas. Salvamos o arquivo com o nome de cidades.xml e sugerimos que você copie o texto e salve-o da mesma maneira em seu computador, porque, na seqüência de nossa explanação vamos reutilizá-lo, inserindo modificações a cada passo.
Como um documento XML é autodescritivo, basta que leiamos o exemplo para entendermos o seu propósito, qual seja, o de disponibilizar uma lista de cidades com nome, população e área de cada uma. Lembremos de um dos objetivos que nortearam a criação da XML: "documentos XML devem ser legíveis por humanos e razoavelmente claros"
<?xml version="1.0" encoding="ISO-8859-1" ?>
<cidades>
<cidade>
<nome>Sabará</nome>
<populacao>134282</populacao>
<area>304</area>
</cidade>
<cidade>
<nome>Esmeraldas</nome>
<populacao>63936</populacao>
<area>910</area>
</cidade>
</cidades>
Na primeira linha aparece a declaração XML que identifica o documento como um documento XML e, no caso do exemplo, define em seus atributos que a versão XML é a 1.0 (a única hoje existente) e que o conjunto de caracteres (encoding) é o ISO-8859-1.
A declaração XML é uma das Instruções de Processamento (PIs) e fica no prólogo (prolog) do documento. O prólogo é a parte do documento que fica imediatamente acima do elemento raiz e pode ser constituído de Instruções de Processamento (PIs) e Declarações de Tipos de Documento (DTDs), coisas que serão vistas mais adiante.
Em princípio, a declaração XML não é obrigatória, mas não se deve deixar de colocá-la porque, em certas circunstâncias, a obrigatoriedade passa a existir. Neste exemplo mesmo, podemos observar que fizemos constar um nome de cidade que possui um caractere acentuado (Sabará). O browser só pode ler o nome da cidade porque o conjunto de caracteres definido contempla tal caractere. Se a declaração XML não fosse colocada, ou se o conjunto de caracteres fosse outro, o Internet Explorer apresentaria uma mensagem de erro, e outros browsers exibiriam a palavra com a falta um caractere.
Na segunda linha e na última temos as tags <cidades> e </cidades> que definem a abertura e o fechamento do elemento raiz. Já vimos que este elemento é obrigatório, deve ser único e deve englobar todos os demais. Note que atribuímos a ele um nome que dá uma idéia do propósito do documento. É como se estivesse sendo dito: "isto é uma lista de cidades".
Dentro do elemento raiz <cidades> aparece duas vezes o elemento filho <cidade>, que por sua vez também tem filhos, os elementos <nome>, <populacao> e <area>, cujos conteúdos são dados de caracteres. Poderíamos ter o elemento <cidade> com seus elementos filhos aparecendo mais vezes (cem vezes, mil vezes, ...), se quiséssimos listar mais cidades.
Já dissemos que a XML não provê mecanismos de apresentação visual. Mas a apresentação visual a que nos referimos é de uma página web formatada (como a que o internauta quer ver). Uma apresentação assim só é possível associando o documento XML a uma folha de estilos.
No entanto, um documento que ainda não foi associado a uma folha de estilos pode ser exibido pelo browser. Só que, o que se obtém é a exibição do próprio código fonte.
O Internet Explorer faz essa exibição em forma de uma árvore. Estamos mostrando aqui uma imagem da exibição do documento acima exemplificado (cidades.xml).
Cada elemento é considerado um nó e quando possui elementos filhos recebe a sua esquerda um sinal "menos" (-) ou um sinal "mais" (+). O sinal "menos" indica que o nó está expandido (elementos filhos sendo exibidos) e o sinal "mais" indica que o nó está contraído (elementos filhos ocultos).
Um clique no sinal "menos" faz com que o nó se contraia e um clique no sinal "mais" faz com que o nó se expanda.
Quando abrimos um documento XML, além de obtermos sua exibição, estamos também utilizando o analisador XML que o browser possui. Assim, se nosso documento cidades.xml não estiver bem formado, em vez de ser exibido, uma mensagem de erro será apresentada. Sugerimos que se faça a simulação de alguns erros para testar isso.
Vimos a abertura do documento com o Internet Explorer, mas é claro que podemos usar qualquer outro browser. No Mozilla Firefox, a exibição é obtida da mesma forma que no Internet Explorer, ou seja, basta abrir o documento e ele será exibido como uma árvore. No Netscape 6 e no Opera 8, depois de abrir o documento, damos um clique com o botão direito do mouse e selecionamos "Source" ou "View Source".
Para que se possa fazer a apresentação visual de um documento XML (como uma página web formatada), utilizam-se folhas de estilos.
Assim como os documentos XML não trazem em si nenhum mecanismo de apresentação visual porque seu propósito é o de transportar dados; as folhas de estilo, de outro lado, não possuem nenhum dado. Representam tão somente o layout que será usado para a exibição; são independentes da estrutura de dados.
Uma folha de estilos proporciona uma apresentação visual transformando um documento XML em documento HTML e tem a grande vantagem de permitir que o layout da exibição possa ser mudado com alterações somente nela. Outra vantagem é a de que podemos ter várias folhas de estilos, cada uma para uma finalidade diferente. Por exemplo, uma para browsers, outra para PDAs e outra para telefones celulares.
Uma das linguagens de folha de estilos utilizadas com XML é a (Cascading Style Sheets — folhas de estilo em cascata) que já é nossa conhecida porque é a mesma que se usa com HTML. A CSS é ideal para ser utilizada com a HTML, mas é pouco utilizada com a XML porque, para esta, seus recursos são muito escassos quando comparados com os de outras folhas de estilos que possuem implementações avançadas próprias de linguagens de programação como, por exemplo, desvios condicionais, loops, etc.
Outra linguagem que pode ser utilizada é a DSSSL (Document Style Semantics and Specification Language — linguagem de especificação e semântica de estilos de documentos). Esta é uma linguagem poderosa e complexa que foi desenvolvida para suportar documentos SGML e, considerando o fato de a XML ser um subconjunto da liguagem SGML, pode-se utilizá-la com a XML sem problemas.
A linguagem de folha de estilos que merece maior destaque é a XSL (EXtensible Stylesheet Language ou XML Style Sheets). Esta possui uma grande vantagem sobre as demais porque foi desenvolvida especialmente para a XML. É a linguagem padrão de estilos para a XML e é escrita em XML.
A XSL é mais que uma linguagem de folha de estilos. É formada de três partes, por isso podemos falar em linguagens XSL:
A XSLT é a parte mais importante da XSL e é comum falarmos XSL quando estamos trabalhando especificamente com XSLT. É o que faremos quando adiante criarmos exemplos de apresentação visual de documento XML utilizando essa linguagem.
nome, populacao, area {
display: block;
font-family: Arial, Helvetica;
font-size: 10pt;
}
nome {
font-weight: bold;
font-size: 12pt;
color: #009;
}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/css" href="cidades.css"?>
<cidades>
<cidade>
<nome>Sabará</nome>
<populacao>134282</populacao>
<area>304</area>
</cidade>
<cidade>
<nome>Esmeraldas</nome>
<populacao>63936</populacao>
<area>910</area>
</cidade>
</cidades>
Vamos agora criar uma folha de estilos com CSS para o nosso documento XML (cidades.xml) e atribuir ao arquivo que a contém o nome cidades.css. Na ilustração ao lado aparecem ambos os arquivos.
No prólogo do documento XML acrescentamos uma linha (envidenciada com a cor verde) que é a instrução de processamento (PI) que faz referência à folha de estilos. O atributo type indica o tipo de folha de estilos e o atributo href indica a sua localização.
Agora, se abrirmos o arquivo cidades.xml com um browser, teremos a apresentação visual de uma página web formatada. Reproduzimos a seguir a que obtivemos no Internet Explorer.
Antes de comentarmos a folha de estilos do exemplo, queremos esclarecer que não entraremos em detalhes conceituais sobre a CSS, pois presumimos que você já a conheça porque é a linguagem de estilos que se aplica à HTML.
Vamos à nossa folha de estilos.
Fizemos definições apenas para os elementos <nome>, <populacao> e <area> porque são eles que possuem dados de caracteres. Primeiro utilizamos o recurso de agrupamento de seletores para fazer definições comuns aos três. Depois fizemos as definições específicas do elemento <nome>, incluindo a redefinição do tamanho da fonte.
É de fundamental importância estabelecermos se os elementos serão apresentados em blocos (com quebras de linhas), ou em linha (um após o outro na mesma linha). Para isso temos de definir a propriedade display com o valor block ou inline. No caso de nosso exemplo, atribuímos o valor block, pois optamos pela exibição em blocos.
As outras definições foram a fonte e o tamanho da fonte para os três elementos e, para o elemento <nome>, definimos fonte negritada, um tamanho de fonte maior e cor diferenciada.
Fizemos uma formatação simples que pode ser melhorada, mas os recursos da CSS são limitados como já vimos.
Eis alguns exemplos de coisas que poderíamos querer fazer ao promover a exibição: dispor os dados em uma tabela; apresentar as cidades em ordem alfabética de nomes; ou em ordem crescente de população; fazer uma seleção exibindo apenas uma ou algumas cidades com base em alguma característica; etc. Nada disso seria possível com CSS.
Então, o mais recomendável é que se recorra à XSL, a linguagem padrão de estilos da XML.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Lista de Cidades</h2>
<table border="1" cellpadding="5">
<tr bgcolor="#CCCC66">
<th>Cidade</th>
<th>População</th>
<th>km2</th>
</tr>
<xsl:for-each select="cidades/cidade">
<tr>
<td><xsl:value-of select="nome"/></td>
<td><xsl:value-of select="populacao"/></td>
<td><xsl:value-of select="area"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="cidades.xsl"?>
<cidades>
<cidade>
<nome>Sabará</nome>
<populacao>134282</populacao>
<area>304</area>
</cidade>
<cidade>
<nome>Esmeraldas</nome>
<populacao>63936</populacao>
<area>910</area>
</cidade>
</cidades>
Vamos continuar trabalhando com nosso documento XML (cidades.xml) e criar uma folha de estilos com XSL para ele. Atribuímos ao arquivo que contém a folha de estilos o nome cidades.xsl. Na ilustração ao lado aparecem ambos os arquivos.
A instrução de processamento (PI) que faz referência à folha de estilos (evidenciada com a cor verde) foi modificada porque agora nossa folha de estilos é com XSL. Assim atributo type tem como valor "text/xsl" e o atributo href tem como valor "cidades.xsl".
Abrindo o arquivo cidades.xml com o Internet Explorer, podemos obter a apresentação visual a seguir.
Examinemos nossa folha de estilos (cidades.xsl) que é a responsável pela apresentação visual que obtivemos.
Você que conhece HTML percebe que o documento XSL mistura tags HTML com tags XSL (as que possuem o prefixo xsl). É que a XSL formata o documento XML por meio de tags HTML.
Na primeira linha está a declaração XML e, como se vê, é a mesma do arquivo cidades.xml. Um documento XSL é um documento XML e é por isso que pode receber também tal componente. Lembramos da conveniência de inserir a declaração XML, embora não seja obrigatória.
O elemento raiz (elemento que engloba todos os demais elementos) é o <xsl:stylesheet> que declara que o documento é um documento XSL. Possui o atributo xmlns que obedece à seguinte sintaxe: xmlns:prefixo="endereço". Onde o prefixo é xsl e o endereço é http://www.w3.org/1999/XSL/Transform. Trata-se do namespace oficial W3C XSLT. A inclusão desse atributo é que habilita o prefixo xsl que é colocado nos nomes dos elementos XSL, associando-os ao namespace. Quando esse atributo é utilizado é necessário incluir também o atributo version="1.0".
O elemento <xsl:template> é usado para criar modelos (templates) para exibição dos elementos XML (no caso, elementos do arquivo cidades.xml). Essa definição se faz colocando como valor do atributo match uma expressão XPath. O valor "/" é uma expressão XPath que define que a associação se faz com o documento XML inteiro.
Como podemos observar, foram utilizados mais dois elementos XSL: <xsl:for-each> e <xsl:value-of>. O primeiro é um elemento que possui conteúdo e o segundo é um elemento vazio. De resto, o que se vê são elementos HTML.
Os dados são apresentados numa tabela (elemento <table>) precedida do título "Lista de Cidades" (elemento <h2>). Para melhorar a estética, colocamos bordas, espaços dentro das células e uma cor diferente para a linha de cabeçalho. Nada disso é novidade, porque conhecemos HTML.
Também as células que constituem o cabeçalho não são novidade para nós: o primeiro elemento <tr> tem como conteúdo três elementos <th> que, por sua vez, possuem como conteúdo: Cidade, População e Km2. Note que População possui cê cedilha e til. Não fosse a Declaração XML com o atributo encoding com o valor ISO-8859-1, o browser não poderia ler a palavra. O Internet Explorer apresentaria uma mensagem de erro e outros browsers fariam a exibição com a falta de dois caracteres.
A novidade é a maneira de se criar as linhas seguintes da tabela. No caso, são duas linhas, mas poderia ser mais (cem, mil, ...). É agora que entra a atuação dos elementos XSL <xsl:for-each> e <xsl:value-of>. Para facilitar o entendimento, destacamos um fragmento do código.
<xsl:for-each select="cidades/cidade">
<tr>
<td><xsl:value-of select="nome"/></td>
<td><xsl:value-of select="populacao"/></td>
<td><xsl:value-of select="area"/></td>
</tr>
</xsl:for-each>
O elemento <xsl:for-each> estabelece um laço de repetição (loop). Os comandos enfeixados por ele serão executados cada vez que encontrar o elemento XML <cidade>, conforme definição do atributo select. A definição de select se faz com uma expressão XPath que é semelhante à especificação do caminho de arquivos do DOS (path), só que, em vez da barra invertida, usa-se a barra normal (/) para separar os nomes.
O elemento <xsl:value-of>, por sua vez, extrai o conteúdo de um elemento XML, conforme definição do atributo select. A definição de select aqui também é uma expressão XPath. Basta o nome do elemento; não pode ser colocada a sequência de nomes separados por barra porque já se está em cidades/cidade, caminho definido no select de <xsl:for-each>.
Vamos detalhar o funcionamento:
DTDs (Document Type Definitions) fazem parte da especificação oficial da XML 1.0. Na DTD estabelecem-se definições para as marcações de documentos XML. O desenvolvedor, além de seguir as regras da sintaxe XML, segue também as que ele mesmo definiu na DTD. Assim, o documento XML criado por ele, além de ser um documento bem formado, será tambem um documento válido.
Um browser pode analisar e apresentar um documento XML sem uma DTD já que a XML não a exige; basta que o documento esteja bem formado. Mesmo um documento XML que possua uma DTD, se nele for utilizada alguma marcação a mais (não presente na DTD), ainda assm será processado, desde que não se contrarie as regras de sintaxe.
Apesar da não obrigatoriedade, a utilização de uma DTD é sobremaneira vantajosa. Imaginemos um documento XML sendo trabalhado por muitas pessoas ou, ainda mais, recebendo dados externos via rede. Não havendo uma uma padronização das marcações, seria muito difícil manter a integridade desse documento.
Numa DTD definimos os elementos e atributos que poderão figurar no documento XML, a ordem em que poderão aparecer, se devem aparecer uma ou mais vezes, etc. Mas não são só elementos e atributos que são definidos. Na verdade, uma DTD define marcações, isto é, ela pode conter as declarações de marcações (markup declarations) que abaixo relacionamos.
Um documento XML pode possuir uma DTD interna ou pode possuir uma referência a uma DTD externa, ou ambas as coisas. A interna fica inserida no próprio documento XML e a externa num arquivo à parte. Eis uma vantagem no uso da externa: pode-se vincular vários documentos XML a uma única DTD.
Formato da DTD interna:
<!DOCTYPE nome_elemento_raiz [
<!-- Declarações de marcações -->
]>
Formato da referência à DTD externa:
<!DOCTYPE nome_elemento_raiz SYSTEM endereço_arquivo>
Observe-se o seguinte:
Vamos criar uma DTD para o nosso documento XML de exemplo (cidades.xml). Mostraremos como pode ser inserida no próprio documento XML (DTD interna) e como pode ser criada como um documento à parte (DTD externa). As modificações que fizemos no arquivo cidades.xml estão evidenciadas com a cor verde e ao arquivo que contém a DTD externa atribuímos o nome de cidades.dtd.
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl"
href="cidades.xsl"?>
<!DOCTYPE cidades [
<!ELEMENT cidades (cidade+)>
<!ELEMENT cidade (nome,populacao,area)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT populacao (#PCDATA)>
<!ELEMENT area (#PCDATA)>
]>
<cidades>
<cidade>
<nome>Sabará</nome>
<populacao>134282</populacao>
<area>304</area>
</cidade>
<cidade>
<nome>Esmeraldas</nome>
<populacao>63936</populacao>
<area>910</area>
</cidade>
</cidades>
<!ELEMENT cidades (cidade+)> <!ELEMENT cidade (nome,populacao,area)> <!ELEMENT nome (#PCDATA)> <!ELEMENT populacao (#PCDATA)> <!ELEMENT area (#PCDATA)>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl"
href="cidades.xsl"?>
<!DOCTYPE cidades SYSTEM cidades.dtd>
<cidades>
<cidade>
<nome>Sabará</nome>
<populacao>134282</populacao>
<area>304</area>
</cidade>
<cidade>
<nome>Esmeraldas</nome>
<populacao>63936</populacao>
<area>910</area>
</cidade>
</cidades>
Note que a DTD é uma só; ora interna, ora externa. Nela aparecem apenas declaraçoes de tipos de elementos. Vamos examinar cada declaração:
Pois bem, considerando o que foi exposto, se analisarmos visualmente a estrutura no documento XML, iremos constatar que tudo está em conformidade com a DTD. Podemos, então, submetê-lo a um analisador XML e este irá indicar que se trata de um DOCUMENTO VÁLIDO.