Schema e Stylesheet para tratamento de teses em XML

Schema e Stylesheet para tratamento de teses em XML

Relatório inserido nos trabalhos práticos da cadeira de PED do MICEI 2001/02


Autores

GuilhermeTeixeira
guilherme.teixeira@neoplastica.com - http://www.homepage.com

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

Setembro de 2002





| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|
(c) copyright 2002 - Não é permitida a reprodução de conteúdos deste trabalho, sem autorização expressa do autor, no entanto a título promocional estão abertas condições negociáveis para determinadas partes do conteúdo :-)







Dedicatória

Dedico o trabalho, ao professor José Ramalho, por nos ter incutido o espírito da coisa!, e por espalhar o nome da Universidade do Minho além fronteiras, com as valiosas contribuições do seu grupo de trabalho.

Agradecimentos

Á empresa Altova por nos ter disponibilizado o software de trabalho, aos incógnitos que publicam conteúdos pedagógicos na net sobre XML, sem qualquer fim lucrativo.

Fora esta palete de pessoal, só posso agradecer ao people do mestrado, pelo excelente relaccionamento, e ao professor (+ 1 vez) pelas oportunidades criadas.

assinatura

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





Prólogo

O trabalho apresentado contempla um schema, uma stylesheet, e a instância do schema em XML. A instância é o próprio relatório.

O trabalho pretende definir uma estrutura espedita e funcional, passível de ser aplicada a um trabalho descritivo, como por exemplo uma tese. 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 a potência destas linguagens.

Ficam neste trabalho em aberto algumas ideias, a serem aplicadas mais tarde a quando da escrita da tese, ou pre-tese, porque na verdade o facto de manter o documento num formato exportável para vários formatos, para várias plataformas, e anotado, garante qualquer tratamento no futuro, constituindo uma vantagem muito importante a ter em conta.

Resumo

O XML, validado pelo schema, juntamente com o potente processamento via XSLT, permite dispor de facilidades acrescidas no tratamento de informação de uma forma standart e partilhável. Estas são, além de outras evidentes vantagens, as que abrem caminho a uma mais que provável evolução desta tecnologia nos círculos comerciais e de investigação. Outro facto importante, diz respeito à substituição de interfaces EDI por XML em aplicações bussiness oriented.

Abstract

The XML, Schema definition, and XSLT transformation technology turns the information able to flow over different platforms and systems in a standard and a shared way. These are some of the advantages which are beginning to open new opportunities and applications in the commercial and business market, as in the research centres. For instance, solutions for implement business interfaces were the legacy EDI solutions were used, are being changed to XML technologies.

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






Índice de Conteúdos

1. Acerca do Schema

1.1. Tipos complexos

1.1.1. Tentidade

1.1.2. Tparagrafo

1.1.3. Tlink

2. As transformações XSLT

2.1. Templates "by call"

2.2. Testes aos elementos facultativos

2.3. Glossário e Bibliografia

2.4. Geração do índice




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






1. Acerca do Schema

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

O schema apresentado teve origem em algumas anotações do professor, e algumas exemplos de teses consultadas. Como a organização de uma tese, tem eventualmente algumas variantes, foram acrescentados elementos facultativos, que podem ou não integrar o documento.

Alguns deles têm tratamento com a função xsl:if test="", justamente para testar se esses elementos facultativos existem ou não.

Toda a documentação detalhada do schema, pode ser consultada no link seguinte: Documentação do schema . Toda a documentação do schema está anotada, de onde se poderá obter mais informações localizadas.

A imagem seguinte, apresenta apenas os primeiros elementos do schema. O elemento raíz é o relatório, caracterizado por 4 secções. A identificação inclui dados como o título e os autores do trabalho, a abertura define os textos de prólogo e resumos, o corpo inclui as secções e dentro destas os parágrafos, e finalmente o fecho que define epílogo, glosssário e bibliografia.

A definição do Schema

Estrutura inicial do schema do trabalho.






1.1. Tipos complexos

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







1.1.1. Tentidade

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

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 para diversos elementos. É este o caso de Tentidade, o qual foi utilizado da definição de autores, orientadores, instituições e editoras, por se tratar da mesma colecção de informação.

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

Tentidade

Tentidade, utilizado neste cado sob o elemento orientador.







1.1.2. Tparagrafo

| Í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. O tipo é consituido por uma choice de vários dos elementos indicados, podendo inclusivé ser nulo, dando neste caso um parágrafo em branco.

Este tipo complexo é também muito utilizado, nomeadamente no prólogo, dedicatória, resumos, secções, epílogo, etc, tudo que contenha corpo e necessite de usar os sub elementos que contém.

Tparagrafo

Estrutura do tipo complexo: Tparagrafo.







1.1.3. Tlink

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

Mais um exemplo de reutilização. Este tipo complexo, serve também para caracterizar além de urls, as figuras, aproveitando a mesma estrutura.

Tlink

Estrutura do tipo complexo: Tlink. Exemplo sobre o elemento link.









2. As transformações XSLT

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

A solução aqui apresentada, por condicionamentos vários, não foi optimizada em termos de extensão de código. No entanto ficou claro, que muito mais se pode fazer com XSLT, sendo bastante útil para perceber como se trata de uma ferramenta potente, e extrapolável a diversos âmbitos.

De seguida, destacam-se algumas funcionalidades usadas na solução final.





2.1. Templates "by call"

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

Foram criados alguns templates que por não obedecerem à estrutura do documento, foram chamados via xsl: call template. Esta solução é interessante para o caso da definição do layout. Com ela pode-se facilmente alterar ou standardizar o aspecto das páginas.

Neste pequeno exemplo, servio para chamar o menu, e standardizar espaços de separação. Vejamos o exemplo seguinte:


	<xsl:template name="menu">
		<font size="1">|
	<a href="#inicio">Ínicio</a>|
	<a href="#abertura">Abertura</a>|
	<a href="#prologo">Prólogo</a>|
	<a href="#indice">Índice</a>|
	<a href="#fecho">Fecho</a>|
	<a href="#glossario">Glossário</a>|
	<a href="#bibliografia">Bibliografia</a>|
	</font>
	</xsl:template>

O template é chamado desde a instrução <xsl: call template name=menu"> em qualquer parte do código.






2.2. Testes aos elementos facultativos

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

Os elementos xsl: if teste, ou xsl: choose, são muito úteis neste caso, pois permitem-nos aplicar tratamento a elementos facultativos. O excerto de código seguinte indica o tratamento dado ao nome do autor na bibliografia, para o caso de ter ou não apelido.

					
	<xsl:template match="autores">
		<xsl:if test="autor/sobrenome">
			<xsl:value-of select="autor/sobrenome"/>
		<xsl:text>, </xsl:text>
		</xsl:if>
		<xsl:value-of select="autor/nome"/>
	</xsl:template>

Desta forma o apelido e a vírgula, só aparecem se o apelido existir.






2.3. Glossário e Bibliografia

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

Nestas aplicações, foram gerados os links, e os respectivos anchors nas entradas do glossário. Para facilitar a entrada de dados, não foi acrescentado nenhum ID no glossário, apenas se fazendo o link pelo acrónimo utilizado.

Desta parte, desta-se a utilização do xsl:sort para a ordenação do Glossário por ordem alfabética.

					
	<xsl:template match="glossario">
			<xsl:apply-templates select="itemglo">
			<xsl:sort select="nome"/>
			</xsl:apply-templates>
	</xsl:template>

Esta função apenas pode ser utilizada dentro de instruções xsl: for-each, ou como é o caso, dentro de xsl:apply-templates.






2.4. Geração do índice

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

A principal ferramenta utilizada na geração do índice foi a instrução {gerenate-id()} com a qual é gerado um identificador aleatório por cada nó seleccionado, sendo garantido que em cada passagem por esse nó, o ID é sempre o mesmo. Assim foi relativamente fácil construir o índice, tratando-se do layout e pouco mais.

No entanto teve de ser dada atenção aos contéudos que apareceram repetidos, pela aplicação do xsl:apply-templates recursivamente. Por essa razão, foram incluidas algumas linhas com templates vazios de modo a evitar esse problema.

Vejamos o código correspondente.

					
	<!-- Geração índice de conteúdos -->
	
	<xsl:template match="seccao" mode="indice">
		<a href="#{generate-id()}">
			<xsl:number level="multiple"/>
			<xsl:text>.  </xsl:text>
			<xsl:value-of select="titulo"/>
		</a>
		<br/>
		<xsl:apply-templates mode="indice"/>
	</xsl:template>
	<!-- retirar conteúdo das secções -->
	<xsl:template match="text()" mode="indice"/>

Repare-se na instrução xsl: template match="text()" justamente para eliminar os conteúdos de texto na geração do índice.








Epílogo


De uma forma geral, este trabalho foi uma agradável surpresa, ultrapassando largamente as espectativas criadas. Os contrangimentos habituais, limitam no imediato o aprofundamento dos conhecimentos na área, na certeza porém, de estar aberta a porta para a utilização da tecnologia em variadas aplicações no dia-a-dia, algumas delas já em estudo

O relatório em si, serviu antes de mais como instância do próprio trabalho, e pretendeu apenas salientar alguns pontos mais importantes, ao invés de estar a detalhar todas as funcionalidades indicadas.

Algumas ideias futuras passam por aplicar esta tecnologia à geração a armazenamento de notas técnicas num repositório de conhecimento, e desenvolver este schema e styleshhet de modo a contemplar mais conteúdos, com vista a sua utilização nas teses e pré-teses.

| Í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

XSLT: Extensible Stylesheet Language for Transformations






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





Bibliografia


[dtid01] - Tidwell, Doug , XSLT, Mastering XML Tranformations , O'Reilly , 1º edição , O'Reilly & Associates, Inc , Sebastopol , Agosto 2001 , , 0-596-00053-7

[ped02] - Ramalho, José C. L. , Apontamento da cadeira de PED 2001/02 , 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|