23 January 2002 - Current month previous updates: - 01 | 04 | 08 | 12 | 16 | 23 | |

1 - Entidades XML (introdução)

XSL - introdução ao XSL, para breve.

XML Writer - uma excelente ferramenta, para edição e validação de documentos XML, XSL, DTD, etc...

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.

Códigos de côr - ajudam imenso a destacar a estrutura da informação.

A interface do XML Writer - lembra bastante a do ambiente Visual Studio.