Tratamento de um Jornal Electronico em XML

Tratamento de um Jornal Electronico em XML

Trabalho prático de Processamento Estruturado de Documentos - MICEI 2002/03


Autores

ElizabeteDuarte
elizabete.m.duarte@telecom.pt -

Orientadores

José C. L.Ramalho
jcr@di.uminho.pt - http://www.di.uminho.pt/~jcr/

Universidade do Minho
Departamento de Informática
http://www.di.uminho.pt

Junho de 2003





| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|
(c) copyright 2003 - Não é permitida a reprodução de conteúdos deste trabalho, sem autorização expressa do autor.







Dedicatória

Para quem soube estar sempre presente...

Agradecimentos

Um agradecimento especial à minha família: ao meu marido, Jorge, e aos meus dois filhos, Patricia e Flavio. Que me deram espaço para conseguir.

A todos os colegas pelo seu apoio e camaradagem.

assinatura

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|





Prólogo

O trabalho apresentado contempla um schema, um DTD, uma stylesheet, e a instância do schema em XML. A instância é um Jornal com informação variada tirada de alguns jornais disponíveis On-line.

O trabalho pretende definir uma estrutura expedita e funcional, passível de ser aplicada a documento informativo. Não é objectivo do trabalho criar uma implementação sistemática de todos os objectos possíveis, mas sim criar algumas utilizações mais comuns para exemplificar algumas potencialidades destas linguagens.

Ficam neste trabalho em aberto algumas ideias, e poderão ser aplicadas mais tarde.

O facto de manter o documento anotado num formato compatível, exportável, em diversos formatos e plataformas, garante qualquer tratamento no futuro e constitui uma vantagem muito relevante.

Resumo

Quando Lee inventou a World Wide Web em 1991, procurava a todo o custo encontrar um sistema de informação que lhe permitisse a fácil consulta de documentação, bem como a partilha de informação por vários utilizadores. O problema que se estava a procurar resolver era de facto ainda hoje bem real: documentação diversa espalhada por múltiplos formatos electrónicos, dificuldade na distribuição dos documentos, sistematização no armazenamento da informação

Nesta disciplina foram ministrados conceitos e técnicas que permitem ultrapassar o problema apresentado. Assim e como exemplo, com o presente trabalho pretendeu-se por em prática um conjunto de conceitos e ferramentas no âmbito de Processamento Estruturado de Documentos. Procedeu-se à elaboração de um documento informativo digital, jornal digital.

Neste trabalho foi analisado um documento, Jornal electrónico sobre o qual foi criado: Um schema;O seu DTD correspondente; Uma instância do documento, XML, com base em jornais online e notícias variadas de forma a conseguir encontrar as situações que melhor retratam o documento e elevam as potencialidades desta forma do o tratar; E uma transformação XSL para transformação do texto XML numa página HTML.

Abstract



| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|






Índice de Conteúdos

1. Introdução

1.1. Apresentação do caso de estudo

1.2. Motivação e Objectivos

2. Analise e Estruturação do Documento

2.1. O Schema do documento

2.2. Tipos complexos

2.2.1. Tbloco

2.2.2. Tartigo

2.2.3. Tpara

2.2.4. Tfigura

2.2.5. Tlista

2.2.6. TAutores

2.2.7. Ttabela

3. A estrutura em DTD

4. A instância em XML

5. A transformação XML - HTML

5.1. Abertura

5.2. Geração do índice

5.3. Artigo

5.4. Processamento dos elementos Figura

5.5. Referências Internas

5.6. Templates Vazios




| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|






1. Introdução

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Este relatório documenta o trabalho desenvolvido no âmbito da disciplina de Processamento Estruturado de Documentos do Mestrado/Cursos de Especialização em Informática, servindo como elemento de avaliação.

Não foram considerados, nem sequer existiu essa pretensão, todas as capacidades deste forma de tratar documentos e de lhe conferir uma apresentação brilhante. Considerou-se mais importante a aplicação dos conceitos apresentados na cadeira em detrimento de espetacularidade, mais dignos de arquitectos e designers, ou de qualquer momento de inspiração que dada a fase de exames e alguma inexperiência se recusa a aparecer.





1.1. Apresentação do caso de estudo

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Pretendia-se que se definisse uma aplicação que permitisse a criação de jornais electrónicos. Considerando que um jornal electrónico é composto por secções e estas por artigos. Um artigo pode ser uma lista de parágrafos, pode conter imagens, listas, e outros componentes, podendo ter como base alguns jornais disponíveis. O objectivo do trabalho é a criação e o desenvolvimento de um sistema constituído por uma estrutura documental e de apresentação para um Jornal Electrónico.

Pretendia-se elaborar um documento em eXtended Markup Language (XML), instância de um jornal electrónico; a criação de um Document Type Definition (DTD) e de um Schema que suportassem o jornal electrónico e lhe conferissem significado definindo a estrutura do ficheiro XML; e a construção de uma Style Sheet XSLT para a transformação e geração de um ficheiro HTML para a visualização da instância criada.

Este relatório será processado sobre os trabalhos desta mesma cadeira mas do ano de 2002 criando um documento HTML para apresentação ao docente da cadeira.






1.2. Motivação e Objectivos

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O XML oferece a possibilidade de dotar um documento anotado num sistema de processamento de forma a tornar explicita a interpretação do mesmo. Na sua construção é efectuada uma análise à estrutura da informação e aos atributos que caracterizam o documento, são determinadas quais as funções de processamento que conferem o formato desejado a cada elemento. O documento fica criado com a inserção de etiquetas e anotações no mesmo.

A linguagem XSL é usada para especificar a transformação de documentos XML transformando-o noutro documento XML, HTML ou Texto.

No desenvolvimento dos diversos documentos, utilizou-se como ferramenta de suporte o pacote XML Spy (versão 5.3). Esta ferramenta é apropriada para o desenvolvimento de aplicações baseadas em XML, permitindo a produção e manutenção de documentos XML, Schemas XML, bem com o Stylesheets XSL. Cobre as principais vertentes do XML, nomeadamente: edição e validação XML, edição e validação de DTD's e Schemas, edição e transformação XSL

A implementação deste projecto permitiu aplicar e desenvolver um conjunto de conhecimentos ministrados ao longo do curso, designadamente: estruturação de documentos em XML, produção de DTD's e Schemas para validação de documentos, construção e aplicação de transformações XSL a documentos XML.







2. Analise e Estruturação do Documento

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Adoptou-se um documento modelo para o jornal electrónico e partir daí desenvolveram-se os suportes necessários para criar um documento estruturado e anotado de forma a ser facilmente processado.

A análise documento permitiu concluir a organização da informação:

Um elemento abertura: onde é colocada a informação global e relevante do jornal (Nome e a data em que é publicado);

Um elemento corpo: constituído pelo conjunto de secções e artigos;

Finaliza com um elemento Fecho: que contem a informação referente à redacção, direcção e outra com que deverá terminar o documento aqui processado.





2.1. O Schema do documento

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O Schema foi criado após a análise ao documento fonte.

A documentação detalhada do Schema, pode ser consultada em Documentação do schema. Em todo o Schema foram colocadas anotações, com esclarecimentos e informação explicativa. Assim poder-se-á obter mais informações no próprio Schema.

O esquema geral do Jornal, onde o elemento raiz para este tipo de documento é o jornal:

A definição do Schema

Schema geral do Jornal.
O Jornal é caracterizado por 3 elementos: abertura, corpo e Fecho.

Abertura é constituída pelo titulo, identifica o nome do jornal, e pela data em que o jornal foi publicado. Tanto o elemento titulo como data são strings, poder-se-ia ter colocado o elemento data como data só que era muito mais restritivo pelo que se optou por não o fazer.

O elemento abertura

O elemento abertura

O corpo do jornal é uma sequência de secções, sendo:

O elemento corpo

O elemento corpo
Poder-se-ia ter definido o corpo como uma ou mais sequências de secções, no entanto e apesar do resultado ser o mesmo parece-me mais correcto considerar como uma sequência de uma ou mais secções.

O elemento Fecho é formado pela Redacao, que por sua vez é uma sequência de um conjunto de elementos facultativos, podendo o elemento Fecho não conter qualquer informação a processar:

Director, onde caberá colocar a lista de informação associada a cada Director do Jornal (nome, email, url);

Copyright, string onde se poderá colocar uma mensagem de protecção da autoria dos artigos e do documento electrónico;

url, para colocar o endereço electrónico do jornal.

O elemento Fecho

O elemento Fecho







2.2. Tipos complexos

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Foram criados tipos complexos de dados para permitir a sua utilização em vários elementos do esquema e também facilitar a manutenção do esquema.

A utilização de tipos complexos simplifica bastante a definição do XSD pois torna a estrutura mais abstracta, podendo-se utilizar o mesmo tipo em diversos elementos, sem que para isso seja necessário tornar a formular toda a sua constituição.

Assim foram definidos como tipos de dados complexos:

Tbloco, tipo de dados utilizado para definir os elementos secção;

Tartigo, utilizado para definir os elementos artigo;

Tpara, empregue na definição do elemento parágrafo;

Tfigura, tipo de dados utilizado nas figuras;

Tlista, tipo de dados usado na especificação do tipo de séries de informação que interessa destacar de forma individualizada;

TAutores, utilizado para o elemento autores;

TTabela, empregue na definição de uma série de colunas e linhas devidamente agregadas e com significado.





2.2.1. Tbloco

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O Tbloco, utilizado para permitir definir secções:

Tbloco

Tbloco, utilizado para definir o tipo das secções.
Um Tbloco, refere uma secção do jornal, economia, desporto ou outra, tem necessariamente um titulo , string, identificativa da secção. Na sequência do titulo tem o subtítulo que pode existir ou não. Após a identificação da secção surge o corpo da mesma. O corpo de uma secção pode ser, opcionalmente, por qualquer ordem e com qualquer cardinalidade constituído pelos elementos Artigo e figura.






2.2.2. Tartigo

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

É definido pela caracterização e identificação do artigo, tal como uma secção, pelo titulo, que identifica o titulo do artigo e opcionalmente por um subtítulo, que identifica um subtítulo ou informação de titulo, que não necessariamente titulo, associada ao artigo. Na identificação do Tartigo há também a data, refere a data em que o artigo foi publicado e os Resumos, elementos que podem ou não existir e contêm, facultativamente, uma figura e um texto com uma breve descrição do artigo.

Tartigo

Tartigo, utilizado para definir o tipo artigo.
O componente Tartigo é constituído por um conjunto opcional e arbitrário de parágrafos, elemento para , figuras, elemento figura, listas, elemento lista e tabelas, elemento tabela.

O elemento Autores termina a sequência de um componente Tartigo. Nos Autores está a informação referente a quem escreveu ou forneceu o artigo.

Associado a um Artigo há um atributo do tipo ID, IdArtigo, utilizado para permitir referências internas, hiperligações, no jornal.






2.2.3. Tpara

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Este elemento é provavelmente o mais importante do Schema, pois define todos os possíveis conteúdos a incluir no documento. A figura seguinte esquematiza os elementos possíveis neste tipo complexo. Com esta estrutura é possível incluir os principais tipos de informação usados, permitindo uma análise de informação notável.

Note-se que um parágrafo é um tipo misto de dados entre texto e o TAD Tpara, isto é um paragrafo tanto pode ser só um texto como texto e um tipo do tipo Tpara ou só um tipo do tipo Tpara. Por sua vez Tpara envolve zero ou mais selecções entre destaque, citação, ref , xref, lista, figura e tabela.

Tpara

Tpara: utilizado para o tipo do paragrafo

O elemento destaque é utilizado para salientar um determinado texto. O texto a ser processado é o texto definido neste componente. O atributo, opcional, do tipo simples de dados Tdestaque define qual o destaque a dar ao texto.

Tdestaque é uma lista de valores: carregado, sublinhado e itálico.

Citação será utilizada para referenciar um texto da autoria de outra pessoa.

O elemento ref é para identificar um Artigo no documento. Possibilitando o salto para o elemento referenciado. Na definição de ref temos um atributo destino, IDREF, onde será colocado o ID do elemento interno que se pretende apontar.

Por seu turno xref é uma referência externa. O url identifica um endereço e a legenda é o texto que deverá aparecer no documento apresentado para seleccionar a referência externa.






2.2.4. Tfigura

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Tfigura é um tipo de dados complexos utilizado para definir o tipo dos elementos figura:

Tfigura

Tfigura utilizado para definir o tipo das Figuras
Uma figura tem uma imagem e pode ter facultativamente uma legenda. Sendo a legenda o texto associado à imagem, e a imagem o nome de um ficheiro com uma figura, gráfico, etc.






2.2.5. Tlista

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O elemento lista é definido pelo tipo complexo de dados Tlista:

Tlista

Tlista utilizado para definir o tipo listas
Uma lista é uma ou mais items. Um Item é um parágrafo do tipo Tpara. As listas podem ser numeradas ou não numeradas, nnumeradas. Tal é especificado pelo atributo tipo da lista. Este atributo é do tipo simples de dados TipoLista.

TipoLista é uma enumeração de numerada ou nnumerada permitindo criar várias formas de listas.






2.2.6. TAutores

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

A entidade Autor é definida pelo tipo de dados TAutores.TAutor é a sequência do nome, nome do autor, local, localização física em que se encontra o autor do artigo, é opcional. Opcionalmente, também, pode ter a informação do seu endereço de mail e da sua pagina pessoal.

O elemento email, dentro de TAutores foi usado em pattern para verificar a forma do sintáctica do email.

TAutores

TAutores utilizado para definir o elemento Autor







2.2.7. Ttabela

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

A componente Ttabela define o elemento do tipo tabela. Uma tabela é um conjunto de linhas e cada linha tem um conjunto de células. Não se destacou uma linha de cabeçalho assim o cabeçalho da tabela será a primeira linha a ser definida.

Ttabela

Ttabela utilizado para definir o elemento tabela









3. A estrutura em DTD

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Nesta secção são apresentados os pormenores subjacentes ao DTD criado para o documento XML, cujo detalhe se transcreve em O Documento DTD.

O elemento raiz, jornal, possui a seguintes estrutura:

			<!--Jornal - elemento raiz para este tipo de documentos-->
			<!ELEMENT jornal (abertura, corpo, Fecho)> 

A abertura obedece à seguinte construção:

			<!--Elemento para a identificação do Jornal-->
			<!ELEMENT abertura (titulo, Data)> 

Os elementos de abertura são definidos por:

			<!--Titulo do Jornal-->
			<!ELEMENT titulo (#PCDATA)>
			<!--Data do Jornal-->
			<!ELEMENT Data (#PCDATA)> 

Dada a incorporação de atributos na imagem a sua descrição fica com se pode ver na descrição seguinte:

			<!--Figura ou Imagem com ou sem Legenda.-->
			<!ELEMENT figura (legenda?, Imagem)>
			<!--Legenda associada á Figura ou Imagem.-->
			<!ELEMENT legenda (#PCDATA)>
			<!--Figura ou Imagem-->
			<!ELEMENT Imagem EMPTY>
			<!ATTLIST Imagem
			path CDATA #REQUIRED
			formato (gif | jpeg | png | bmp | wmf) #IMPLIED
			Posicao (right | left | middle) #IMPLIED>

O elemento para é composto por:

			<!--Tipo de Dados para os parágrafos-->
			<!ELEMENT para (#PCDATA | destaque | citação | ref | xref | lista | figura | tabela)*>

Um pouco mais complexa é a estrutura do corpo do jornal, sendo descrita por:

			<!--Elemento que contem as várias secções e artigos do Jornal.-->
			<!ELEMENT corpo (seccao+)>
			<!--Elemento seccao.-->
			<!ELEMENT seccao (titulo, subtitulo?, (Artigo | figura)+)>

Para os elementos que não foram aqui descritos são detalhados no Documento DTD, sendo fácil a compreensão e a interpretação






4. A instância em XML

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

É assim possível o seguinte pseudo-XML:

			<jornal>
				<abertura> ... </abertura>
				<corpo> ... </corpo>
				<Fecho> ... </Fecho>
			</jornal>

Os parêntesis rectos evidenciam componentes opcionais e as reticências o conteúdo dos elementos.

A componente abertura destaca a caracterização do jornal:

			<abertura>
				<titulo> ... </titulo>
				<data> ... </data>
			</abertura>
			

O corpo do jornal apresenta-se como uma repetição de uma ou mais secções, ou seja:

			<corpo>
				(<seccao> ... </seccao>)+
			</corpo>
			

Cada secção tem um título, seguido de um subtítulo e de um número opcional de Artigos e/ou de um número opcional de figuras, pelo que temos o seguinte pseudo-XML, onde | denota a selecção de um componente da lista apresentada:

			<seccao>
				<titulo> ... </titulo>
				[<subtitulo> ... </subtítulo>] 
				(<Artigo> ... </Artigo> |
				<figura> ... </figura>)+
			

Constate-se a possibilidade de acordo com a especificação anterior de poder ter uma série infinita de combinações da entidade Artigo com a entidade figura

O Artigo tem um título seguido, opcionalmente, de um subtítulo, uma data e de Resumos, onde o * denota um componente repetitivo facultativo. Do Artigo também fazem parte parágrafos, para, figuras, listas e tabelas em todas as combinações que se pretenderem apresentar.

			<Artigo>
				<titulo> ... </titulo>
				[<substitulo> ... </subtítulo>]
				<Data> ... <Data>
				(<Resumos> ... <Resumos>)* 
				(<para> ... </para> | <figura> ... </figura> | <lista> ... <lista> | <tabela> ... <tabela>)+
				<Autores> ... </Autores>
			</Artigo>
			

O elemento opcional Resumos tem um pseudo-XML:

			<Resumos>
				[<figura> ... </figura>]
				<Resumo ... <Resumo>
			</Resumos>
			

Figura fica assim referenciado:

			<figura>
				[<legenda> ... </legenda>]
				<Imagem ... <Imagem>
			</figura>
			

O parágrafo é um elemento composto por texto e por qualquer conjunto de elementos que o constituem:

			<para>
				(<destaque> ... </destaque> | <citacao> ... </citacao> | <ref> ... </ref > |
	 			<xref> ... </xref> | <lista> ... </lista> | <figura> ... </figura> | <tabela> ... </tabela>)*
			</para>
			

Xref indica uma ligação para fora do documento e caracteriza-se em pseudo-XML:

			<xref>
				<legenda> ... </legenda>
				<url> ... </url>
			</xref>
			

Em cada lista temos um ou mais items que por sua vez são compostos por um ou mais parágrafos.

			<lista>
				(<item> ... </item>)+
						(<para> ... </para>)+ 
			</lista>
			

Constate-se a recursividade da especificação anterior que corresponde na prática à existência parágrafos dentro de outros parágrafos.

Nesta especificação do XML optou-se por colocar de forma identada os sub elementos de outros, terminando o elemento sempre no seu inicio, num documento XML tal não acontece no entanto, nesta fase, pareceu mais elucidativo.

Em cada tabela tem uma ou mais linhas. Cada linha de uma tabela tem uma ou mais células, o seu pseudo-XM L é:

			<tabela>
				(<linha> ...</linha>)+
						(<celulas> ... </celulas>)+ 
			</tabela>
			

Os Autores são compostos por um conjunto, não vazio, de Autor que por sua vez contêm o nome, Local, email, e url. Sendo só o nome obrigatório definir:

			<Autores>
				(<Autor> . . . </Autor>)+
						<nome> ...</nome>
						[<Local> ... </ Local>] 
						[<email> ... </ email>]
						[<url> ... </ url>] 
			</Autores>
			

O Fecho possui uma estruturação que contem a informação da redacção do jornal, composta pelos Directores, Copyright e url do jornal. É facultativa podendo estar sem qualquer conteúdo:

			<Fecho>
				<Redacao> ... </Redacao>
				[<Directores> ... </Directores>]
						(<Director> ... </Director>)+
							<nome> ... </nome>
							[<email> ... </email>]
							[<url> ... </url>]
				[<Copyright> ... </Copyright>]
				[<url> ... </url>]   							
			</Fecho>
			

Para cada um dos restantes elementos terminais não especificados o seu conteúdo é texto livre.

Nas duas secções seguintes são consideradas as descrições estruturais que suportam e validam o documento XML que estrutura o presente relatório.






5. A transformação XML - HTML

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Foi elaborada uma stylesheet em XSL que processa um documento XML, com informação variada mas organizada, e o transforma um documento informativo electrónico.

Destacam-se, de seguida, algumas funcionalidades usadas na solução final.

Pode ser efectuada uma consulta mais detalhada no Documento da StyleSheet XSL.





5.1. Abertura

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O documento começa por ser processado pela raiz, jornal, de seguida, por existir um apply-template, navega para o nó seguinte que é a abertura.

Foi definida a template que se segue para o nó abertura:

		<xsl:template match="abertura">
			<html>
				<head>
					<h1><center><xsl:value-of select="titulo"/></center></h1>
					<h3 align="right"><xsl:value-of select="Data"/></h3>
				</head>
				<body>
					<hr/><h2><a name="ind-geral">Noticias</a></h2>
					<xsl:apply-templates mode="ind-geral" select="/jornal/corpo/seccao"/>
					<xsl:apply-templates mode="ind-geral" select="/jornal/corpo/Artigo"/><hr/>
				</body>
			</html>
		</xsl:template>

É extraído o titulo do jornal e a sua data, é criado um índice de referências para todas secções e artigos do jornal.






5.2. Geração do índice

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

O índice foi criado pela instrução {gerenate-id()}, tanto para os artigos como para as secções. Com os artigos, e porque têm um atributo IdArtigo poder-se-ia ter utilizado esse identificador. Foi , então, gerado um identificador aleatório por cada nó seleccionado, esta instrução garante que em cada passagem por esse nó, o ID é sempre o mesmo. Assim o template de construção dos índices é:

		<!-- Geração do índice-->
		<xsl:template match="seccao" mode="ind-geral">
			<a href="#{generate-id()}">
			 	<h4><xsl:value-of select="titulo"/></h4></a>
			<xsl:apply-templates mode="ind-geral" select="Artigo"/>
		</xsl:template>
	
		<xsl:template match="Artigo" mode="ind-geral">
			<a href="#{generate-id()}">
				<h6><ul><li><xsl:value-of select="titulo"/></li></ul></h6></a>
		</xsl:template>

Podemos constatar a geração do título do índice com uma bookmark associada, destinado a chegar a qualquer artigo na página HTML. É então despoletada uma travessia, por xsl:apply-templates mode="ind-geral" select="Artigo" para recolher os títulos dos diferentes artigos, de forma similar se passa para as secções.






5.3. Artigo

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Para completar a interacção do índice com os artigos referenciados, é considerado o modelo seguinte, note-se que para as secções é similar:

		<!--Template para processar Artigos-->
		<xsl:template match="Artigo">
			<h2>
				<a name="{generate-id()}">
					<xsl:value-of select="titulo"/>
				</a>
			</h2>
			<p/><h6><xsl:value-of select="subtitulo"></xsl:value-of></h6>
			<h6><xsl:value-of select="Data"></xsl:value-of></h6>
			<p><xsl:apply-templates/></p>
		  	<address>
              		<center>
				  <table width="550">
					<tbody>
					  <tr>
						<xsl:if test="count(preceding-sibling::Artigo)>0">				
							<td align="left">[<a href="#{generate-id(preceding-sibling::Artigo[1])}">Artigo Anterior</a>]</td>
						 </xsl:if>	
							<td align="center">[<a href="#ind-geral">Voltar ao Inicio</a> ]</td>
						<xsl:if test="count(following-sibling::Artigo)>0">
						 	<td align="right">[<a href="#{generate-id(following-sibling::Artigo[1])}">Artigo Seguinte</a>]</td>
						 </xsl:if>
					  </tr>
			 		 </tbody>
					</table>
				   </center>
				</address>
				<hr  align="center" size="2" width="50%"/>
				<br/>
			</xsl:template>

No índice para o artigo por questões de apresentação identou-se, utilizando as instruções "ul" e "li".

Dado que cada artigo possui obrigatoriamente um título, este constitui o elemento capturado pelo modelo, extraindo-se o conteúdo do elemento título, associando-se-lhe uma bookmark.

De modo a disponibilizar uma forma de retorno ao índice, à navegação para os artigos seguinte e anterior são também construídas hiperligações que ficam associadas a Artigo Anterior; Voltar ao Inicio e Artigo Seguinte. De notar que as opções de Artigo Seguinte e Artigo Anterior só existem quando existirem, respectivamente, mais/menos artigos nessa secção.






5.4. Processamento dos elementos Figura

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Foram criados dois templates para o tratamento das imagens na página HTML. O template genérico para figuras:

	<!--Template para processar todas as Figuras com excepção das inseridas num paragrafo -->
	<xsl:template match="figura">
		<p/>
		<xsl:choose>
			<xsl:when test="Imagem/@Posicao = 'right'">
				<h4 align="right"><img src="{Imagem/@path}" alt=""/></h4>
				<h4 align="right"><xsl:value-of select="legenda"/></h4>
			</xsl:when>
			<xsl:when test="Imagem/@Posicao = 'left'">
				<h4 align="left"><img  src="{Imagem/@path}" alt=""/></h4>
				<h4 align="left"><xsl:value-of select="legenda"/></h4>
			</xsl:when>
			<xsl:when test="Imagem/@Posicao = 'middle'">
				<h4 align="center"><img src="{Imagem/@path}" alt="" /></h4>	
				<h4 align="center"><xsl:value-of select="legenda"/></h4>
			</xsl:when>
			<xsl:otherwise>		
				<h4 align="center"><img src="{Imagem/@path}" alt="" /></h4>		
				<h4 align="center"><xsl:value-of select="legenda"/></h4>	
			</xsl:otherwise>			
		</xsl:choose>
	</xsl:template>

A instrução xsl:choose só foi colocada porque nao se conseguiu que a instrução img ou o h4 implementassem o alinhamento que se pretendia atribuindo ao align o conteúdo do atributo Posicao. Assim o posicionamento da figura, indicado na instância XML pela parametrização do atributo Posicao, é obtido com a instrução h4. O atributo path definido na instância XML indica o nome do ficheiro, com o caminho completo ou não. Associado ao elemento imagem poderá haver uma legenda que será colocada a seguir à imagem e na mesma orientação.

O segundo template trata as imagens que são definidas dentro de um paragrafo. Tal permite que o texto do paragrafo fique orientado de acordo com a orientação especificada para a imagem. As imagens ficam assim embebidas nos parágrafos.

	<!--Template para processar as figuras inseridas num paragrafo, tal permite embeber a figura no texto.-->
	<xsl:template match="para/figura">
		<xsl:choose>
		  <xsl:when test="Imagem/@Posicao = 'right'">
			<h4 align="right"><img  align="right" src="{Imagem/@path}" alt=""/></h4>
			<h4 align="right"><xsl:value-of select="legenda"/></h4>
		 </xsl:when>
		<xsl:when test="Imagem/@Posicao = 'left'">
			<h4 align="left"><img  align="left" src="{Imagem/@path}" alt=""/></h4>
			<h4 align="left"><xsl:value-of select="legenda"/></h4>
		 </xsl:when>
		 <xsl:when test="Imagem/@Posicao = 'middle'">
			<h4 align="center"><img align="middle" src="{Imagem/@path}" alt="" /></h4>		
			<h4 align="center"><xsl:value-of select="legenda"/></h4>
		 </xsl:when>
		 <xsl:otherwise>		
			<h4 align="center"><img align="middle" src="{Imagem/@path}" alt="" /></h4>		
			<h4 align="center"><xsl:value-of select="legenda"/></h4>	
		 </xsl:otherwise>			
		</xsl:choose>
	</xsl:template>

É um template em tudo idêntico ao anterior só não tem um paragrafo antes de ser processado.






5.5. Referências Internas

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Para criar links dentro do documento utilizou-se:

		<xsl:key name="refArtigo" match="Artigo" use="@IdArtigo"/>

Onde o atributo IdArtigo é definido como chave para informação referenciada e é parametrizado na instância XML.

Podemos verificar a sua utilização no seguinte template:

	<!--Template para processar um link dentro do documento-->
	<xsl:template match="ref">
		<xsl:variable name="contref" select="key('refArtigo',@destino)"/>
		<a href="#{generate-id($contref)}"><b>[<xsl:value-of select="key('refArtigo',@destino)/titulo"/>]</b></a>
	</xsl:template>

Procurando pela chave, IdArtigo, identifica-se o artigo para o qual se pretende criar uma hiperligação. Como a instrução {gerenate-id()} gera sempre a mesma referência para o mesmo elemento, o link foi criado com essa instrução fornecendo-lhe o elemento obtido pela busca na tabela.






5.6. Templates Vazios

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|

Foram criados alguns templates vazios, para evitar aparecerem no documento, sem qualquer formatação, contéudos repetidos, pela aplicação do xsl:apply-templates recursivamente. A solução que se desenhou foi:

	<!-- os template vazios para cada elemento seguinte é para evitar a duplicação dos mesmos-->
	<xsl:template match="abertura/titulo"/>
	<xsl:template match="seccao/titulo"/>
	<xsl:template match="seccao/subtitulo"/>
	<xsl:template match="Artigo/titulo"/>
	<xsl:template match="Artigo/subtitulo"/>
	<xsl:template match="Artigo/Data"/>









Epílogo


Este projecto permitiu concretizar e consolidar conhecimentos transmitidos em Processamento Estruturado de Documentos, do Mestrado/Curso de Especialização em Informática do ano lectivo 2002/2003.

Foram elaborados os seguintes documentos: estruturação de documentos em XML, produção de DTD's e Schemas para validação de documentos, construção e aplicação de transformações XSL a documentos XML.

Futuramente poder-se-ia contemplar a criação de tabelas aninhadas e hiperlinks internos não só para os artigos mas também para as secções, figuras e tabelas. Contudo, tal não foi implementado neste projecto pois o que foi contemplado já permitiu exercitar e conhecer melhor estas ferramentas, salientando alguns pontos mais importantes, ao invés de estar a detalhar todas as funcionalidades indicadas.

| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|





Glossário


CDATA: Bloco de um documento XML, onde a anotação é ignorada. Usado neste documento nas secções onde são apresentados excertos de código para exemplo.

EDI: Electronic Data Interchange

MICEI: Mestrado de Informática / Curso de Especialização em Informática

PED: Processamento Estruturado de Documentos

UM: Universidade do Minho

XML: Extended Markup Language

XSD: Extensible Stylesheet Definition

XSL: Extensible Stylesheet Language

XSLT: Extensible Stylesheet Language for Transformations






| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|





Bibliografia


[dtid01] - Elliote, Harold , XML Bible , IDG Books , 2º edição , 2001

[ped02] - Ramalho, José C. L. , Apontamento da cadeira de PED 2002/03 , Dep. Informática - Univ. Minho , Braga , pág. String , http://www.di.uminho.pt/~jcr/

[zvon] - Nic, Miloslav , XSLT Reference , www.zvon.org






| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|