XML – Introdução e conceitos básicos


A XML – eXtensible Markup Language – é uma linguagem de marcadores como a HTML e foi desenhada para descrever dados , a sua grande vantagem é que ela é extensível , ou seja , você não esta limitado a um certo número de tags , e pode criar as suas próprias tags, assim sendo ela é uma linguagem auto definível . Para descrever os dados a XML usa a DTD – Document Type Definition.

Antes que você fique confuso , a XML não é uma linguagem que veio para substituir a HTML pois XML foi criada com um objetivo diferente da HTML. Enquanto HTML foi criada para exibir dados e ela se preocupa como os dados serão exibidos, a XML foi criada para descrever dados e ela se preocupa com o que os dados são. HTML esta relacionada com exibir dados enquanto que XML esta relacionada em descrever dados.

As tags usadas em documentos HTML e a estrutura dos documentos HTML são predefinidas e o autor de um documento HTML pode usar somente as tags que estão definidas em HTML padrão. Já a XML permite que o autor defina as suas próprias tags e a própria estrutura do seu documento. A utilização de XML vem crescendo dia a dia , mas não devemos pensar que ela será a substituta da HTML , ela será um complemento a HTML e será usada para descrever e estruturar os dados enquanto HTML será usada para formatar e exibir os mesmos dados.

A sintaxe da XML

Vejamos um exemplo de documento XML (vamos dar a ele o nome de aviso.xml ), e a seguir vamos analisar cada linha de código:

<?xml version="1.0"?>
<aviso>
<para>Janice data="01/04/2000"</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>
</aviso> 
Aviso.xml
<?xml version="1.0"?>

Esta primeira linha do documento é uma declaração XML e deve sempre ser incluida pois define a versão XML do documento. Neste caso estamos especificando a versão 1.0 da XML. O Internet Explorer vem com um analisador XML que atende o padrão 1.0.

<aviso>

Esta linha define o primeiro elemento do documento – o elemento raiz.(nó raiz)

<para>Janice data="01/04/2000"</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>

Estas quatro linhas definem 4 elementos filhos da raiz ( para, de, cabecalho e corpo)

</aviso>

A última linha define o fim do elemento raiz.

Você deve ter estranhado as tags usadas no documento , pois é , elas foram criadas pelo autor; somente a primeira linha é obrigatória pois define a XML para o analisador do navegador.

Vejamos as características principais de um documento XML:

<raiz>
 <filho1>
    <filho2>
    </filho2>
  </filho1>
</raiz>

Usando atributos em XML

Os atributos em XML são usados para descrever os elementos XML ou para fornecer uma informação adicional sobre os elementos. Em HTML quando usávamos a seguinte linha :

<IMG SRC="computer.gif"> tínhamos SRC como um atributo do elemento IMG que fornecia informação adicional sobre o elemento. Vejamos o exemplo a seguir em XML:

Usando um atributo para o sexo: 
<pessoa sexo="feminino">
  <nome>Ana</nome>
  <sobrenome>Rachel</sobrenome>
</pessoa>

Usando um elemento para o Sexo:
<pessoa>
  <sexo>feminino</sexo>
  <nome>Ana</nome>
  <sobrenome>Rachel</sobrenome>
</pessoa>

No primeiro exemplo sexo é um atributo ; no último exemplo sexo é um elemento. Não existe uma regra que indique quando você deve usar um ou outro, o que vale é o bom senso. Mas a utilização de atributos deve ser evitada se você pode descrever seus dados com elementos.

Vejamos outro exemplo para mostrar como os elementos podem ser mais efetivos que os atributos. Temos três exemplos de documentos XML que contém a mesma informação: No primeiro usamos um atributo para a data, no segundo usamos um elemento para a data, e no terceiro usamos um elemento expandido para data:

<?xml version="1.0"?>
<aviso date="12/11/99">
<para>Janice</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>
</aviso> 

<?xml version="1.0"?>
<aviso>
<data>12/11/99</data>
<para>Janice</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>
</aviso> 

<?xml version="1.0"?>
<aviso>
<data>
  <dia>12</dia>
  <mês>11</mês>
  <ano>99</ano>
</data>
<para>Janice</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>
</aviso> 

As principais desvantagens na utilização de atributos são:

Criando um documento XML válido

Para que um documento XML seja um arquivo válido temos que usar o que chamamos de – Definição do Tipo do Documento – ou , originalmente – Document Type Definition – DTD.

O propósito da DTD é definir uma construção de blocos válidas para um documento XML, e ela define a estrutura do documento usando uma lista de elementos válidos. A DTD pode ser declarada dentro de um documento XML ou num arquivo á parte.

O DTD permite descrever cada marca e fornecer regras para interpretar cada informação usada em um arquivo XML. Quando usada em um arquivo XML a DTD aparece entre colchetes [ e termina com um colchete , seguido de um sinal de maior (]>). Usando DTD em nosso arquivo aviso.xml temos o seguinte código:

<?xml version="1.0"?>

<!DOCTYPE note [

<!ELEMENT aviso (para,de,cabecalho,corpo)>

<!ELEMENT para (#PCDATA)>

<!ELEMENT de (#PCDATA)>

<!ELEMENT cabecalho (#PCDATA)>

<!ELEMENT corpo (#PCDATA)>

]>

<aviso>
<para>Janice data="01/04/2000"</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>
<corpo>Amanha voce tem prova de matematica</corpo>
</aviso>

Arquivo aviso.xml com definições DTD

Interpretando o código DTD usado temos:

<!DOCTYPE nota [ - Declara um seção do documento com um DTD com o nome de nota

-!ELEMENT aviso – define o elemento "aviso" como tendo 4 elementos (para, de, cabecalho e corpo)

-!ELEMENT para - define o elemento "para" como sendo do tipo "CDATA"

-!ELEMENT de - define o elemento "de" como sendo do tipo "CDATA"

-!ELEMENT cabecalho - define o elemento "cabecalho" como sendo do tipo "CDATA"

-!ELEMENT corpo - define o elemento "corpo" como sendo do tipo "CDATA"

Obs: Um ELEMENT define a forma e os termos de uma marca XML usada.

Para usar a DTD em um arquivo externo basta fazer o seguinte:

1-Insira uma declaração informando o nome do arquivo externo onde estão as definições DTD

<?xml version="1.0"?>

<!DOCTYPE note SYSTEM "nota.dtd">

<aviso>
<para>Janice data="01/04/2000"</para>
<de>Jefferson</de>
<cabecalho>Lembre-se</cabecalho>

<corpo>Amanha

Arquivo aviso.xml com declaração do arquivo DTD

2-) Crie o arquivo com as definições DTD e salve-o usando o nome declarado no arquivo XML . No nosso caso : nota.dtd

<?xml version="1.0"?>

<!ELEMENT aviso (para,de,cabecalho,corpo)>

<!ELEMENT para (#PCDATA)>

<!ELEMENT de (#PCDATA)>

<!ELEMENT cabecalho (#PCDATA)>

<!ELEMENT corpo (#PCDATA)>

Nota.dtd

A DTD pode ser usada para compartilhar e intercambiar dados usando definições DTD comuns.

Exibindo o XML na WEB

Atualmente somente o Internet Explorer suporta o padrão XML 1.0 e o DOM . Esses padrões são definidos pelo consórcio W3C – World Wide Web Consortium.

Se você abrir o nosso primeiro arquivo exemplo (aviso.xml) usando o Internet Explorer irá obter o seguinte:

Nada amigável , não é mesmo ? Então como exibir os dados de um documento XML aos seus usuários na Web ? Bem , você pode fazer isto de duas maneiras:

1-) Exibindo XML usando DOM

O DOM - é uma interface de programação para documentos HTML e XML e define a maneira como o documento pode ser acessado e manipulado.

Ao usar DOM você pode criar um documento , percorrer sua estrutura e incluir, modificar ou excluir elementos.

A DOM , que também é uma especificação do consórcio W3C, tem como objetivo fornecer uma interface de programação padrão que pode ser usada em diversos ambientes e aplicações.

Vamos exibir o arquivo boletim.xml , cujo código do documento é dado a seguir , usando DOM:

<?xml version="1.0"?>
<boletim data="20/04/2000">
<aluno>
 <nome>JANICE</nome>
 <notas>
   <portugues>7</portugues>
   <matematica>8</matematica>
   <ciencias>6</ciencias>
  </notas>
</aluno>
<aluno>
  <nome>JEFFERSON</nome>
  <notas>
    <portugues>5</portugues>
    <matematica>8</matematica>
    <ciencias>7</ciencias>
  </notas>
</aluno>
</boletim>
Boletim.xml

Para poder exibir os dados do documento boletim.xml iremos usar um arquivo de script ASP onde iremos usar a DOM. O código do arquivo boletim.asp é:

<%language = VBScript%>
<html>
<head>
<title> XML -> DOM </title>
</head>

<% dim XMLdoc, raiz, item , nome, strnotas
set XMLdoc = Server.CreateObject("Microsoft.XMLDOM")
XMLdoc.load(Server.MapPath("boletim.xml"))
set raiz = XMLdoc.DocumentElement

Response.Write "<h2> Exibindo XML com DOM - "
Response.Write raiz.Attributes.GetNamedItem("data").text & "</h1>" & vbcrlf
If raiz.hasChildNodes() then
  For each aviso in raiz.childNodes
    For each item in aviso.ChildNodes
      if "nome"= item.nodeName then
         response.write "<b>" & item.text & "</b>"
      elseif "notas" = item.NodeName then
         strnotas=""
         for i=0 to item.childNodes.length – 1
           strnotas = strnotas & item.childNodes(i).text & " | "
         next
         strnotas = left(strnotas, len(strnotas)-1) & "-" & "<br>" & vbcrlf
         response.write " | " & strnotas
      end if
   next
 next
end if 
%>
</body>
</html>

Vamos analisar o código do arquivo boletim.asp:

- set XMLdoc = Server.CreateObject("Microsoft.XMLDOM")

Criamos uma instância do DOM usando o objeto Microsoft.XMLDOM

XMLdoc.load(Server.MapPath("boletim.xml"))

Carregamos o arquivo boletim.xml

- set raiz = XMLdoc.DocumentElement

Recuperamos o primeiro nó do documento , o nó raiz , que é o elemento "boletim"

- Response.Write raiz.Attributes.GetNamedItem("data").text & "</h1>" & vbcrlf

Recuperamos o atributo "data" usado no elemento "boletim"

If raiz.hasChildNodes() then

Verificamos se há realmente elementos filhos (aluno) no documento

For each aviso in raiz.childNodes
 For each item in aviso.ChildNodes

  if "nome"= item.nodeName then
     response.write "<b>" & item.text & "</b>"
  elseif "notas" = item.NodeName then
     strnotas=""
     for i=0 to item.childNodes.length – 1
       strnotas = strnotas & item.childNodes(i).text & " | "
     next
     strnotas = left(strnotas, len(strnotas)-1) & "-" & "<br>" & vbcrlf
     response.write " | " & strnotas
   end if
 next
next

O código acima faz o loop percorrendo em todos os nós filhos (aviso.ChildNodes) , e, através de outro loop iteramos nos nós filhos "nome" e "notas" exibindo os dados ao usuário.

O resultado final do processamento é mostrado na figura abaixo:

2- Usando as folhas de estilo XSL

Nós já vimos que as tags usadas em um documento XML podem ser criadas pelo usuário , então como o Navegador irá interpretar essas tags , já que não existem tags padrão em XML ? Para exibir documentos XML será necessário um mecanismo que descreva como o documento será exibido. Esse mecanismo chama-se XSL – Extensible Stylesheet Language – e , é usado para transformar XML em HTML.

A XSL pode ser encarada como um linguagem que pode transformar XML em HTML , pode filtrar e ordenar dados em documentos XML e que pode formatar dados XML. Ela pode ser usada para definir em como um arquivo XML será exibido pela transformação em um arquivo reconhecido pelo navegador do usuário. Geralmente este serviço é feito pela transformação de cada elemento XML em um elemento HTML, sendo que a SXL pode incluir novos elementos, remover elementos , rearranjar e ordenar elementos e ainda testar e tomar decisões.

Vamos criar um arquivo XML chamado catalago.xml e a seguir usar a XSL e transformá-lo no arquivo catalogo.xsl:

<?xml version="1.0" encoding="ISO8859-1" ?>
<CATALOGO>
  <CD>
    <TITULO>Minas</TITULO>
    <ARTISTA>Milton Nascimento</ARTISTA>
    <PAIS>BRAZIL</PAIS>
    <COMPANIA>Columbia</COMPANIA>
    <PRECO>15.90</PRECO>
    <ANO>1985</ANO>
  </CD>
</CATALOG>
Catalogo.xml  Um catálogo de CD como documento XML

O arquivo catalogo.xsl correspondente tem o seguinte código:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
  <html>
  <body>
    <table border="2" bgcolor="yellow">
      <tr>
        <th>Titulo</th>
        <th>Artista</th>
      </tr>
      <xsl:for-each select="CATALOGO/CD">
      <tr>
        <td><xsl:value-of select="TITULO"/></td>
        <td><xsl:value-of select="ARTISTA"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
Catalogo.xsl

Vejamos a explicação do código usado no arquivo catalgo.xsl:

xsl:stylesheet Indica que o documento é um stylesheet – folha de estilo. -<xsl:template match="/"> informa que este é um modelo que corresponde a raiz (/) de um documento fonte XML - <?xml version='1.0'?>

Como um arquivo XSL é também um arquivo XML ele deve iniciar com uma declaração XML

-<xsl:for-each select="CATALOGO/CD">

O elemento xsl:for-each localiza elementos no documento XML e repete o modelo para cada elemento. O atributo select descreve o elemento na fonte do documento

-<td><xsl:value-of select="TITULO"/></td>
 <td><xsl:value-of select="ARTISTA"/></td>

Nessas linhas o elemento xsl:value-of seleciona um nó filho na hierarquia e insere o conteúdo do nó filho no modelo.

Para transformar o arquivo catalogo.xml em um arquivo HTML basta incluir uma referência ao arquivo catalogo.xsl criado acima no arquivo catalogo.xml . Veja no exemplo a seguir:

<?xml version="1.0" encoding="ISO8859-1" ?>

<?xml-stylesheet type="text/xsl" href="catalogo.xsl"?>

<CATALOGO>
  <CD>
    <TITULO>Minas</TITULO>
    <ARTISTA>Milton Nascimento</ARTISTA>
    <PAIS>BRAZIL</PAIS>
    <COMPANIA>Columbia</COMPANIA>
    <PRECO>15.90</PRECO>
    <ANO>1985</ANO>
  </CD>
</CATALOG>

Para fazer esta transformação no cliente , usamos o código a seguir:

<html>
<body>
<script language="javascript">
// carrega XML 
var xml = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xml.load("catalogo.xml")

// carrega XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("catalog.xsl")

// Transforma XML em HTML
document.write(xml.transformNode(xsl))
</script>

</body>
</html>
- var xml = new ActiveXObject("Microsoft.XMLDOM")

O primeiro bloco de código cria uma instância da XML usando o Microsoft.XMLDOM

- xml.load("catalogo.xml")

Carrega o documento XML na memória

- var xsl = new ActiveXObject("Microsoft.XMLDOM")

Esta linha de código cria uma instância XML

- xsl.load("catalog.xsl")

Carrega o documento XSL na memória

- document.write(xml.transformNode(xsl))

Transforma o documento XML usando o documento XSL e gera um documento HTML

Embora a XML esteja nos primórdios , dia a dia ela é cada vez mais usada.

Com esta pequena introdução espero que XML e XSL deixem de ser apenas um par de siglas sem sentido para você e passem a orbitar os seus scripts ASP pois pode ter certeza: você ainda vai ouvir falar muito nessa dupla.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti