Você está na página 1de 12

XML Introduo e conceitos bsicos

A XML eXtensible Markup Language uma linguagem de marcadores como a HTML e foi desenhada para descrever dados , a sua grande vantagem que ela extensvel , ou seja , voc no esta limitado a um certo nmero de tags , e pode criar as suas prprias tags, assim sendo ela uma linguagem auto definvel . Para descrever os dados a XML usa a DTD Document Type Definition. Antes que voc fique confuso , a XML no 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 sero exibidos, a XML foi criada para descrever dados e ela se preocupa com o que os dados so. 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 so predefinidas e o autor de um documento HTML pode usar somente as tags que esto definidas em HTML padro. J a XML permite que o autor defina as suas prprias tags e a prpria estrutura do seu documento. A utilizao de XML vem crescendo dia a dia , mas no 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 cdigo: <?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 declarao XML e deve sempre ser incluida pois define a verso XML do documento. Neste caso estamos especificando a verso 1.0 da XML. O Internet Explorer vem com um analisador XML que atende o padro 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 obrigatria pois define a XML para o analisador do navegador. Vejamos as caractersticas principais de um documento XML:

Cada tag inicial tem um tag final , ou seja , as tags so usadas sempre em pares. Voc no pode usar: <de> Jefferson Todo documento XML possui um elemento raiz . Os demais elementos devem estar aninhados dentro de um elemento raiz.

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

elemento raiz possui um atributo , a data de criao do documento; da mesma forma os elementos podem possuir atributos aos pares nome/valor, e , o atributo deve sempre vir entre aspas. As tags usadas em XML so case sensitive , ou seja , voc deve escrever uma tag de fechamento da mesma maneira que escreveu uma tag de incio. Assim <para> e </Para> ir ocasionar um erro no documento XML.

Usando atributos em XML

Os atributos em XML so usados para descrever os elementos XML ou para fornecer uma informao adicional sobre os elementos. Em HTML quando usvamos a seguinte linha : <IMG SRC="computer.gif"> tnhamos SRC como um atributo do elemento IMG que fornecia informao 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. No existe uma regra que indique quando voc deve usar um ou outro, o que vale o bom senso. Mas a utilizao 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 trs exemplos de documentos XML que contm a mesma informao: 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> <ms>11</ms> <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 utilizao de atributos so:

Atributos no podem conterm mltiplos valores (os elementos podem) Atributos no so expansveis Atributos no podem descrever estruturas Atributos so de difcil manuteno.

Criando um documento XML vlido


Para que um documento XML seja um arquivo vlido temos que usar o que chamamos de Definio do Tipo do Documento ou , originalmente Document Type Definition DTD. O propsito da DTD definir uma construo de blocos vlidas para um documento XML, e ela define a estrutura do documento usando uma lista de elementos vlidos. 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 informao 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 cdigo: <?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 definies DTD Interpretando o cdigo DTD usado temos: <!DOCTYPE nota [ - Declara um seo 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 declarao informando o nome do arquivo externo onde esto as definies 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 declarao do arquivo DTD 2-) Crie o arquivo com as definies 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 definies DTD comuns.

Exibindo o XML na WEB


Atualmente somente o Internet Explorer suporta o padro XML 1.0 e o DOM . Esses padres so definidos pelo consrcio W3C World Wide Web Consortium. Se voc abrir o nosso primeiro arquivo exemplo (aviso.xml) usando o Internet Explorer ir obter o seguinte:

Nada amigvel , no mesmo ? Ento como exibir os dados de um documento XML aos seus usurios na Web ? Bem , voc pode fazer isto de duas maneiras:

Convertendo XML usando o DOM

Usando as folhas de estilo(XSL) do XML

1-) Exibindo XML usando DOM


O DOM - uma interface de programao 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 tambm uma especificao do consrcio W3C, tem como objetivo fornecer uma interface de programao padro que pode ser usada em diversos ambientes e aplicaes. Vamos exibir o arquivo boletim.xml , cujo cdigo 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 cdigo 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 cdigo do arquivo boletim.asp: - set XMLdoc = Server.CreateObject("Microsoft.XMLDOM") Criamos uma instncia 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 cdigo acima faz o loop percorrendo em todos os ns filhos (aviso.ChildNodes) , e, atravs de outro loop iteramos nos ns filhos "nome" e "notas" exibindo os dados ao usurio. O resultado final do processamento mostrado na figura abaixo:

2- Usando as folhas de estilo XSL


Ns j vimos que as tags usadas em um documento XML podem ser criadas pelo usurio , ento como o Navegador ir interpretar essas tags , j que no existem tags padro em XML ? Para exibir documentos XML ser necessrio 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 transformao em um arquivo reconhecido pelo navegador do usurio. Geralmente este servio feito pela transformao 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 decises. 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 catlogo de CD como documento XML O arquivo catalogo.xsl correspondente tem o seguinte cdigo: <?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 explicao do cdigo 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 tambm um arquivo XML ele deve iniciar com uma declarao 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 contedo do n filho no modelo. Para transformar o arquivo catalogo.xml em um arquivo HTML basta incluir uma referncia 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 transformao no cliente , usamos o cdigo 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 cdigo cria uma instncia da XML usando o Microsoft.XMLDOM - xml.load("catalogo.xml") Carrega o documento XML na memria - var xsl = new ActiveXObject("Microsoft.XMLDOM") Esta linha de cdigo cria uma instncia XML - xsl.load("catalog.xsl") Carrega o documento XSL na memria - document.write(xml.transformNode(xsl)) Transforma o documento XML usando o documento XSL e gera um documento HTML Embora a XML esteja nos primrdios , dia a dia ela cada vez mais usada . Com esta pequena introduo 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. Referncias:

Seo XML do site Macoratti.net

Copyright (c) 2000 - Jos Carlos Macoratti