Você está na página 1de 21

Linguagem XML

Aula 1: Conceitos Gerais e Estrutura Básica

Apresentação
Veremos os conceitos fundamentais sobre dados estruturados e não estruturados, bem como
conceitos gerais da linguagem XML (eXtended Markup Language).

Estudaremos como construir um documento através de sua estrutura básica, bem como os
elementos de um documento XML, com vários exemplos para um entendimento mais profundo.

Objetivo
Distinguir os tipos fundamentais de estruturações de dados para entendimento da
categorização das informações dos documentos escritos em XML;

Desenvolver a estrutura básica de um documento XML com cada um de seus elementos ou


itens;

Elaborar um documento XML por meio das suas regras básicas de sintaxe, aplicando as técnicas
de espaço de nomes.

Estruturas de Dados
Estruturas de dados são formas de se organizar conjuntos de dados similares ou não, a fim de poder
manipulá-los da maneira mais eficiente possível, como por exemplo, uma tabela, uma lista, uma árvore
etc. As estruturas escolhidas estarão intimamente relacionadas com a categoria de “estruturação” dos
mesmos, tais como “Estruturados”, “Não Estruturados” e “Semi-Estruturados”.

Dados Estruturados e Semi-Estruturados


Dizer que um conjunto de dados é estruturado pode ser menos intuitivo do que parece. Encontraremos
definições que levarão a dizer que certos tipos, como os escritos usando a linguagem XML, são
estruturados e não estruturados.

Não basta simplesmente existir algum tipo de estrutura para armazenar certos tipos de dados para
dizermos que eles estão estruturados. A rigor, a estruturação passa pelo conceito de homogeneidade,
como, por exemplo, várias linhas e colunas, em que estas últimas contêm dados do mesmo tipo.

Saiba mais

A chave para se identificar se um dado está estruturado ou não é verificar se um conjunto completo de
informações de um dado (por exemplo, nome, endereço, telefone, idade etc) tem, em sua estrutura,
atributos, ou “caixinhas”, para todos os seus possíveis valores, mesmo que eles não existam.

No caso de uma agenda telefônica, por exemplo, se cada página de cadastro tem espaço para o telefone
Residencial, Comercial e Celular, mesmo que alguns dos telefones não fiquem preenchidos, podemos
dizer que estes são dados estruturados.

Exemplo

Por outro lado, vamos imaginar um arquivo de um processador de texto, como o Microsoft Word, em que
colocamos todos os dados de possíveis clientes, cada um em um parágrafo diferente. Pode ser que alguns
parágrafos tenham informação sobre o contato do cliente com telefone, outros apenas com e-mail, e
outros ainda com apenas endereço e sem pessoa de contato.

Só teremos como saber depois de olhar todos os parágrafos e, ainda assim, nada irá garantir que alguém
não poderá acrescentar um novo parágrafo fora de estrutura com o anterior.

Em alguns casos chamamos certos tipos de dados de “Semi-Estruturados”. Essa é uma área cinza em
que os exemplos podem variar as classificações de um autor para outro. A ideia do dado “Semi-
Estruturado” é que, apesar de cada “caixa”, ou “gaveta” em que os dados serão armazenados serem
heterogêneas e poderem variar de um conjunto para o outro de dados, existem informações
identificáveis do modo como estas estruturas variam.

Exemplo

Vejamos, por exemplo, dados de um aluno que podem ou não ter a foto associada. A estrutura padrão não
teria a foto, mas haveria um campo com um “Flag” indicando se existe um arquivo separado com foto, caso
ocorra. Outro caso é quando cada “campo”, atributo ou “caixinha” do conjunto de dados tem algum tipo de
rótulo que indica seu nome, tipo e a relação com o conjunto principal de dados.
Como, por exemplo, uma árvore não uniforme, em que cada nó pode ter o mesmo número de filhos ou
não. Nesses casos, estamos nas áreas cinzas. Alguns autores consideram esse tipo de dado como “Não-
Estruturado” e outros como “Semi-Estruturados”, o que vai ser exatamente o caso dos dados
armazenados utilizando a linguagem XML.

A linguagem XML permite escrever dados completamente estruturados, mas não os obriga a serem.

Vamos ver alguns exemplos e próprias análises de classificação para melhor entendimento:
Clique nos
botões para ver as informações.

Planilhas eletrônicas (Ex. Excel) 

De um modo geral, existe um consenso de que planilhas eletrônicas são estruturadas, apesar de
uma ressalva de que elas permitem que dados sejam dispostos de todas as formas possíveis.
Devemos ter em mente que, para efeitos formais, consideramos como dados estruturados.

Bancos de dados Relacionais 

Este é o exemplo clássico e inequívoco de dados estruturados e a sua principal razão é que o
modelo relacional, por definição, é estruturado e não há como escrever ou armazenar um dado nele
sem uma estrutura homogênea, mesmo que consideremos um banco de dados não normalizado.

Arquivos CSV 

Do inglês “Comma Separated Values”, valores separados por vírgula, apesar de uma estruturação
bem fraca, dado que se constitui de um mero arquivo texto com valores; sejam numéricos ou textos
separados por vírgula, são considerados dados estruturados no sentido formal.
Mas, assim como nas planilhas, podem perfeitamente conter dados semi ou desestruturados,
apesar de isso ser incomum.

Arquivos JSON 

Do inglês “Java Script Object Notation”, ou notação de objetos do formato JavaScript. Este é um
formato em forma de árvore do tipo “Rótulo – Valor”.
Como uma estrutura de árvore, podemos dizer que é um dado semi-estruturado, mas não
completamente, uma vez que não há obrigatoriedade da quantidade de nós filhos e ramos da árvore;
contudo, existem rótulos e formalizações que permitem o tratamento da estrutura mesmo quando
não homogênea, o que a faz semi-estruturada.

Arquivos HTML 

Do inglês “HyperText Markup Language”, é a linguagem usada para construção de websites


globalmente conhecidos e transformados em interfaces visuais complexas pelos navegadores. Esta
é uma estrutura em árvore também não homogênea, apesar de ter rótulos que identificam cada
ramo da árvore.
Nesse caso, alguns autores consideram a HTML como uma linguagem Não-Estruturada e outros
Semi-Estruturada. Um dos problemas é que ela permite que certos rótulos muito específicos (como
<p>) não precisem de um rótulo de fechamento, quebrando totalmente a homogeneidade da
estrutura.
Apesar de ser possível escrever conteúdo nessa linguagem de forma totalmente estruturada, os
autores a consideram no máximo “Semi” estruturada.
Arquivos XML 

Não iremos entrar em muito detalhe sobre a XML aqui, uma vez que ela é o tema geral de disciplina,
mas basta dizer que alguns autores a consideram Não-Estruturada por permitir criação de árvores
com quantidade de nós não homogêneos e até valores nulos.
Uma grande maioria a considera “Semi-Estruturada”, uma vez que ela mantém uma conformação em
sua sintaxe na questão do fechamento de rótulos e estrutura de árvore.

Dados Não Estruturados


Como mencionamos previamente, dados não estruturados não têm nenhum tipo de homogeneidade e
nem mesmo previsão das informações no elemento seguinte do conjunto de dados. Alguns exemplos
mais tradicionais são:

Arquivos de texto

Temos palavras, frases etc. espalhadas e sem necessariamente conexão entre elas, como, por
exemplo: Documentos Word, Apresentações (PowerPoint), Arquivos de Logs, Anotações.


Multimidia

De modo geral, dados em formato binário não têm estruturação direta, apesar de ela existir num
nível mais alto. Existem provas matemáticas de que duas imagens têm similaridade quando
processamos todos os “bits” da imagem, mas não temos sistemas de armazenamento e estruturas
de dados capazes de manipulá-las de forma homogênea. Temos, como exemplos, vídeos do
YouTube, imagens do Instagram, Áudio de Chats etc.


Dados de dispositivos móveis

Não podemos dizer, a rigor, que qualquer tipo de dados oriundo de dispositivos móveis não é
estruturado, mas uma boa parte deles ainda não possui estruturas homogêneas pré-definidas, como
Mensagens de Texto (SMS) e Dados sobre Geolocalização.
Conceito de XML
O primeiro conceito “peculiar” da XML é de uma linguagem sem “vocabulário”, por assim dizer. Muitos
poderão dizer que XML não é realmente uma linguagem, mas uma “META-Linguagem”, pois o que ela
permite é a criação de seus próprios elementos diretamente e, além disso, ela está mais para uma
estrutura de armazenamento de informações do que uma linguagem formal.

Vamos tomar como exemplo uma linguagem de programação como JAVA. Ela tem comandos para
iniciar um comando condicional, como “if(alguma condição){ execute algo”...}. Já em XML, o que
realmente escreveríamos, equivalentemente, seria algo mais ou menos como:

<SE>
<CONDICAO 1>
Descrição da condição
<ACAO 1> Descrição da ação </ACAO 1>
</CONDICAO 1>
</SE>

Exemplos conceitual simples de um fragmento XML

Comentário

Note que os únicos itens previamente usados da “Linguagem” propriamente ditos foram as marcações de
início e fim de rótulo “<>” e “</>”, enquanto os valores dos rótulos “SE” etc. foram designados por nós
mesmos. Isso é diferente de outras linguagens de marcação, como HTML, em que os rótulos são pré-
definidos (<H1>, <TR> etc.).

Alguns poderão se perguntar: Para que serve uma linguagem se ninguém mais sabe que rótulos eu uso,
além de mim mesmo? Calma. Na prática não é só isso. A ideia da XML é justamente você criar sua
própria estrutura e comandos, os quais você vai especificar ou usar nas aplicações em que ela vai ser lida
ou processada.

Suponha que você queira criar um aplicativo e armazenar as várias configurações de layout dos seus
componentes visuais, cores, comportamentos default, número máximo de usuários que podem se logar.,
tamanho das mensagens etc.

Ao invés de simplesmente colocar estes números fixos no seu programa, ou uma lista de valores num
arquivo texto que você terá que lembrar em que linha e posição do arquivo cada informação está, você
cria um documento XML usando rótulos (TAGs) com nomes significativos para informação e depois
você apenas manipula esse arquivo dentro do seu aplicativo.
Ainda há outras inúmeras vantagens. A primeira é que o processo de
criação, leitura e escrita de arquivos XML já tem funções de bibliotecas
prontas em quase todas as linguagens, economizando muito tempo de
desenvolvimento. A segunda grande vantagem é que um documento XML,
apesar de totalmente livre, permite validações bastante restritas, se
desejado.

Dessa forma, podemos previamente definir todos os rótulos, atributos, valores e estruturas válidas, e os
processadores de XML irão checar se cometemos um erro ao escrever nossas informações. Ou, como é
mais comum, se outros, usando nosso modelo de XML, o produziram corretamente para que seja
processado pelo nosso aplicativo.

Ao longo desta disciplina, veremos mais detalhes desses procedimentos e como eles se aplicam em
praticamente quase todos os sistemas de software dos dias de hoje.

Estrutura Básica da XML


Formato Padrão
O formato padrão básico de um documento XML pode ser visto na LISTAGEM 2 e codificado utilizando a
ferramenta Liquid XML Studio na LISTAGEM 3. Tentamos destacar os elementos cujos nomes são
totalmente definidos pelo usuário. Podemos ver que, além do nome dos rótulos e dos textos, também
podemos fornecer atributos, também nomeados por nós, e possíveis valores:

<?xml version="1.0" encoding="utf-8"?>

<ElementoRaiz>

<NomeDeElemento1 atributo1=”Valor” atributo2=”Valor” ... >

<ElementoFilho> elemento de texto 1 </ElementoFilho>


<ElementoFilho> elemento de texto 2 </ElementoFilho>
...
</NomeDeElemento1>
...

<NomeDeElemento2 ... >

</NomeDeElemento2>

</ElementoRaiz>

Exemplos conceitual simples de um fragmento XML

Com auxílio da ferramenta de construção, conseguimos ter uma melhor visualização da estrutura em
árvore que é desenhada ao longo da criação do documento XML.

Note que, como qualquer elemento permite ter não apenas elementos filhos, mas também
opcionalmente texto, no quadro “<.>ElementoFilho na parte superior da listagem existe um espaço vazio
para um possível texto que poderia ter sido inserido antes da lista.

Exemplo de estrutura XML no LIQUID XML Studio – Imagem capturada da ferramenta por Autor,2019.

A seguir, temos um exemplo mais concreto de um fragmento XML para armazenamento de informações
de livros de uma biblioteca. Note que o rótulo(tag) <Livro> aparece repetidamente sem nenhum
problema, porém, cada livro, nesse caso, só tem um único autor. Observe também que algumas
informações estão armazenadas como texto dentro de rótulos e outras em atributos dos rótulos.

Exemplo de uma Biblioteca em XML - Imagem capturada da ferramenta por Autor,2019.


Itens da Estrutura


Clique no botão acima.
Os exemplos e estruturas demonstrados na seção anterior podem ser especificados abaixo:

Cabeçalho – Todo documento XML começa indicando seu próprio tipo e, principalmente, o
tipo de codificação de caracteres que ele irá aceitar como texto, sendo o mais comum o “utf-
8” (8-bit Unicode Transformation Format), que, em linhas gerais, quer dizer que ele pode usar
todos os tipos de caractere, desde os básicos até outros alfabetos, como chinês, russo etc.,
uma vez que pode usar até 4 bytes para codificar cada caractere.

O cabeçalho padrão apenas precisa indicar a versão e a codificação, como no Ex.1. Cabeçalhos
mais complexos vão envolver indicação de como o documento vai ser validado.

Ex1. <?xml version="1.0" encoding="utf-8"?

Ex2. <!DOCTYPE filme SYSTEM "DTDFile.dtd" >

Elemento – Este é o item principal da XML, rótulo que indica valores e, também, os nós da
estrutura de árvore do documento. Ele é composto de duas partes com o mesmo nome,
sendo que o segundo deve conter uma “barra” (/) que vai indicar o fechamento daquele “nó”,
tenha ele quantos filhos ou textos existirem.

Ex. <Autor> Monroe Blutbat </Autor>

Elemento Raiz – Este é apenas um Elemento como o anterior, mas com uma característica
especial, pois encapsula todo o documento entre seus rótulos de início e fechamento e,
obviamente, só pode existir um deles em todo o documento.

Ex. <Biblioteca> Outros elementos e estruturas </Biblioteca>

Atributo – O atributo é uma forma alternativa de atribuir valores a um elemento (ou rótulo)
sem que seja pelo texto que ele encapsula. Essa é uma alternativa interessante em alguns
casos, principalmente se for para indicar um identificador único (ID) ou um tipo, mas o
problema é que não pode haver dois atributos com o mesmo nome.

Ex: <NomeDeElemento1 atributo1=”Valor” atributo2=”Valor” ... >

Texto – O texto é todo o conjunto de caracteres encapsulado entre o rótulo de início e fim,
excluindo possíveis rótulos que também estejam incluídos. Eles devem obedecer a certos
critérios e não podem conter certos valores, como os próprios marcadores “< >”, por isso
existem alguns códigos especiais para quando queremos explicitamente usar os marcadores
dentro do texto como caracteres comuns.
Ex. <ElementoFilho> elemento de texto 1 </ElementoFilho>

Comentário – Como em qualquer linguagem, XML permite que se coloquem declarações


apenas para fins documentais que ajudem os desenvolvedores e usuários do documento a
melhor compreendê-lo. A sua sintaxe se mostra no exemplo abaixo:

Ex. <!-- Comentários ignorados -->

Processamento – Os códigos de processamento são de fato um recurso a ser usado por


alguns processadores de XML ou mesmo por aplicativos desenvolvidos especificamente para
isso. Eles supostamente indicam uma instrução a ser processada, mas por quem e o que elas
iriam processar irá depender da instrução.

Ex. <?InstrucaoASerProcessada ?>

CDATA – Este tipo é usado em certos casos quando queremos evitar totalmente o
processamento XML e usar rótulos e caracteres com total liberdade.

Exemplo de elemento #CDATA - Imagem capturada da ferramenta por Autor,2019.

Regras de Sintaxe
A despeito da característica extremamente livre da XML, ela deve obedecer a algumas regras de sintaxe
relativamente simples:

a. Um documento XML deve possuir raiz única – Em outras palavras, temos que ter um, e apenas um,
rótulo principal embaixo do qual todos os outros rótulos, textos, atributos etc. serão incluídos. Essa
será a raiz da árvore do documento.

b. Todos os rótulos (ou tags) devem ter um início e um fim, ou seja, devem ser fechados de forma a
encapsular todos os elementos de sua sub-árvore.
c. Os elementos devem ser bem-aninhados, ou seja, os rótulos têm que se fechar na ordem oposta à
que foram abertos. Em outras palavras, o primeiro rótulo a ser aberto deve ser o último a ser
fechado.

d. Um nome de atributos não pode se repetir dentro de um mesmo elemento. Na listagem a seguir,
colocamos um erro proposital ao repetir o atributo “AUTOR” e o processador de XML imediatamente
acusa o erro para o desenvolvedor.


Erro de Atributo Repetido - Imagem capturada da ferramenta por Autor,2019.

e. Os rótulos dos elementos (tags) e atributos são sensíveis a caracteres maiúsculos e minúsculos.
Nesse caso, fizemos uma pequena alteração no exemplo da listagem anterior, apenas alterando o
nome do atributo de algumas letras de maiúsculas para minúsculas. Veja que o erro desaparece.

Exemplo de variação de maiúsculas e minúsculas - Imagem capturada da ferramenta por Autor,2019.

No exemplo acima a solução mais correta e eficiente quando podemos ter um número indefinido de
autores não seria usar atributos mas sim elementos, uma vez que eles podem ser repetidos, como
podemos ver a seguir.

Alternativa para atributos repetidos - Imagem capturada da ferramenta por Autor, 2019.

f. Todo atributo deve possuir algum valor e esse valor deve ser especificado entre aspas. Esta regra é
bem óbvia, mas devemos ressaltar que, em caso de não existir o valor para o atributo por algum
motivo, devemos ainda assim colocar → =”” (Aspas vazias) para indicar valores nulos propriamente.

Ainda assim, caso o esquema de validação tiver sido explicitado para não permitir valores nulos, o erro
ocorrerá do mesmo jeito.

g. Alguns caracteres especiais, como “<”, “&” e “>” devem ser especificados com o uso de entidades pré-
definidas (no caso & lt; & amp; e & gt; respectivamente).
Como mencionamos anteriormente, não podemos colocar nos textos caracteres que já são reservados
para a própria sintaxe do documento e, portanto, alguns códigos especiais são reservados para tal.

h. Nomes de tags não podem conter espaços em branco nem os caracteres abaixo:

!     "     #     $     %     &     '     (     )     *     +     ,     /     ;     <     =    


>     ?     @     [     \     ]     ^     `     {     |     }     ~     .

Saiba mais

Além disso, não podem começar com um número, “.” (ponto) ou “-" (traço).

Espaço de nomes (namespace)


A estrutura da XML permite ainda flexibilizar os nomes dos rótulos ou elementos de forma a não coincidir
com outros nomes e manter uma consistência dentro de um certo assunto. Teríamos um conflito, pois
os rótulos “<table>” significam coisas diferentes.

<table>
<tr>
<td> Abacaxi </td>
<td>Bananas </td>
</tr>
</table>
<table>
<name> Mesa de Café da manhã </name>
<width>80</width>
<length>120</length>
</table>

Neste caso, utilizamos a solução do “Espaço de Nomes” e acrescentamos um qualificador do tipo “X:”
antes dos rótulos, mas precisamos defini-lo através do atributo “xmlns:”, como no exemplo a seguir:

<h:table xmlns:h="https://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

Atividade
1. Se tivéssemos que escolher uma estrutura para um aplicativo em que soubéssemos que várias das
entidades a serem armazenadas no banco de dados têm atributos de tipo padrão, como texto e números
(contudo, algumas das entidades poderiam ter imagens ou áudios associados), que tipo de estrutura
escolheríamos?

a) Semi–Estruturada
b) Estruturada
c) Não–Estruturada
d) Arquivos de formato XML livre heterogêneo
e) Arquivos de formato XML homogêneo
2. Qual das opções abaixo seria a melhor estrutura XML, dentro das melhores práticas, para armazenar as
informações de empresas, a qual pode ter de um a oito sócios, descrição, um ramo de atuação, CNPJ e
algumas filiais?

a)

<EMPRESAS> ?
<EMPRESA CNPJ=”xxx” RAMO=”” >
<DESCRICAO> descrição... </DESCRICAO>
<SOCIO> Nome1 </SOCIO>
<SOCIO> Nome2 </SOCIO>
<Filial nome=”f1” endereço=””/>

</EMPRESA>
</EMPRESAS>

b)

<EMPRESA CNPJ=”xxx” RAMO=”” >


<DESCRICAO> descrição... </DESCRICAO>
<SOCIO> Nome1, Nome2 </SOCIO>
<Filial nome=”f1” endereço=””/>
</EMPRESA>
<EMPRESA ....

c)

<EMPRESA CNPJ=”xxx” RAMO=”” DESCRICAO= “” />


<SOCIO> Nome1 </SOCIO>
<SOCIO> Nome2 </SOCIO>
<Filial nome=”f1” endereço=””/>

d)

<EMPRESAS>
<EMPRESA CNPJ=”xxx” RAMO=””
DESCRICAO = “xxxxx”>
<SOCIO> Nome1,Nome2,Nome3.. </SOCIO>
<Filial nome=”f1” endereço=””/>
</EMPRESA>
</EMPRESAS>
e)

<EMPRESAS>
<EMPRESA CNPJ=”xxx” RAMO=”” >
<CNPJ> CNPJ1 </CNPJ>
<CNPJ> CNPJ2 </CNPJ>
<DESCRICAO> descrição... </DESCRICAO>
<SOCIO nome = “Nome1” />
<SOCIO nome = “Nome2” />
<Filial nome=”f1” endereço=””/>
<Filial> Filial 2 </Filial>
</EMPRESA>
</EMPRESAS>

3. Temos que construir um documento XML para armazenar informações de textos de manuais digitais, a
serem disponibilizados para equipes de manutenção, com uma formatação eficiente e amigável. Várias
partes destes textos teriam atributos de cabeçalho, podendo se apresentar tanto em inglês ou português,
como “Header”, “Title”, entre outros. Qual seria a melhor e mais eficiente solução ao construir este
documento?

a) Utilizar espaços de nomes


b) Criar Tags para cada parte e atributo, não há soluções para categorização de tags em XML
c) Utilizar uma combinação de estilos, como Cascade Style Sheets com XML
d) Criar documentos XML não estruturados com tags em inglês e outras em português
e) Basta termos um documento XML bem formatado e semi-estruturado.

Referências
Notas
ALMEIDA, M.B. Uma introdução ao XML, sua utilização na Internet e alguns conceitos complementares.
Ciência Da Informação, 31(2), 5–13. Disponível em: https://doi.org/10.1590/s0100-19652002000200001.
Acesso em 17 nov. 2020.

HELDER. Diferença entre Dados Estruturados e Não Estruturados - Cultura Analítica. Disponível em:
https://culturaanalitica.com.br/diferenca-entre-dados-estruturados-e-nao-estruturados/. Acesso em 17
nov. 2020.

MONTEIRO, L.P. Dados Estruturados e Não Estruturados. Universidade da Tecnologia. Disponível em:
Disponível em: https://universidadedatecnologia.com.br/dados-estruturados-e-nao-estruturados/.
Acesso em 17 nov. 2020.

Próxima aula
Ferramentas de construção de documentos XML;

Ferramentas de código aberto para manipulação de arquivos XML;

Ferramentas completas para todo tipo de manipulação de arquivos XML.

Explore mais

Leia o Capítulo 10 do livro Sistemas de Banco de Dados

Leia o texto Detalhes sobre a evolução do XML: https://www.scielo.br/pdf/ci/v31n2/12903.pdf

Você também pode gostar