Labs SD > Web Services

XML


XML

Definição

A eXtensible Markup Language (XML) (em tradução livre: linguagem de etiquetas extensível) é um formato de representação de dados em texto.

As partes do texto são etiquetadas para lhes atribuir significado específico.

As etiquetas (tags) são representadas da seguinte forma:

<mensagem xmlns="urn:empresa.pt:mensagem" id="74536">
    <!-- isto é um comentário -->
    <de>João</de>
    <para>Carla</para>
    <assunto>Reunião</assunto>
    <texto>Confirmo a reunião dia 6</texto>
</mensagem>

Para além destes exemplos, as principais utilizações actuais da XML são:

 

Documentos bem-formados

Um documento XML diz-se bem-formado quando respeita as seguintes regras:

O significado atribuído pelas etiquetas é livre, o que torna a linguagem extensível.

 

Representação de dados

A linguagem XML pode ser utilizada para representar diferentes tipos de dados. Os dados podem ser simples ou compostos.

Os dados simples representam valores que podem ter vários tipos, incluindo texto, numéricos e datas.
Os dados compostos resultam da combinação de vários dados simples. São normalmente estruturas de dados (registos com vários campos) ou vectores (vários valores semelhantes indexados), em que cada elemento é um dado simples.

Por exemplo, para representar o nome de uma pessoa em XML, as seguintes alternativas são válidas:

<nome>Pedro Miguel Silva</nome>

ou

<nome>
	<primeiro>Pedro</primeiro>
	<meio>Miguel</meio>
	<apelido>Silva</apelido>
</nome>

Na primeira, o nome foi considerado um dado simples. Na segunda, foi considerado um dado composto, que se dividiu em três partes. Qual a melhor opção? Depende do fim a que se destinam os dados.

 

Espaços de nomes

Os espaços de nomes XML (namespaces) são uma forma de qualificar os nomes das etiquetas, para evitar conflitos de nomes.

Por exemplo, o nome de etiqueta 'mensagem' é um nome bastante comum. Tanto pode aparecer nos formatos XML de uma aplicação de uma empresa, em que tem uma dada estrutura:

<mensagem xmlns="urn:empresa.pt:mensagem" id="49532">
    <de>Manuel</de>
    <para>Francisco</para>
    <assunto>Almoço</assunto>
    <texto>Que tal um almoço na sexta?</texto>
</mensagem>

Como nos formatos XML de outra aplicação de outra empresa, em que pode ter outra estrutura:

<mensagem xmlns="urn:outraempresa.pt:sisenc">
    <prioridade>Urgente</prioridade>
    <remetente>Loja</remetente>
    <destinatario>Armazém</destinatario>
    <conteudo>
        <encomenda nr="20031">
            <produto numSerie="282830031" />
            <produto numSerie="243497333" />
        </encomenda>
    </conteudo>
</mensagem>

Neste exemplo, não só a estrutura que é diferente, mas também o próprio significado das etiquetas.

Para evitar confusões no tratamento automático de dados, é necessário qualificar os nomes das etiquetas com um espaço de nomes. A forma de o fazer é através do atributo xmlns, como é mostrado nos exemplos anteriores.

Caso existam vários espaços de nomes em utilização no mesmo documento, cada xmlns deve definir um prefixo, como xmlns:en1="urn:empresa.pt:mensagem" e xmlns:en2="urn:outraempresa.pt:sisenc":

<mensagensJuntas xmlns:en1="urn:empresa.pt:mensagem"
                 xmlns:en2="urn:outraempresa.pt:sisenc">

    <en1:mensagem en1:id="49532">
        <en1:de>Manuel</en1:de>
        <en1:para>Francisco</en1:para>
        <en1:assunto>Almoço</en1:assunto>
        <en1:texto>Que tal um almoço na sexta?</en1:texto>
    </en1:mensagem>

    <en2:mensagem>
        <en2:prioridade>Urgente</en2:prioridade>
        <en2:remetente>Loja</en2:remetente>
        <en2:destinatario>Armazém</en2:destinatario>
        <en2:conteudo>
            <en2:encomenda en2:nr="20031">
                <en2:produto en2:numSerie="282830031" />
                <en2:produto en2:numSerie="243497333" />
            </en2:encomenda>
        </en2:conteudo>
    </en2:mensagem>

</mensagensJuntas>

en1:mensagem é uma abreviatura de {urn:empresa.pt:mensagem}mensagem.
en2:mensagem(que é uma abreviatura de {urn:outraempresa.pt:sisenc}mensagem.

Sendo assim, não há confusão. Uma aplicação usa o elemento en1:mensagem que tem uma definição e a outra aplicação usa o elemento en2:mensagem que tem outra definição.

O espaço de nomes é uma cadeia de caracteres que deve ser única. Por este motivo, tipicamente são utilizados endereços Internet (URLs), como "http://www.ist.utl.pt/" que são pertença de uma dada entidade (neste exemplo, o endereço é pertença do IST, da UTL, de Portugal).

A utilização de uma cadeia de caracteres como "http://www.ist.utl.pt/" serve apenas para garantir que é uma cadeia de caracteres única no mundo, não serve para obter nenhum documento pela rede. Este aspecto causa por vezes alguma confusão, que é compreensível.


© Docentes de Sistemas Distribuídos, Dep. Eng. Informática, Técnico Lisboa