Tratamento de um Jornal Electronico em XMLTratamento de um Jornal Electronico em XML
Trabalho prático de Processamento Estruturado de Documentos - MICEI 2002/03
Autores
ElizabeteDuarte
elizabete.m.duarte@telecom.pt - 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
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
Especialmente à minha família: marido e filhos.
A todos os colegas que com as suas pertinentes opiniões ajudaram-me muito.

|
Í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 espedita 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 compativel,exportável, a vários formatos e várias plataformas, garante qualquer tratamento no futuro, constituindo uma
vantagem muito relevante.
Resumo
Com o presente trabalho pretende-se por em prática um conjunto de conceitos e ferramentas no âmbito do Processamento
Estruturado de Documentos. Procedeu-se à elaboração de um documento informativo digital, jornal digital. Neste trabalho foi analisado
um documento Jornal Digital 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. Tratamento 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
3. As transformações XSLT
3.1. Templates "by call"
3.2. Testes aos elementos facultativos
3.3. Glossário e Bibliografia
3.4. Geração do índice
|
Í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 opcional da referida disciplina.
1.1. Apresentação do caso de estudo
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
O objectivo do trabalho é a criação é 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 anotar um documento 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 de cada elemento e 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, SchemasXML, bem com
o StylesheetsXSLT. 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 XSLA 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. Tratamento do Documento
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
Adoptou-se um documento modelo para o jornal electrónico e partir daqui desenvolveram-se os suportes necessários
para criar um documento estruturado anotado de forma a ser facilmente processado.
A análise documento permitiu concluir a organização da informação que contem:
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: contem a informação referente à redacção, direcção e outra.
2.1. O Schema do documento
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
O Schema foi criado após uma análise do documento. 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, pelo que se poderá obter mais informações no próprio
Schema.O esquema geral do Jornal, onde o elemento raiz para este tipo de documento é o jornal:

Schema geral do Jornal.
O Jornal é caracterizado por 3 elementos: abertura, corpo e Fecho. A abertura é constituída pelo titulo,
identificador do 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 corpo do jornal é uma sequência de secções, sendo:

O elemento corpo
Poder-se-ia ter definido 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 sequência de um
conjunto de elementos opcionais, 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. É do tipo complexo de dados TDirectores;Copyright, string onde se poderá colocar uma mensagem que 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
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 mesmo. 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.Assim foram definidos como tipos de dados
complexos: Tbloco, tipo de dados utilizado para as secções;Tartigo, utilizado para definir o tipo de dados dos artigos;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;TDirectores, tipo de dados para os directores;TTabela, empregue na definição de uma série de colunas e linhas devidamente agregadas e com
significado.
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
O Tbloco, utilizado para permitir definir secções:

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.
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
É definido pela sua caracterização e identificação, 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 uma
figura, opcionalmente, e um texto com uma breve descrição do artigo. 
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.
s 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 no
jornal
|
Í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: 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 referenciar.Por seu turno xref é uma referência externa. O url identifica um endereço e a
legenda é o texto que deverá aparecer no documento processado para seleccionar a referência externa.
|
Ínicio|
Abertura|
Prólogo|
Índice|
Fecho|
Glossário|
Bibliografia|
Tfigura é um tipo de dados complexos utilizado para definir o tipo dos elementos figura:

Tfigura utilizado para definir o tipo das Figuras
No elemento email, dentro de Tentidade foi usado em pattern
para verificar a forma do sintáctica do email.
3. 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.
3.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.
3.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.
3.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.
3.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|