(Parte 1 de 2)

Página 1 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

Visão Geral de XML

Introdução

O XML (eXtensible Markup Language) surgiu da necessidade de um formato de dados portável. Consiste, basicamente, de um padrão para representar dados em um documento de texto. O XML fornece uma estrutura para representar praticamente qualquer tipo de dados, o que é um dos motivos pelos quais ele tem atraído tanto interesse. Um documento XML consiste em tags (marcas) baseadas em texto, usadas para fornecer a estrutura do documento (semelhante àquelas usadas em HTML), junto com os dados em si. Todos os documentos XML consistem em elementos e declarações e comentários opcionais. Conseguimos manipular documentos XML no JavaScript com o uso do modelo DOM (Document Object Model), que já estudamos. Isto é importante porque o XML é o principal formato de dados que o Ajax utiliza para receber as respostas de suas requisições, sejam elas síncronas ou assíncronas. Caso você tenha interesse em encontrar mais informações sobre o modelo DOM, visite o site do W3C em http://www.w3.org/DOM/ Este documento não pretende ensinar à você tudo sobre XML, mas simplesmente as informações mais importantes e necessárias para o andamento de nossa disciplina.

Conceitos Básicos

XML é uma linguagem usada para descrever e manipular documentos estruturados, em forma de árvore, possuindo sempre um elemento raiz, de onde os outros elementos vão se ramificar. Essa estrutura estabelece como documentos XML vão ser definidos e como vão ser tratados. Em XML, duas relações entre os elementos são importantes: hierarquia e seqüência. A hierarquia estabelece relações pai/filho e ancestral/descendente. A seqüência em que as informações aparecem também é importante. Um documento XML consiste de uma combinação de dados caracteres e tags. As tags podem ser caracteres de início de tag, fim de tag, elementos vazios, referências a entidades, referências a caracteres, comentários, etc. Em outras palavras, tudo o que não é uma tag é um dado textual do documento.

Muitas pessoas confundem os objetivos de XML com HTML. Ambos têm objetivos diferentes Em HTML, existe uma mistura de dados com sua apresentação, ou seja, como esses dados devem ser mostrados no navegador. Já a XML separa o conteúdo da apresentação. Logo, concluímos que XML não é capaz de definir apresentação. Porém, é possível fazer isso usando um recurso interessante chamado de XSL (folha de estilo), que consiste em incluir um determinado processamento desejado em um documento XML. Podemos ainda utilizar CSS para transformar um documento XML, ou seja, mostrar o seu conteúdo. Porém, este documento visa introduzir a tecnologia XML com seus principais conceitos e utilizações, não pretendendo ensinar todos os recursos de XML.

Os navagadores web estão preparados para ler e imprimir documentos XML. Porém, é bom você saber que alguns navegadores tem suporte limitado para tecnologias como XSLT. Você pode utilizar, por exemplo, o editor de documentos XML chamado Microsoft XML Notepad ou o IBM Xeena, que facilitam na elaboração de documentos XML. É claro que até mesmo um editor como Bloco de Notas pode ser utilizado para escrever documentos XML, o que torna o trabalho penoso. Existem ainda os programas chamados de Parsers, que verificam a sintaxe de documentos XML, como por exemplo, IBM XML for Java, Microsoft XML Parser, Apache Xerces.

Sintaxe Básica de XML

Um documento XML possui o seguinte formato, nesta ordem: prólogo, elemento-raiz, miscelânea. Prólogo

Consiste na declaração de que este é um documento XML. Atualmente só aceita “1.0” como valor de versão, definido pelo W3C. Toda declaração XML inicia com os cinco caracteres <?xml. Opcionalmente, o prólogo pode conter outras declarações, a seguir:

Declaração Descrição encoding Especifica o conjunto de caracteres usado no documento. Exemplo: UTF-8, US-ASCII, ISSO-8859-1 (português).

standalone Indica se o documento XML precisa ou não de um DTD externo. Assume os valores yes ou no.

Página 2 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

Elemento-raiz

Um documento XML deve conter somente um elemento-raiz. Veja a sintaxe seguinte:

<filho>

<subfilho>

</subfilho>

Exemplo:

<nome>Fulano de Tal</nome>

<endereco>Rua Teste</endereco>

<cidade>Goiânia</cidade>

</cliente>

Um elemento tem a seguinte forma: <tag_de_inicio atributos>corpo<tag_de_fim>

Veja o exemplo: <disciplina titulo="Desenv.p/Web">Estudo de JSP, Ajax, XML e outros</disciplina>

No XML, ao contrário do HTML, as tags não são predefinidas. Você está livre para inventar as tags que forem apropriadas para os dados que estiver descrevendo no documento. Ao definir uma tag XML, você pode incluir atributos que descrevem melhor a tag. No exemplo acima, o título da disciplina é fornecido como atributo para a tag disciplina. O corpo de um elemento é todo o texto, incluindo todas as tags aninhadas, englobadas pelas tag inicial e final. Um elemento não precisa ter nenhum atributo ou mesmo nenhum corpo.

Regras para criação de nomes de tags:

• Os nomes de tags devem começar com uma letra ou sublinhado. • Os nomes de tags podem conter qualquer número de letras, números, hífens, pontos-finais ou sublinhados.

• Os nomes de tags não podem conter espaços.

Elementos vazios devem conter uma barra (/) de fechamento antes do final da tag. Exemplo: <p>Este é um parágrafo seguido de uma linha em branco</p><br/>

O XML diferencia maiúsculas e minúsculas (case-sensitive) e os atributos devem ser colocados entre aspas ou apóstrofos. Veja a seguir, algumas alternativas para descrever um elemento (os dois últimos elementos abaixo mostram que o início e o fim foram combinados. Isso é usado apenas para otimizar código):

<tag>texto</tag> <tag atributo="texto">texto</tag>

<tag atributo="texto"></tag>

<tag atributo="texto"/>

Deve haver sempre um elemento de nível superior em um documento XML, chamado de elemento-raiz, que deve englobar todos os outros elementos do documento. Veja o seguinte exemplo:

Página 3 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

<cliente_atacadista> <cliente atividade="conserto">

<endereco>Rua Teste</endereco>

<cidade>Goiania</cidade>

</cliente>

</cliente_atacadista>

Declarações

As declarações são usadas para fornecer informações para o analisador de XML. Elas aparecem em duas formas. A primeira é uma instrução de processamento e é colocada entre <?...?>. O exemplo a seguir informa ao analisador que o documento foi escrito usando XML versão 1.0 e a codificação de caracteres UTF-8.

A segunda forma de declaração é uma declaração de tipo de documento XML e é colocada entre <!...>. <!DOCTYPE cliente_atacadista SYSTEM "cliente_atacadista.dtd">

Essas declarações de tipo de documento são usadas para informar o analisador da estrutura correta do documento XML e para validar o código XML. As declarações, se existirem, devem preceder o elemento-raiz. Essa seção é chamada de prólogo.

Comentários

Um documento XML pode conter comentários assim como fazemos em programas e em documentos HTML. Para inserir comentários em um documento XML, faça como em um documento HTML. Exemplo:

<!-- isto é um comentário -->

Caracteres Especiais

Os caracteres da tabela a seguir têm um significado especial no XML e, se forem exigidos no conteúdo de um elemento, eles devem ser substituídos pela forma simbólica. Outros caracteres especiais, como os caracteres não imprimíveis, que podem causar problemas durante o processamento, devem ser substituídos pelas entidades que fornecem seus valores decimais, como por exemplo, A torna-se . Em HTML, substituímos alguns caracteres por uma entidade especial definida no W3C (consulte o site da Web do W3C para encontrar uma lista das entidades de caracteres para o conjunto de caracteres ISO-8859-1. Somente aquelas entidades de caractere definidas no padrão devem ser usadas em XML. Para dados que contém grandes quantidades de caracteres especiais, você pode usar uma seção CDATA, que começa com a string <![CDATA[ e termina com ]]>. Todos os caracteres entre essa seção não são processados pelo analisador e são tratados apenas como uma string de texto.

Caractere Nome do caractere Forma simbólica & E comercial (ampersand) &

< Sinal de menor que < > Sinal de maior que > ' Apóstrofo &após; " Aspas "

Definição de Tipo de Documento (DTD)

Já que o XML é usado para transferir informações entre aplicativos, surge a necessidade de um mecanismo para garantir que um documento XML não apenas esteja sintaticamente, mas também estruturalmente correto. Uma DTD consiste de uma maneira de definir a estrutura de um documento XML afim de garantir um documento XML correto. Os elementos da DTD podem ser incluídos no próprio documento XML ou em um documento externo separado. A seguir, um exemplo de DTD que descreve o código XML de cliente_atacadista.

Página 4 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

<!DOCTYPE cliente_atacadista> <!ELEMENT cliente_atacadista (cliente*)>

<!ELEMENT cliente (endereco, cidade?, uf, produtos*)>

<!ATTLIST cliente atividade CDATA #REQUIRED>

<!ELEMENT endereco (#PCDATA)>

<!ELEMENT cidade (#PCDATA)>

<!ELEMENT uf (#PCDATA)>

O elemento !DOCTYPE deve incluir o nome do elemento-raiz. Se o restante das definições de tipo de documento for armazenado em um arquivo externo, ele terá a seguinte forma:

<!DOCTYPE elemento_raiz SYSTEM "nome_de_arquivo_externo.dtd">

Se as definições estiverem incluídas no próprio documento XML, o elemento !DOCTYPE deverá aparecer no prólogo do documento, antes que os dados do documento comecem. Nesse caso, o elemento !DOCTYPE deverá incluir todos os elementos da DTD. Veja o exemplo seguinte:

<!DOCTYPE cliente_atacadista [ <!ELEMENT cliente_atacadista (cliente*)>

<!ELEMENT cliente (endereco, cidade?, uf, produtos*)>

<!ATTLIST cliente atividade CDATA #REQUIRED>

<!ELEMENT endereco (#PCDATA)>

<!ELEMENT cidade (#PCDATA)>

<!ELEMENT uf (#PCDATA)> ]>

Declarações de Elementos

As declarações de elementos assumem a seguinte forma: <!ELEMENT nome_elemento (conteúdo)> Onde:

nome_elemento = é a tag XML. conteúdo = é um ou mais dos valores mostrados na tabela abaixo.

Tipo de Conteúdo Sintaxe Elemento Contém

Elemento <!ELEMENT tag (sub1)> Somente subelemento

#PCDATA <!ELEMENT tag (#PCDATA)> Somente texto

EMPTY <!ELEMENT tag (EMPTY)> Nada

ANY <!ELEMENT tag (ANY)> Qualquer coisa (texto ou elementos)

Os caracteres da tabela a seguir podem ser usados para combinar vários tipos de conteúdo de elemento, para definir elementos mais complexos.

Caractere Significado , Operador de seqüência, separa uma lista de elementos exigidos

* Zero ou mais (não obrigatório) + Um ou mais (pelo menos um obrigatório) ? O elemento é opcional | Elementos alternativos () Grupo de elementos

Página 5 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

Vamos analisar a declaração para o elemento cliente seguinte: <!ELEMENT cliente (endereco, cidade?, uf, produtos*)>

O elemento cliente consiste, pela ordem, em um item endereço, um item cidade opcional e um item uf opcional e uma lista opcional de elementos produtos.

Atributos

As declarações de atributo assumem a seguinte forma:

<!ATTLIST nome_elemento nome_atributo_1 (tipo) valor_padrão nome_atributo_2 (tipo) valor_padrão>

Um tipo de atributo pode ser qualquer um dos tipos mostrados na tabela abaixo, embora o atributo CDATA seja o mais usado.

Tipo Atributo é um(a) CDATA String de caractere.

NMTOKEN Nome XML válido. NMTOKENS Vários nomes XML.

ID Identificador exclusivo.

IDREF Um elemento encontrado em qualquer parte no documento. O valor de IDREF deve corresponder à ID de outro elemento.

ENTITY Arquivo de dados binário externo (como uma imagem GIF). ENTITIES Vários arquivos binários externos. NOTATION Programa auxiliar.

O item valor_padrão também pode ser usado para especificar que o atributo é #REQUIRED, #FIXED ou #IMPLIED. Os significados desses valores estão na tabela abaixo:

Valor-padrão Significado #REQUIRED O atributo precisa ser fornecido, obrigatoriamente.

#FIXED Na prática, uma declaração de constante. O atributo deve ser configurado com o valor dado, ou o código XML não será válido.

#IMPLIED O atributo é opcional, e o aplicativo que está processando pode usar qualquer valor apropriado, se necessário.

Manipulando XML com JavaScript

No modelo DOM, para a manipulação de documentos XML, utilizamos a classe XMLDocument. Com as propriedades e métodos dessa classe, podemos construir um documento XML manualmente ou manipular um arquivo ou string XML existente.

A manipulação é feita ao inserirmos, alterarmos ou removermos nodos ou propriedades da árvore do documento. A maioria dos navegadores são compatíveis com esse recurso. No entanto, precisamos testar qual é o navegador que está em uso para conseguirmos instanciar o objeto. Por exemplo, no caso do conhecido MS Internet Explorer, essa instância poderia ser feita do seguinte modo:

if (window.ActiveXObject) docXML = new ActiveXObject("Msxml2.DOMDocument.3.0");

Página 6 de 9 E-mail professor: sandrotc@anhanguera.edu.br –Arquivo: dw05 Visao geral de xml.doc

Em uma pesquisa recente na Internet, encontrei alguns scripts que utilizam o nome do objeto ActiveX especificado de forma diferente. Isto se deve ao fato de que existem diferentes versões do MSXML DOM (Microsoft.XmlDom, MSXML2.DOMDocument, MSXML2.DOMDocument.3.0, dentre outros).

Vamos a um exemplo prático de como utilizar a classe XMLDocument com JavaScript e o Modelo DOM. Suponha a existência do arquivo docente.xml a seguir:

<professor>

<nome>Sandro Teixeira Carvalho</nome>

<disciplina>Desenvolvimento para Web</disciplina>

</professor>

<professor>

<nome>José Ricardo</nome>

<disciplina>Programação Orientada a Objetos</disciplina>

</professor>

<professor>

<nome>Márcio Greyck</nome>

<disciplina>Análise de Sistemas</disciplina>

(Parte 1 de 2)

Comentários