Processamento Estruturado de Documentos - Jornal Electrónico

Processamento Estruturado de Documentos - Jornal Electrónico

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


Autores

Celeste Pinto
celpinto@netcabo.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, nomeadamente o meu marido, que sempre me tem apoiado nos bons e nos maus momentos, profissionais e pessoais.

Agradecimentos

Quero ainda agradecer ao professor J.C. Ramalho pela sua prontidão no esclarecimento todas as dúvidas que foram surgindo na elaboração deste projecto.

Gostava também de agradecer aos meus colegas do MICEI de 2003, que em discussões muitos construtivas, contribuiram com sugestões e esclarecimentos importantes.

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

Este projecto pretende definir uma possível estrutura para a criação de um jornal electrónico. O jornal é constituído por um cabeçalho, um corpo e um fecho.

No cabeçalho é apresentada a identificação do Jornal, é ainda possível definir a data, a hora e os responsáveis pelo respectivo jornal, bem como imagens de publicidade.

O corpo é constítuido por uma ou mais secções. Por sua vez cada secção tem um nome, um ou mais artigos e pode ainda conter subsecções. Os artigos têm obrigatóriamente um título e um corpo de artigo e podem ainda ter subtítulos, data, hora, um resumo da notícia apresentada, uma ou mais figuras, o(s) autor(es) e referências a outros artigos relacionados com o assunto em causa. De salientar que o corpo do artigo é constituído por um ou mais parágrafos e subtítulos de subartigos que se pretendam introduzir.

O fecho é constituído pela redacção onde se apresentam os responsáveis pelas várias áreas do jornal, o copyright e links de interesse que os responsáveis entendam apresentar, nesta divisão do jornal também é possível inserir imagens para publicidade, por exemplo..

Tive a preocupação de tentar criar um schema relactivamente genérico para permitir a criação de jornais electronicos com vários formatos.

Resumo

O XML, validado pelo schema, juntamente com o processamento via XSLT, permite a utilização de facilidades acrescidas no tratamento de informação de uma forma standart, facilmente partilhável e reutilizável. Estas são, além de outras vantagens, as que abrem caminho à evolução desta tecnologia



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

1.1.3. TFIGURA

1.1.4. TSECCAO

1.2. Tipos simples

1.2.1. TFORMATO

1.2.2. TALINHAMENTO

2. As transformações XSLT

2.1. Templates "by call"

2.2. Templates re-utilizados

2.3. Teste dos elementos facultativos

2.4. Referencias internas

2.5. Navegação no documento

2.6. 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 resulta de algumas anotações do professor, de várias consultas efectuadas em jornais elect´ronicos e ainda das opiniões de alguns dos meus colegas doMICEI 2003. Devido à existência de diversas estruturas observadas, e dado que os jornais electrónicos podem apresentar diversas variantes, existem vários elementos facultativos que podem ou não integrar o documento. Alguns desses elementos têm um tratamento preliminar com a utilização da função xsl:if test="", justamente para validar a existência dos referidos elementos.

A documentação do schema, pode ser consultada com mais pormenor no seguinte link: Documentação do schema . Toda a documentação do schema está anotada, assim poderão obter-se informações mais localizadas.

A imagem seguinte, apresenta apenas os primeiros elementos do schema. O elemento raíz é o Jornal, que é subdividido em 3 secções. O cabeçalho que inclui dados do nome do jornal, directores (caso existam), data e hora do jornal, bem como imagens de publicidade (caso seja utilizada). O corpo é composto pelas várias secções (e possíveis subsecções) que fazem parte de um jornal (contém 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, o copyright e links de interesse (caso sejam usados). É possível ainda colocar imagens para publicidade, por exemplo.

A definição do Schema

Estrutura inicial do schema.






1.1. Tipos complexos

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







1.1.1. TPARAGRAFO

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

Este tipo complexo parágrafo é um dos principais elementos porque é o mais utilizado na anotação dos conteúdos. A figura seguinte apresenta os sub-elementos constituintes deste tipo complexo. Com estrutura definida, podemos aceder aos principais tipos de informação usados (texto com diferentes formatos e imagens com diferentes formatos e alinhamentos). O tipo é constituido por uma choice dos vários elementos que podem ser utilizados, permitindo ter parágrafos em branco.

Este tipo complexo é utilizado no desenvolvimento das notícias e nos resumos das notícias.

TPARAGRAFO

Estrutura do tipo complexo: TPARAGRAFO.







1.1.2. TPESSOA

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

Este tipo complexo permite caracterizar toda a informação referente a pessoas. A utilização de tipos complexos simplifica bastante a definição do XSD pois torna a estrutura mais modular, podendo desta forma usar o mesmo tipo para caracterizar diferentes alementos elementos. É este o caso de TPESSOA, o qual foi utilizado da definição de Autores e Directores, por se tratar de informação com a mesma estrutura. este tipo tem como elemento obrigatório o nome, os restantes são facultativos.

No elemento email, foi usado um pattern para validar a forma sintáctica do email e permitir apenas endereços bem formados.

TPESSOA

Estrutura do tipo complexo: TPESSOA.







1.1.3. TFIGURA

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

Este tipo complexo é utilizado inumeras vazes para tratamento das imagens. É contituído pelo elemento figura e pelo elemento legenda que contém a descrição da imagem

No tratamento do elemento figura foram utilizados alguns atributos.O atributo path para indicar o caminho físico da localização da imagem, o atributo formato que especifica o tipo de ficheiro permitido e o atributo alinha para definir o alinhamneto da figura no documento.

TFIGURA

Estrutura do tipo complexo: TFIGURA.







1.1.4. TSECCAO

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

Este tipo complexo é mais um exemplo de modularidade. O tipo TSECCAO permite caracterizar as secções e aplicado de forma recursiva possibilita a existência de subsecções. Tem como elementos obrigatórios o nome e pelo menos um artigo, assume-se que se as secções não tiverem artigos, nem sequer devem ser criadas.

TSECCAO

Estrutura do tipo complexo: TSECCAO.








1.2. Tipos simples

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







1.2.1. TFORMATO

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

Neste tipo simples podemos definir os tipos de formatos para as imagens que queremos seleccionar. Estão contemplados os principais tipos de ficheiros gráficos: gif, jpeg, png e por fim bmp. Apresenta-se a seguir o código que permite a criação do tipo simples TFORMATO.

	<xs:simpleType name="TFORMATO">
	  <xs:annotation>
	    <xs:documentation>Tipo simples para os formatos possiveis das imagens</xs:documentation>
	  </xs:annotation>
	  <xs:restriction base="xs:string">
	    <xs:enumeration value="BMP"/>
	    <xs:enumeration value="JPG"/>
	    <xs:enumeration value="GIF"/>
	    <xs:enumeration value="PNG"/>
	    <xs:enumeration value="WMF"/>
	  </xs:restriction>
	</xs:simpleType>







1.2.2. TALINHAMENTO

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

Este tipo foi definido com o objectivo de permitir o alinhamento de imagens na página. Foram definidos três tipos de alinhamento possíveis: centro, direita e esquerda. Seguidamente apresenta-se o extrato do código que define o tipo simples TALINHAMENTO.

			<xs:simpleType name="TALINHAMENTO">
			  <xs:annotation>
			    <xs:documentation>Tipo simples para os varios alinhamentos das imagens</xs:documentation>
		  	  </xs:annotation>
		  	  <xs:restriction base="xs:string">
		   	 	<xs:enumeration value="centro"/>
		    		<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, um documento XML é constituído por texto anotado que não é de fácil leitura. Para facilitar essa tarefa, é necessário substituir as masrcas ou anotações pela transformação pretendida. A norma XSL surge como uma linguagem de especificação de estilo que permite a execução da tarefa anteriormente referida. O tratamento XSLT fornece uma metodologia para transformar ficheiros XML noutros formatos de dados, incluindo linguagens de formatação.

Na seguinte secção apresentam-se as estratégias e funcionalidades utilizadas na solução final, no sentido de permitir a geração de jornais com alguma flexibilidade em termos estruturais.





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.

Os exemplos que se seguem, serviram para chamar o menu de navegação na estrutura do jornal e standardizar espaços de separação.

 Template Menu:
					
	<xsl:template name="menu">
		<font size="1">|
			<a href="#inicio">Início</a>|
			<a href="#destaques">Destaques</a>|
			<a href="#seccoes">Secções</a>|
			<a href="#fecho">Fecho</a>|
		</font>
	</xsl:template>

 Template space:
					
	<xsl:template name="space">
		<br/>
		<br/>
	</xsl:template>

Os templates são chamados pela a instrução <xsl: call template name=menu"> e <xsl: call template name=Space"> em qualquer parte do código.






2.2. Templates re-utilizados

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

Foram criados templates, que permitindo fazer uso da modularidade, foram reutilizados por vários elementos. Como exemplo significativo temos o template Pessoa que permite identificar tanto os autores dos artigos como os directores do jornal (ou qualquer outra entidade com as mesmas características).

	<xsl:template name="Pessoa">
		<xsl:value-of select="nome"/>
		<xsl:text>  </xsl:text>
		<xsl:value-of select="sobrenome"/>
		<br/>
		<small>
			<xsl:variable name="email" select="email"/>
			<a href="mailto:{$email}">
				<xsl:value-of select="email"/>
			</a>
			<xsl:variable name="link" select="homepage"/>
			<a href="{$link}">
				<xsl:value-of select="homepage"/>
			</a>
		</small>
		<xsl:call-template name="space"/>
		<small>
			<center>
				<xsl:value-of select="copyright"/>
			</center>
		</small>
		<br/>
	</xsl:template>
					

De uma forma geral todos os templates criados podem ser re-utilizados, ao longo dos documentos, de acordo com o que foi definido na ADA .






2.3. Teste dos 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 tratar os elementos facultativos. O excerto de código seguinte indica o tratamento dado ao nome do autor de um dado artigo, para o caso de ter ou não apelido.

 
						
		<xsl:value-of select="nome"/>
		<xsl:if test="sobrenome">
			<xsl:text>  </xsl:text>
			<xsl:value-of select="sobrenome"/>
		</xsl:if>
						

Neste exemplo podemos verificar que se existir o elemento apelido coloca-se um espaço entre o nome e o apelido, caso contário fica so o nome.

 
						
	<xsl:template match="figuras">
	<xsl:choose>
		<xsl:when test="figura/@alinha = 'direita'">
			<div align="right">
				<img src="{figura/@path}" alt=""/>
				<br/>
				<small>
					<xsl:value-of select="legenda"/>
				</small>
			</div>
		</xsl:when>
		<xsl:when test="figura/@alinha = 'centro'">
			<center>
				<img src="{figura/@path}" alt=""/>
			</center>
			<br/>
			<center>
				<small>
					<xsl:value-of select="legenda"/>
				</small>
			</center>
		</xsl:when>
		<xsl:when test="figura/@alinha = 'esquerda'">
			<div align="left">
				<img src="{figura/@path}" alt=""/>
				<br/>
				<small>
					<xsl:value-of select="legenda"/>
				</small>
			</div>
		</xsl:when>
	</xsl:choose>
</xsl:template>
						

Neste caso concreto verifica-se o valor do atributo alinha pertencente ao elemento figura. Assim a informação apresentada é a da figura que satisfaz o valor do atributo.






2.4. Referencias internas

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

Foi necessária a utilização de referências internas para referenciar outros artigos que estivessem relacionado com o assunto do artigo em causa.

Para tornar possível a tarefa atrás descrita, 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:template match="intRef">
		<xsl:variable name="ref" select="@destino"/>
		<small>Artigo Relacionado: </small>
		<a href="#{generate-id(/Jornal/corpo/seccao/artigo[@id=$ref])}">
			<small>
				<xsl:value-of select="key('refArtigo',@destino)/titulo"/>
			</small>
			<xsl:call-template name="space"/>
		</a>
	</xsl:template>
					







2.5. Navegação no documento

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

No jornal é possível navegar entre o início, a zona dos destaques (que é gerada automáticamente), o índice (que é gerado automáticamente), as secções e o fecho do jornal através to template menu. É também possível navegar entre os artigos de cada secção. Apresenta-se de seguida um excerto do código que permite a navegação entre os artigos da mesma secção bem como a navegação nas restantes zonas do jornal.

					
	<table width="100%">
		<tbody>
			<tr>
				<xsl:if test="count(preceding-sibling::artigo) >= 0">
					<td align="left">
						<font size="1">| <a href="#{generate-id(preceding-sibling::artigo[1])}">Artigo Anterior</a>
						</font>|</td>
				</xsl:if>
				<td align="center">
					<xsl:call-template name="menu"/>
				</td>
				<xsl:if test="count(following-sibling::artigo) >= 0">
					<td align="right">
						<font size="1">|  <a href="#{generate-id(following-sibling::artigo[1])}">Artigo Seguinte</a>
						</font>|</td>
				</xsl:if>
			</tr>
		</tbody>
	</table>		
					







2.6. Geração do índice

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

Para a geração automática do índice foi utilizada a instrução {gerenate-id()}. Esta instrução cria um identificador único e aleatório para cada nodo da ADA, garantindo que em cada passagem por cada nó, o ID é sempre o mesmo.

O indice é gerado em função das secções e subsecções existentes e ainda com os respectivos títulos dos artigos.

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

					
<xsl:template match="seccao" mode="ind-geral">
		<a href="#{generate-id()}">
			<h3>
				<xsl:call-template name="space"/>
				<font color="blue ">
					<xsl:value-of select="nome"/>
				</font>
			</h3>
		</a>
		<xsl:apply-templates mode="ind-geral" select="artigo"/>
		<xsl:if test="seccao">
			<xsl:apply-templates mode="ind-subseccoes" select="seccao"/>
		</xsl:if>
	</xsl:template>
					

					
<xsl:template match="seccao" mode="ind-subseccoes">
		<a href="#{generate-id()}">
			<h3>
				<font color="blue">
					<xsl:text> Subsecção </xsl:text>
					<xsl:value-of select="nome"/>
				</font>
			</h3>
		</a>
		<xsl:apply-templates mode="ind-geral" select="artigo"/>
	</xsl:template>
					

Apresenta-se a seguir a geração dos destaques a partir dos primeiros artigos existentes em cada secção, uma vez que os artigos que aparecem em primeiro são os mais importantes.

					
<xsl:template match="seccao" mode="ind-destaque">
	<a href="#{generate-id()}">
		<h4>
			<xsl:call-template name="space"/>
			<xsl:value-of select="artigo[1]/titulo"/>
		</h4>
	</a>
	<table>
		<tbody>
			<tr>
				<td align="left">
					<small>
						<xsl:apply-templates select="artigo[1]/resumo"/>
					</small>
				</td>
				<td align="right">
					<xsl:apply-templates select="artigo[1]/figuras"/>
				</td>
			</tr>
		</tbody>
	</table>
</xsl:template>
					









Epílogo


Este projecto pretendia envolver-nos numa nova tecnologia para tratamento e estruturação de documentos, mas acima de tudo constítuiu uma agradável surpresa pelo facto de se tornar quase viciante a sua utilização, bem como pelas vantagens e facilidades da sua aplicação a coisas simples do nosso quotidiano.

Os apontamentos da disciplina de PED e o livro de XML do professor J.C. Ramalho mostraram-se essenciais à compreensão dos novos conceitos de XML, XSL e às tecnologias associadas.

Um possivel trabalho futuro, no âmbito deste projecto, passaria por aumentar a complexidade dos elementos no sentido de generalizar, o mais possível o schema, a partir do qual se poderiam criar diversos tipos de jornais com estruturas e layouts diferentes. Esta tarefa foi tentada neste trabalho, mas agora que chega ao fim e com os conhecimentos adquiridos, penso que se poderiam fazer alhumas optimizações nesse sentido.

Gostaria de referir 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


ADA: Árvore Documental Abstracta

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|