|
Entidades XML (introdução)
Entities em XML são um pouco como as constantes simbólicas
em C: entidades com um nome, que tem um simbolismo associado. Apenas
isso.
A forma geral para declaração de uma ENTITY, é:
<!ENTITY nome "valor">
A utilização é na forma &nome;
Por exemplo:
<!ENTITY nr_chassis "xpto12345">
Para utilizar a ENTITY, basta fazer &nome-da-ENTITY;
Eis um exemplo de como utilizar a ENTITY declarada acima, numa estruturação
XML em particular.
<carro>
<marca>Chrysler</marca>
<ano>2000</ano>
<cor>branco</cor>
<chassis>&nr_chassis;</chassis>
</carro>
Tal como as constantes simbólicas em C, neste caso a referência à ENTITY,
resulta na substituição da sua invocação,
pelo simbolismo associado, pelo que seria absolutamente equivalente escrever
<carro>
<marca>Chrysler</marca>
<ano>2000</ano>
<cor>branco</cor>
<assis>xpto12345</chassis>
</carro>
Num primeiro contacto, a utilidade de Entities está na referência
a ficheiros externos, de forma a que um documento XML possa ser "dividido" por
vários ficheiros.
Por exemplo, imagine-se uma loja de música, livros e filmes,
que organizou o seu catálogo numa base de dados qualquer, que
exporta a informação em XML. Imagine-se que o catálogo
tens largos milhares de títulos...
Então, uma estrutura do estilo...
<catalogo>
<filmes>
<filme>
<titulo>Bla bla #1</titulo>
<realizador>Mr. Hollywood</titulo>
<ano>1980</ano>
</filme>
<filme>
<!-- imagine outro filme-->
</filme>
...
</filmes>
<!-- aqui termina sub-estrutura para filmes
-->
<discos>
<disco>
<artista>Marco Paulo</artista>
<album>Muitos Amores</album>
<ano>200 A.C.</ano>
</disco>
<disco>
<!-- imagine outro disco -->
</disco>
...
</discos>
<!-- aqui termina sub-estrutura para discos
-->
<livros>
<livro>
<autor>Stephen Rei</autor>
<titulo>Monstros 2002</titulo>
<ano>2001</ano>
<livros>
<livro>
<!-- imagine outro livro -->
</livro>
...
</livros>
<!-- aqui termina a sub-estrutura para livros
-->
<!--- e aqui, já teriamos milhares
de linhas de XML -->
</catalogo>
... poderia facilmente tornar-se excessiva, do ponto de vista do processamento,
ou simplesmente não ser sensata, ou não estar de acordo
com as preferências de organização, que pretende
separar a informação mantidas pelos «departamentos» de
livros, música e filmes...
Utilizando o elemento ENTITY para referir documentos externos, é fácil
conseguir esta organização.
A forma geral para uma ENTITY que é *todo* o conteúdo
de um ficheiro externo, é:
<ENTITY nome SYSTEM "url">
Por exemplo, imagine-se ficheiros *separados* filmes.xml, musica.xml
e livros.xml, organizados conforme sugerido acima; ito é, todo
o conteúdo do elemento <filmes> em filmes.xml, todo o conteúdo
do elemento <discos> em discos.xml, e todo o conteúdo do
elemento <livros> em livros.xml.
Imagine-se ainda que o DTD (catalogo.dtd) a respeitar é:
<!ELEMENT catalogo ANY>
<!ELEMENT livros (livro*)>
<!ELEMENT discos (disco*)>
<!ELEMENT filmes (filme*)>
<!ELEMENT livro (autor, titulo, ano)>
<!ELEMENT filme (titulo, realizador, ano)>
<!ELEMENT disco (artista, album, ano)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT ano (#PCDATA)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT realizador (#PCDATA)>
<!ELEMENT ano (#PCDATA)>
<!ELEMENT artista (#PCDATA)>
<!ELEMENT album (#PCDATA)>
<!ELEMENT ano (#PCDATA)>
<!ENTITY filmes "filmes.xml">
<!ENTITY discos "discos.xml">
<!ENTITY livros "livros.xml">
Então, seria possível ter:
<?xml-version="1.0">
<!DOCTYPE catalogo SYSTEM "catalogo.dtd">
<catalogo>
&filmes;
&discos;
&livros;
</catalogo>
Ficou mais simples.
|