Processamento Estruturado de Documentos - Jornal Electrónico

Processamento Estruturado de Documentos - Jornal Electrónico

Relatório do trabalho prático - MICEI 2002/03


Autores

Nuno Sousa
nuno.r.sousa@iol.pt -

Orientadores

José Carlos 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







Dedicatória

Dedico este trabalho à minha familia que sempre me tem apoiado nos bons e maus momentos, profissionais e pessoais.

Agradecimentos

Gostava de agradecer ao professor J.C. Ramalho pela disponibilidade em tirar todas as duvidas que foram surgindo ao longo da elaboração do trabalho.

Gostava também de agradecer aos meus colegas do MICEI de 2003, que me ajudaram fazendo criticas constructivas e dando sugestões pertinentes.

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

O trabalho pretende definir uma estrutura , passível de se poder criar um jornal electrónico. Esse jornal deve conter secções e estas contêm artigos. Cada artigo pode ser uma lista de parágrafos, pode conter imagens, listas, etc.

Ao longo da elaboração deste trabalho tive a preocupação de criar um schema relactivamente genérico para possiblitar criar stylesheets para diversos formatos de jornais electronicos.

Resumo

O ficheiro XML, validado pelo schema, juntamente com o processamento via XSLT, permite obter uma boa performance no processamento de informação vindo das mais diversas fontes. Esta é uma das diversas vantagens da utilização destas tecnologias que, hoje em dia já se tornam indispensáveis na criação de conteudos de hipertexto.

Abstract

Nowadays, everybody needs to interact with information of many kinds. It is necessary to have technologies that may help us to process this information efficiently. The XML, Schema definition, and XSLT transformation technology are a good market option to process different types of information because it gives a way of easily create structured documents for many different platforms and systems.

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






Índice de Conteúdos

1. Acerca do Schema

1.1. Tipos complexos

1.1.1. Tparagrafo

1.1.2. Tlista

1.1.3. Tfigura

1.1.4. Tentidade

1.1.5. Tlink

1.2. Tipos simples

1.2.1. TipoDestaque

1.2.2. TipoLista

1.2.3. TipoFormato

1.2.4. TipoAlinhamento

2. As transformações XSLT

2.1. Templates re-utilizados

2.2. Testes aos elementos facultativos

2.3. Referencias internas

2.4. Navegação no documento

2.5. 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, depois de consultar as opiniões de alguns dos meus colegas doMICEI 2003 e depois de algumas consultas a exemplos de trabalhos dos anos transactos. Uma vez que um jornal electrónico pode ter diversas variantes, foram acrescentados alguns elementos facultativos, que podem ou não fazer parte do 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 Jornal, que é subdividido em 3 secções. A abertura que inclui dados do titulo, directores (caso existam), data do jornal e a imagem da primeira página (caso seja utilizada). O corpo é composto pelas várias secções que componhem um jornal (artigos, imagens,etc.). Finalmente temos o fecho que como o proprio nome indica contém os elementos de fecho do jornal, os directores de redacção e o copyright (caso seja usado).

A definição do Schema

Estrutura inicial do schema do trabalho.






1.1. Tipos complexos

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

Em seguida são apresentados os tipos complexos de dados utilizados no trabalho.





1.1.1. Tparagrafo

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

Este tipo complexo paragrafo é um dos principais elementos pois é o mais utilizado na anotação dos conteudos. A figura seguinte dá uma ideia dos sub-elementos que compoem este tipo complexo. Com esta estrutura definida, podemos aceder aos principais tipos de informação usados (texto, imagens, links, etc.). O tipo é constituido por uma choice de vários elementos que podem ser utilizados, podendo até ser nulo, dando um paragrafo em branco.

Este tipo complexo muito utilizado nas noticias, mas também pode ser utilizado por outros elementos, poe ex: nas listas.

Tparagrafo

Estrutura do tipo complexo: Tparagrafo.







1.1.2. Tlista

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

Este elemento serve para fazer o tratamento de todas as listas existentes no documento.

De notar que este elemento é composto por vários itens e estes por vários paragrafos. Mais uma vez se faz uso da modularidade para reutilização de informação.

Tentidade

Estrutura do tipo complexo: Tlista.







1.1.3. Tfigura

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

Em todo o documento são utilizadas varias vezes os elementos figura para tratamento de imagens. Nesse sentido houve a necessidade de criar este tipo complexo.

No tratamento do elemento Grafico foram utilizados alguns atributos extra.O path para indicar o caminho onde se situa a imagem, o formato que especifica o tipo de ficheiro, o alinhamento para definir a localização horizontal da figura e por fim a tooltip para definir o comentario da imagem.

Tfigura

Estrutura do tipo complexo: Tlista.







1.1.4. 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 modular podendo-se utilizar o mesmo tipo para diversos elementos. É este o caso de Tentidade, o qual foi utilizado da definição de Autores e Directores, por tratar da mesma informação.

No elemento email, dentro de Tentidade foi usado em pattern para verificar a forma do sintáctica do email e permitir apenas endereços bem formados.

Tentidade

Estrutura do tipo complexo: Tentidade.







1.1.5. Tlink

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

Este é mais um exemplo de modularidade. Este tipo complexo, serve para caracterizar os links de hipertexto.

Tlink

Estrutura do tipo complexo: Tlink.








1.2. Tipos simples

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

Foram criados alguns tipos simples de dados para tratar os atributos de certos elementos.





1.2.1. TipoDestaque

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

Este tipo simples foi criado com a finalidade de possibilitar a enfatização do texto de um paragrafo. Esta ênfase pode ser feita através dos tipos carregado, italico ou sublinhado.


<xs:simpleType name="TipoDestaque">
  <xs:annotation>
    <xs:documentation>Tipo simples para o atributo de destaque</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:enumeration value="carregado"/>
    <xs:enumeration value="italico"/>
    <xs:enumeration value="sublinhado"/>
  </xs:restriction>
</xs:simpleType>







1.2.2. TipoLista

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

Este tipo foi criado para possibiltar a criação de listas de diversos tipos. Os tipos possiveis são numerada para listas numeradas, bola para listas cujos items são bolas e quadrado quando os items começam por um pequeno quadrado.


<xs:simpleType name="TipoLista">
  <xs:annotation>
    <xs:documentation>Tipo simples para as listas: numerada ou não numerada</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:enumeration value="numerada"/>
    <xs:enumeration value="bola"/>
    <xs:enumeration value="quadrado"/>
  </xs:restriction>
</xs:simpleType>







1.2.3. TipoFormato

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

Neste tipo simples podemos definir os tipos de formatos de ficheiros de graficos. Estão contemplados os principais tipos de ficheiros gráficos: gif, jpeg, png e por fim bmp.


<xs:simpleType name="TipoFormato">
  <xs:annotation>
    <xs:documentation>Tipo simples que conta a lista de formatos possiveis para as imagens</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:enumeration value="gif"/>
    <xs:enumeration value="jpeg"/>
    <xs:enumeration value="png"/>
    <xs:enumeration value="bmp"/>
  </xs:restriction>
</xs:simpleType>







1.2.4. TipoAlinhamento

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

Este tipo foi definido com o proposito de facultar o alinhamento de imagens na página. Existem tres tipos de alinhamento possiveis: centrada, direita e esquerda.


<xs:simpleType name="TipoAlinhamento">
  <xs:annotation>
    <xs:documentation>Tipo simples para definir o alinhamento do texto</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:enumeration value="centrada"/>
    <xs:enumeration value="direita"/>
    <xs:enumeration value="esquerda"/>
  </xs:restriction>
</xs:simpleType>









2. As transformações XSLT

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

Como sabemos, o XML é usado actualmente para representar informação, quer para a internet quer para aplicações ditas empresariais. No entanto, o documento XML consiste num texto anotado que não é apropriado para ser lido. Para que isso seja possivel, é necessário haver uma tecnologia que faça desaparecer as marcas ou anotações substituindo pela transformação apropriada. Nesse sentido existe a norma XSL que é uma linguagem de especificação de estilo. O tratamento XSLT fornece uma metodologia de transformar ficheiros XML noutros formatos de dados, incluindo linguagens de formatação.

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





2.1. Templates re-utilizados

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

Foram criados alguns templates que tiveram por finalidade serem utilizados por varios elementos fazendo assim uso da modularidade.

Neste caso, este template pode ser utilizado para apresentar os Directores do jornal na abertura mas pode também ser utilizado pelos Directores de redacção no fecho do jornal.


	<xsl:for-each select="Director">
		<xsl:value-of select="Nome"/>
		<br/>
		<small>
			<xsl:if test="Email">
				<xsl:variable name="email" select="Email"/>
				<a href="mailto:{$email}"> <xsl:value-of select="Email"/> </a>
			</xsl:if>
			<xsl:if test="Webpage">
				<xsl:text> - </xsl:text>
				<xsl:variable name="link" select="Webpage/URL"/>
				<xsl:variable name="tooltip" select="Webpage/Tooltip"/>
				<a href="{$link}" title="{$tooltip}"> 
					<xsl:value-of select="Webpage/Legenda"/>
				</a>
			</xsl:if>
		</small>
		<br/>
	</xsl:for-each>







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 pois possibilitam testar se existem valores facultativos que não estão a ser usados e facultam também expressões condicionais dos elementos.

					
	<xsl:if test="Email">
		<xsl:text> - </xsl:text>
		<xsl:variable name="email" select="Email"/>
		<a href="mailto:{$email}"> <xsl:value-of select="Email"/> </a>
	</xsl:if>
	<xsl:if test="Webpage">
		<xsl:text> - </xsl:text>
		<xsl:variable name="link" select="Webpage/URL"/>
		<xsl:variable name="tooltip" select="Webpage/Tooltip"/>
		<a href="{$link}" title="{$tooltip}"> 
			<xsl:value-of select="Webpage/Legenda"/>
		</a>
	</xsl:if>

Neste exemplo podemos testar se o campo email e webpage são utilizados e só nesse caso é apresentada informação dos mesmos.

					
	<xsl:choose>
		<xsl:when test="Grafico/@alinhamento = 'direita'">
			<div align="right">
				<p>
				<img src="{Grafico/@path}" alt="{Grafico/@tooltip}"/>
				</p>
				<xsl:value-of select="legenda"/>
			</div>
		</xsl:when>
		<xsl:when test="Grafico/@alinhamento = 'esquerda'">
			<div align="left">
				<p>
				<img src="{Grafico/@path}" alt="{Grafico/@tooltip}"/>
				</p>
				<xsl:value-of select="Legenda"/>
			</div>
		</xsl:when>
		<xsl:when test="Grafico/@alinhamento = 'centrada'">
			<div align="center">
				<p>
				<img src="{Grafico/@path}" alt="{Grafico/@tooltip}"/>
				</p>
				<xsl:value-of select="Legenda"/>
			</div>
		</xsl:when>			
	</xsl:choose>

Neste caso concreto, é feito o teste dos atributos do elemento grafico e é apresentada a informação da imagem de acordo com os mesmos.






2.3. Referencias internas

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

Neste trabalho foi usado suporte para tratamento de referencias internas.

De notar que foi necessário criar uma xsl:key para obter os IDs dos artigos.


	<xsl:key name="refArtigo" match="/Jornal/Corpo/Seccao/Artigo" use="@id"/>					
	
	<xsl:variable name="ref" select="@destino"/>
	<a href="#{generate-id(/Jornal/Corpo/Seccao/Artigo[@id=$ref])}">
		<b>Artigo relacionado - [ <xsl:value-of select="key('refArtigo',@destino)/Titulo"/> ]</b>
	</a>







2.4. Navegação no documento

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

Neste documento jornal, existe a possibilidade de navegar de artigo para o artigo seguinte (ou anterior) dentro da mesma secção. Pode-se ainda voltar à capa do jornal ou ao indice das noticias.

					
	<xsl:if test="count(preceding-sibling::Artigo)>0"> 
		<a href="#{generate-id(preceding-sibling::Artigo[1])}">Artigo Anterior</a> |
	</xsl:if>
	<a href="#inicio">Voltar Inicio</a> | 
	<a href="#ind-geral">Indice Noticias</a>
	<xsl:if test="count(following-sibling::Artigo)>0">
		| <a href="#{generate-id(following-sibling::Artigo[1])}">Artigo Seguinte</a>
	</xsl:if>				







2.5. 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.

O indice é elaborado em função das secções existentes e também de acordo com os artigos.

Houve no entanto a necessidade de se ter em atenção aos contéudos que apareceram repetidos. Por essa razão, foram incluidas algumas linhas com templates vazios de modo a evitar esse problema.

Vejamos o código de criação de indices para as secções.

					
	<!-- Geração do índice-->
	
	<xsl:template match="Seccao" mode="ind-geral">
			<h4>
				<p>
					<a href="#{generate-id()}"> 	<xsl:value-of select="Titulo"/></a>
				</p>
			</h4>
			<h5>
				<xsl:value-of select="Subtitulo"/>
			</h5>
			<xsl:apply-templates mode="ind-geral" select="Artigo"/>
	</xsl:template>
	
	<xsl:template match="Corpo/Seccao/Titulo"/>

	<xsl:template match="Corpo/Seccao/Subtitulo"/>

Repare-se por exemplo na instrução xsl:template match="Corpo/Seccao/Titulo" justamente para eliminar os conteúdos de texto na geração do índice.








Epílogo


De certa forma, penso que este trabalho se mostrou bastante util pois serviu para aprender novos conceitos de tecnolgias ligadas ao processamento de documentos. Os apontamentos da disciplina de PED e o livro de XML do professor J.C. Ramalho mostraram-se como essenciais na compreensão dos novos conceitos de XML, XSL e tecnologias associadas. Penso que com a massificação do uso da internet, surge a necessidade de haver tecnologias que possibilitem o processamento de informação vinda das mais diversas fontes. As tecnologias, estudadas nesta cadeira possibilitam dotar os alunos de conhecimentos essenciais hoje em dia, na criação de conteudos para a internet e não só.

Um possivel melhoramento deste trabalho passaria por criar documentos a partir de um repositório de dados e desenvolver outros schemas e outras stylesheets para novos formatos de jornais electrónicos.

Gostaria também de lembrar que na elaboração deste documento, foi usado um ficheiro XML, validado por um schema, criado pelo aluno Guilherme Teixeira, nº 5082 do MICEI 2001/2002.

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





Glossário


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


[xml01] - Ramalho, José C. , XML & XSL, da teoria à pratica , FCA , 1º edição , FCA - Editora de informática , Rua D. Estefânia, 183-1º Esq -1000-154 Lisboa , Outubro 2002 , FCA Editora , 9-727223-47-8

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






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