Relatório do trabalho de PED

Micei 2001/2

Eurico Alexandre Teixeira Borges - eurico.borges@sonae.pt

Departamento de Informática, Universidade do Minho
4710-057 Braga, Portugal

Julho 2002


Agradecimentos:

Agradeço ao professor JCR pelos conhecimentos transmitidos e pelo interesse incutico no XML, XSLT e tecnologias adjacentes.

Índice Remissivo

1. Indrodução
2. Desenvolvimentos
2.1. O XML Schema
2.2. As transformações XSLT
3. Conclusão
Bibliografia

1. Indrodução

[Índice]

Este relatório documenta o trabalho desenvolvido no âmbito da disciplina de Processamento Estruturado de Documentos. Disciplina leccionada pelo professor Doutor José Carlos Ramalho (http://www.di.uminho.pt/~jcr) ao Curso de Especialização/Mestrado em Informática na Universidade do Minho

O objectivo do trabalho é o desenvolvimento de um sistema constituído por uma estrutura documental e de apresentação para relatórios de pré-tese. Esta estrutura foi feita e é sobre ela que este mesmo relatório foi desenvolvido e apresentado.

O sistema é constítuido por três componentes distintas:

Nas secções seguintes teremos uma descrição mais detalhada do XMLSchema e da Style Sheet desenvolvida com XSLT

2. Desenvolvimentos

[Índice]

Os desenvolvimentos foram feitos utilizando o XML Spy v4.4. É de salientar o grande aumento de produtividade que esta ferramenta trouxe. Uma ajuda imprescindível sem dúvida alguma.

Houve um estudo prévio de todo o material fornecido pelo professor [Ram02] . Os enúmeros exemplos e exercícios forneceram bastantes ideias para o trabalho. Infelizmente o HTML não era uma linguagem como que eu estivesse muito familiarizado. A utilização de [Wer99] foi extremamente útil para rapidamente entrar nesta linguagem. Igualmente útil foi a ajuda dada pelo livro [Kay01] através de exemplos e como referência da correcta sintaxe dos comandos XSLT.

2.1. O XML Schema

[Índice]

O Schema foi criado tendo como base algumas sugestões dadas pelo professor JCR. Houve algumas dúvidas na sua construção. Em situações onde deveriamos ter sequências a pergunta colocada foi: Uma sequência de vários elementos X ou várias sequências de um elemento X. Usei aquele que mais correcto me pareceu: uma sequência de vários elementos.

Foram criados tipos de dados complexos para fazer um certo encapsulamento dos elementos. Tendo estes tipos definidos torna-se mais fácil a sua manutenção e reutilização em diferentes partes da estrutura. Os tipos complexos são os seguintes:

Na figura que se segue temos uma visão geral do Schema criado.

Visão geral do elemento Relatório

A documentação completa do Schema pode ser consultada no ficheiro EBdocSchema.

2.2. As transformações XSLT

[Índice]

O estudo tanto para o exame de PED como para a realização deste trabalho foi uma fascinante descoberta de uma nova linguagem. Como Michael Kay a descreve no seu livro [Kay01] XSLT é o equivalente ao "SQL para a Web". É sem dúvida uma linguagem estremamente poderosa.

De seguida temos um exemplo de uma tabela. A construção foi feita de modo a que o contéudo de uma célula da tabela seja do tipo Tparagrafo. Tudo o que se pode fazer num parágrafo pode ser feito na tabela incluíndo uma tabela dentro de uma tabela. A única execepção é no título das tabelas não se pode mudar o tipo de letra para carregado pois ela já é pré-definida de início como carregado.
Tabela 1 Cabeçalho 1 Tabela 1 Cabeçalho 2
Esta é a coluna 1 da linha 1 da tabela 1 Esta é a coluna 2 da linha 1 da tabela 1 e também tenho uma segunda tabela nesta célula.
tab 2 cab 1 tab 2 cab 2
tab 2 l1 c1 tab 2 l1 c2
tab 2 l2 c1 tab 2 l2 c2
Estou na linha 2, coluna 1 da tabela 1 E finalmente estou na coluna 2 da linha 2 da tabela 1. Posso na mesma escrever os itálicos e sublinhados e os carregados do costume. Já agora, vai uma listazinha de itens:
  • aqui está o primeiro item
  • e porque não um segundo.

Esta ideia para as tabelas veio-me durante a noite. Ás vezes a falta de sono faz disto...

Outra coisa que deu gosto fazer, e talvez uma pequena insignificância, foi o controlo das páginas referenciadas numa entrada bibliográfica. Uma pequena coisa sem dúvida, o dizer Página ou dizer Páginas e o colocar da vírgula a separar as diversas páginas e não a colocar após a última página referenciada. Pode ser visto o exemplo nas duas entradas bibiográficas fictícias [XPag01] e [XPag02] que criei só para demonstrar o efeito. Já agora só mais um pequeno pormenor, todas as entradinhas bibliográficas estão ordenadas.

Ainda não vimos a formatação para código de programas. Eis então um pequeno exemplo :


	<xsl:template match="paginas">
		<xsl:choose>
			<xsl:when test="not(refpaginas)">
				<xsl:if test="count(pagina)=1">
					<xsl:text>Página </xsl:text>
				</xsl:if>
				<xsl:if test="count(pagina)>1">
					<xsl:text>Páginas </xsl:text>
				</xsl:if>		
			</xsl:when>
			<xsl:otherwise>
					<xsl:text>Páginas </xsl:text>			
			</xsl:otherwise>	
		</xsl:choose>
		<xsl:for-each select="child::*">
			<xsl:apply-templates select="."/>
			<xsl:if test="not(position()=last())">, </xsl:if>
		</xsl:for-each>
	</xsl:template>
	
	<xsl:template match="refpaginas">
		<xsl:apply-templates select="paginicial"/>
		<xsl:text>-</xsl:text>
		<xsl:apply-templates select="pagfinal"/>
	</xsl:template>
	

Sempre que possível usei o <xsl:apply-templates ... /> em vez do <xsl:value-of .../> para tornar o código mais genérico e dar espaço de manobra para acomodar alterações a nível da estrutura do XML.

3. Conclusão

[Índice]

Deu gozo fazer este trabalho. Também fui fazer o exame mas, é extremamente não produtivo ter de escrever um programa no papel. É surprendente como com tão poucas linhas de código XSLT se consegue fazer tanto. Sempre que fazia mais uma coisinha só pensava no código em C ou em Java que teria de usar para fazer a mesma coisa. Como já referi o HTML não era meu forte e fazer este trabalho foi a forma de aprofundar mais um pouco.

Gostei.

Eurico Borges

Bibliografia

[Índice]

[Kay01] Michael Kay, "XSLT - Programmers's Reference", 2ª Edição, Editado por Wrox Press, 29 S. LaSalle St, Suite 520, Chicago, Illinois 60603, USA, 2001, http://www.wrox.com

[Ram02] José Carlos Ramalho, " XML, XPath, NameSpaces, XSLT - Notas e apontamentos de Processamento Estruturado de Documentos", Departamento de Informática, Universidade do Minho, 4710-057 Braga, Portugal, 2002, Páginas 95, 88-90, 20, 33, http://www.di.uminho.pt/~jcr

[Wer99] Kevin Werbach , " THE BARE BONES GUIDE TO HTML", 4ª Edição, Fevereiro 1999, http://werbach.com/barebones/

[XPag01] Eurico Borges, " Uma página", Página 33

[XPag02] Eurico Borges, " Várias páginas", Páginas 20, 33, 88-90, 95