31
TUTORIAL: LINGUAGENS XSL E XSLT Versão 1.0 1/29

TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

  • Upload
    others

  • View
    32

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

TUTORIAL:

LINGUAGENS XSL E XSLT

Versão 1.0

1/29

Page 2: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Apresentação

Este tutorial foi desenvolvido com a finalidade de orientar as Casas Legislativas, que utilizam o SAPL na elaboração de documentos e/ou proposições legislativas, a realizarem customizações nas respectivas folhas de estilo ­ armazenadas em XML. Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet Language Transformations – Transformaçãos do XSL) para a estilização e a formatação desses documentos.

Esta é a versão 1.0 que já se encontra à disposição para uso.

A Comunidade Legislativa poderá sugerir e/ou promover melhorias que julgar pertinentes segundo suas necessidades.

Requisitos Técnicos Mínimos

Conhecimentos básicos nas linguagens XML, HTML, CSS e edição de textos.

2/29

Page 3: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Sumário

Apresentação ....................................................................................................................2

Requisitos Técnicos...........................................................................................................2

1. XML (eXtensible Markup Language)..........................................................................4

1.1. XML BÁSICO ..........................................................................................4

2. XML (eXtensible Stylesheet Language)..............................................................6

2.1. XSL BÁSICO ............................................................................................62.2. ESTRUTURA DE UM XSL BÁSICO...................................................82.3. PRINCIPAIS ELEMENTOS XSL.........................................................102.4. EXTENSÕES XSL..................................................................................142.5. XSL aplicado ao SAPL.........................................................................14

3/29

Page 4: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

1. XML (EXtensible Markup Language)Para falar da linguagem XSL, primeiramente, é necessário conhecer a estrutura de um documento

ou arquivo em XML. Pelo menos uma introdução básica com vistas ao melhor entendimento para o desenvolvimento do assunto.

1.1. XML BÁSICOO XML é uma linguagem de marcação de dados, cuja função é prover um formato que descreva

as informações/dados de modo estruturado. Ou seja, um arquivo de textos marcado por tags dispostas de forma estruturada e hierárquica para armazenar informações. O arquivo de texto deve ter a extensão xml.

Essa tecnologia permite o uso de uma infinidade de tags (extensible) e, ainda, utilizar “n” funções como p.ex. guardar textos para impressão em vários formatos, banco de dados, utilização da mesma informação por sistemas diferentes, etc. Sua estrutura é bastante simples, como pode ser observada no exemplo abaixo, de uma informação em e­mail e a sua representação em XML:

INFORMAÇÃO REPRESENTAÇÃO EM XML De: Pedro <?xml version="1.0"?>

Para: Mário <email>

Saudações Mário! Solicito verificação e envio docomprovante de pagamento da fatura dafaculdade deste mês.

<from>Pedro</from>

Desde já, obrigado! <to>Mário</to>

Pedro Magalhães <message>Saudações Mário! Solicitoverificação e envio do comprovante depagamento da fatura da faculdade deste mês.</message>

<thank>Desde já, obrigado!</thank>

<sign>Pedro Magalhães</sign>

</email>

Observe que: Um documento xml tem um Document type definition no cabeçalho, representado pela tag “<?xml ?>”. Também, poderá ter novos atributos ou variações dos mesmos, como por exemplo: <?xml version="1.0" encoding="ISO8859-1"?>, onde encoding é um atributo do elemento xml, que define a língua, (códigos, números, letras, símbolos, ...) no caso o padrão

4/29

Page 5: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

ISO8859­1; Há uma hierarquia entre as tags/elementos ou nós. Observe que as indentações, além das tags, ajudam a representar melhor a hierarquia numa estrutura do tipo pai, filhos, netos..., conforme segue:

<raiz><filho1>

<neto1></neto1>

</filho1> </raiz>

Toda tag/elemento deve iniciar com o padrão < > e terminar/fechar com a mesma tag iniciada, porém, acrescida de uma barra “</ >”, p. ex: <teste>exemplo</teste>;

Um par de tags representa um elemento. No exemplo acima foi utilizada a tag teste para representar/marcar o elemento exemplo, mas poderia ser utilizado qualquer texto ou conjunto de palavras no lugar da palavra teste;

As tags em XML são cases sensitive, ou seja, <teste> é diferente de <TESTE> ou <Teste> e assim por diante ;

todas tags/nós podem ter atributos para descrever os elementos:

EXEMPLO 1 EXEMPLO 2<?xml version="1.0"?> <?xml version="1.0"?>

<pessoa> <pessoa sexo=”masculino”>

<sexo>masculino</sexo> <nome>Pedro</nome>

<nome>Pedro</nome><sobrenome>Mário</sobrenome>

<sobrenome>Mário</sobrenome> </pessoa>

</pessoa>

No exemplo 1, sexo é um elemento, porém já no exemplo 2 é um atributo do elemento pessoa.

5/29

Page 6: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

A escolha de uma forma ou de outra deve ser orientada pela solução que se quer dar, sendo que se deve evitar o uso de atributos quando o elemento possuir múltiplos valores para o mesmo atributo, uma vez que os mesmos não podem ser expandidos (cada atributo deve ter apenas um valor), não podem descrever estruturas e, ainda, são de difícil manutenção.

FONTES: CURSO GRATUITO: http://www.w3schools.com/xmlTESTE DE CONHECIMENTO: http://www.w3schools.com/xml/xml_quiz.aspCERTIFICAÇÃO XML (U$95): http://www.w3schools.com/cert

2. XSL (eXtensible Stylesheet Language)

2.1. XSL BÁSICOA linguagem XSL (Linguagem de Folha de Estilos Extensível) surgiu da necessidade de se

melhorar a apresentação/estilização/formatação de um documento XML em HTML. A XSL foi criada para dar uma forma prática de leitura aos dados em formato XML num navegador, ou seja, ela permite apresentar os dados de uma maneira mais inteligível. Abaixo será demonstrado o texto (código fonte) do documento aviso.xml que está em um computador local e o modo como é apresentado no navegador de internet (browser) na forma pura:

CÓDIGO FONTE ­ aviso.xml APRESENTAÇÃO VIA BROWSER<?xml version="1.0"?><aviso><para>Janice data="01/04/2000"</para><de>Jefferson</de><cabecalho>Lembre­se</cabecalho><corpo>Amanha voce tem prova dematematica</corpo></aviso>

6/29

Page 7: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

A linguagem XSL pode apresentar as informações de um modo mais amigável ao usuário, bastando referenciar no documento XML o arquivo XSL que é uma linguagem de estilos padrão para arquivos XML, podendo ainda utilizar a combinação das linguagens HTML + CSS no arquivo XSL. Para referenciar, basta acrescentar a seguinte tag no arquivo XML após o cabeçalho: <?xml­stylesheet type="text/xsl" href="/var/www/xxxx.xsl"?>Obs: O xxxx.xsl é o nome do arquivo XSL que está no diretório indicado acima.

Após referenciado o XML, deve­se criar o arquivo com a extensão XSL, usar elementos/tags do XSL para ler as informações do XML, definir os formatos/estilos/lugares ­ onde cada informação deverá estar em sua apresentação ­ utilizando HTML e CSS.

Antes de mostrar a eficácia do XSL, que também é uma linguagem de marcação XML (por isso a declaração “<?xml?>” usada no cabeçalho), será necessária uma especificação por meio de comentários de sua estrutura/código­fonte e obrigatoriedade, observando a indicação SIM = obrigatório para todos XSL; e, DEPENDE quando depender da lógica do documento, ou seja, é variável/não obrigatória. Observe a estrutura de hierarquia apresentada nas indentações do código fonte a seguir:

CÓDIGO FONTE COMENTÁRIOS Obrigatório?

1 <?xml version="1.0"?> Declaração/especificação do tipo dedocumento, que neste caso é XML.

SIM

2 <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Declaração/especificação PADRÃO dalinguagem XSL de acordo com ospadrões da W3C para Transformações noXML.

SIM

3 <xsl:template match="/"> Elemento de Início padrão da raizprincipal ('/') do XSL SIM

4 <xsl:for­each select="xxxxx">Exemplo do uso do elemento for­each doXSL para fazer loop ­ quando se queraplicar os estilos para cada elemento xencontrado no xml

DEPENDE

5 </xsl:for­each>Todo elemento iniciado deve serfinalizado/fechado! Neste caso foifinalizado o for­each.

DEPENDE

6 ...Qualquer outro elemento do XSL, assimcomo o for­each, desde que não seesqueça de fecha­lo.

DEPENDE

7 </xsl:template> Todo elemento iniciado deve ser SIM

7/29

Page 8: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

finalizado/fechado! Neste caso é ofechamento do template raiz.

8 </xsl:stylesheet> Fim do documento XSL. SIM

O código fonte apresentado acima é apenas a estrutura do XSL puro, onde temos:as declarações de cabeçalho (stylesheet);

o início da raiz/diretório principal (template match); a lógica adequada para leitura do XML (for­each); finalizações da tag raiz.

OBS: As indentações representam a hierarquia, obedecendo as mesmas regras de pais, filhos, netos..., do XML.

2.2. ESTRUTURA DE UM XSL BÁSICO

O XSL divide­se em três partes:

XSL Transformations (XSLT): Linguagem para transformar XML; XPath: Linguagem para acessar e referir as partes de documento XML; XSL­FO: Vocabulário XML para especificar semânticas de formatação.

As três são importantes, porém só trataremos a XSLT, necessária à criação dos modelos/leiautes de documentos legislativos no SAPL.

Como exemplo, será criado o arquivo aviso.xsl para testes em computador local, especificando cada linha de código, pelos comentários abaixo, passo­a­passo de modo a permitir maior clareza, como segue:

1º PASSO ­ criar, nomear e salvar um arquivo vazio de texto como aviso.xsl;

2º PASSO ­ copiar as tags básicas do padrão XSL conforme abaixo e, em seguida, salva­las:

CÓDIGO FONTE ­ aviso.xsl<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

8/29

Page 9: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

</xsl:template>

</xsl:stylesheet>

3º PASSO ­ criar a estrutura HTML + CSS e, em seguida, salva­la:OBS: o CSS pode ser usado dentro da tag style (nó filho no html) ou em cada elemento dopróprio HTML.

CÓDIGO FONTE ­ aviso.xsl<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<style type="text/css">

</style>

<body>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

Esta é a estrutura básica do XSL e está pronta para iniciar o configuração/programação dos estilos dos XML’s. Observe que:

Elementos do HTML e/ou CSS só podem estar dentro dos elementos template, assim como níveis filhos, netos, etc.... Ou seja, entre as tags <xsl:template match="/"> e </xsl:template> ­ nenhum elemento deve constar após </xsl:tamplate> e de </xsl:stylesheet>;

A partir deste ponto, pode­se utilizar todas as ferramentas/recursos que o HTML e/ou CSS fornecem para uma página/documento da tag <html> até </html>;

9/29

Page 10: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

2.3. PRINCIPAIS ELEMENTOS XSLNeste momento, a parte mais importante e esperada é a de busca das informações do arquivo

XML para povoar a página html; ou, o documento de saída tratado neste escopo. Para que cada informação específica apareça na página/documento, é necessário conhecer os elementos do XSL, pois, é através deles que, por sua semântica, serão buscadas as informações no/do documento XML dado a tag/nó referente, destinadas ao plano/configuração feita no arquivo fonte XSL.

Elementos XSL

apply­imports Aplica uma regra do template de uma folha de estilo importado.

apply­templates Aplica uma regra do template no elemento corrente ou nos níveis filhosdo elemento corrente.

attribute Adiciona um atributo.

attribute­set Define um conjunto de atributos.

call­template Faz uma chamada a um template.

choose Usado em conjunto com <when> and <otherwise> para expressarmúltiplos testes condicionais.

comment Cria um nó comentado na árvore resultante.

copy Cria uma cópia do nó corrente (sem os níveis filhos e atributos).

copy­of Cria uma cópia do nó corrente (com os níveis filhos e atributos).

decimal­format Define os caracteres e símbolos a serem usados quando se convertenúmeros em strings, com a função format­number().

element Cria um elemento no documento de saída.

fallback Especifica um código alternativo para rodar se o processador nãosuportar um elemento XSLT.

for­each Comando de repetição para cada nó em um nó específico.

if Aplica template(s) apenas se a condição especificada for verdadeira.

import Importa o conteúdo de uma folha de estilo em outra. Nota: Uma folhade estilo importada terá prioridade inferior à daquela que a importou.

10/29

Page 11: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

includeInclui o conteúdo de uma folha de estilo em outra.Nota: Uma folha de estilo inclusa terá a mesma prioridade da folha deestilo que a incluiu.

key Declara uma chave nomeada, que pode ser usada na folha de estilo coma função key().

message Escreve uma mensagem de saída (usado para reportar erros).

namespace­alias Substitui um namespace na folha de estilo com um namespace diferentena saída.

number Determina a posição inteira do nó corrente e formata um número.

otherwise Especifica uma ação default para o elemento <choose>.

output Define o formato do documento de saída.

param Declara um parâmetro local ou global.

preserve­space Define o elemento para cada espaço em branco a ser preservado.

processing­instruction Escreve uma instrução de processamento na saída.

sort Ordena a saída.

strip­space Define o elemento espaço em branco a ser removido.

stylesheet Define o elemento raiz da folha de estilo.

template Regras a serem aplicadas ao nó especificado.

text Escreve o texto literal na saída.

transform Define o elemento raiz da folha de estilo.

value­of Extrai o valor do nó selecionado.

variable Declara uma variável local ou global.

when Especifica uma ação para o elemento <choose>.

with­param Define o valor de um parâmetro a ser passado no template.

2.4. ESTRUTURA DO ELEMENTOS XSL

11/29

Page 12: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Para utilizar corretamente os elementos XSL, deve­se observar a forma sintática padrão, pois háalgumas variações que será demonstrada e comentada na tabela abaixo:

ELEMENTOS COMENTÁRIO

<xsl:text> e­mail: </xsl:text>

Inserção de caracteres/texto ­ Elementousado para inserir caracteres textuais nodocumento de saída. No exemplo, seráimpresso e­mail: diretamente no local ondefor usado na pagina de estilo.

<xsl:value­of select= “aviso/corpo ”/>

Buscar elementos/atributos do nó ­Elemento que busca toda informaçãomarcada do xml pela tag/nó corpo no nívelfilho do aviso e apresentada no documentode saída.

<xsl:for­each select= “aviso”> </xsl:for­each>

Laço for­each ­ Elemento de repetição queprecede outro elemento XSL, usado paraaplicar uma lógica/programação repetida aum conjunto de nodos/elemento do XML,que, neste caso, nos níveis filhos de aviso.Este outro elemento pode ser qualquerelemento desta tabela e do XSL.

<xsl:apply­templates select= “nome do nó”/>ou <xsl:apply­templates/>

Aplicar templates ­ Elemento usado paraaplicar o elemento nome do nó. Caso estejasem o select, aplicará todo o template.

<xsl:choose> <xsl:when test= “test situation”> stylesheet commands </xsl:when>

<xsl:otherwise> stylesheet commands </xsl:otherwise></xsl:choose>

Laço Condicional Choose ­ Trata­se deum laço condicional, sendo que se o primeiroteste (when) for bem sucedido serãoexecutados os seus comandos, casocontrário, executará outros comandos dacondição otherwise. O uso do otherwise éobrigatório e, quando não houveremcomandos para ele, deve­se usar apenas</xsl:otherwise> ao invés do bloco todo.

<xsl:if test= “test situation”> </xsl:if> Laço Condicional simples (if) ­ Só executa

12/29

Page 13: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

o comando caso a condição test sejasatisfeita.

<xsl:variable name= “x”> atribuir um valor a xaqui... </xsl:variable>

Criar variável ­ Elemento que cria avariável x, com valor igual a atribuir umvalor a x aqui.

<xsl:value­of select= “$x”/> Usar valor da Variável ­ Elemento queacessa o valor da variável x criada acima

<xsl:element name= “aviso2”> <xsl:attribute name= “valor”> <xsl:text>2013</xsl:text> </xsl:attribute></xsl:element>

Criar novo elemento + atributo ­ Criarnovo elemento aviso2 com atributo valor=“2013” para ser utilizado no documento desaída.

<xsl:sort select="ano" data­type="number"order="ascending"/>

Elemento de ordenação ­ Elemento queordena/agrupa informações de acordo comparâmetros/filtros. Neste caso, obtém­setodas as informações do nó ano e organizapor data em ordem crescente.

2.4. EXTENSÕES XSLPodem ser adicionadas novas funcionalidades à linguagem XSL usando extensões que devem ser

declaradas como atributos da tag <xsl:stylesheet>. A tabela abaixo demonstra algumas paraexemplificação:

EXTENSÃO LINGUAGEM

<xsl:stylesheet xmlns:java="http://xml.apache.org/xslt/java"> JAVA

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> XSL

<xsl:stylesheet xmlns:html="http://www.w3.org/1999/xhtm"> HTML

<xsl:stylesheet xmlns:gx="http://www.google.com/kml/ext/2.2"> OGC KML(Google Earth)

2.5. XSL para o SAPLO SAPL é o sistema que automatiza as atividades legislativas, tornando mais fácil a produção

legislativa, como forma de apoiar as Casas Legislativas nas suas atividades relacionadas ao processo

13/29

Page 14: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

legislativo em geral, tais como: elaboração de proposições, protocolo e tramitação de matérias legislativas, organização da pauta da sessão, registro de votações nas sessões plenárias, manutenção atualizada da base de leis, entre outras. Por exemplo, as Proposições digitadas são armazenadas segundo o padrão XML. Após deliberação, votação e encaminhamento para o executivo sancionar ou vetar, a matéria poderá retornar ao sistema, na forma de lei, quando passa a fazer parte da base de Leis Municipais ou Normas Jurídicas.

Documentos como Indicação, Moção, Ofício, Parecer, Projeto de Lei, Requerimento, etc, possuem estilos diferentes entre si, e podem ser ajustados/estilizados conforme a necessidade de cada casa legislativa com a linguagem XSL configurada no ZOPE. Para acessar os arquivos XSL de cada documento descrito acima, basta digitar no browser a URL: http://localhost:8080/manage, indicar usuário e senha (autenticação), acessar no painel, no lado esquerdo da tela, as pastas sapl; e, em seguida, XSLT e por último HTML, ou seja, /sapl/XSLT/HTML. No repositório HTML, têm­se todos os modelos XSL disponíveis para os documentos. Observe o printscreem abaixo:

Será usado o modelo pl.xsl que é o estilizador do documento Projeto de Lei do SAPL. Ao clicar no arquivo acima referido, tem­se acesso ao seu código fonte, que, neste tutorial, será expandido gradualmente e comentado para facilitar o entendimento conforme segue:

14/29

Page 15: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

CÓDIGO FONTE ­ GRUPO BASE COMENTÁRIO

<?xml version="1.0" Encoding="ISO­8859­1"?>Declaração obrigatória do arquivo XSLpara ler XML. Neste caso, sob regras dopadrão ISO­8859­1.

<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pl="/XSD/ProjLei">

Declaração obrigatória para arquivo XSL,que indica início da programação dosestilos, buscando extensão /funcionalidades do site w3c (conforme oendereço) e com a extensão do arquivo/XSD/ProjLei que será locada no ZOPE.

<xsl:output encoding="ISO­8859­1"/> Elemento que força a saída do XSL nacodificação do padrão ISO­8859­1.

<xsl:template match="/pl:pl">Início/montagem da Raiz absoluta(principal) indicada por /pl , que será a“mãe” de todo os outros elementos.

Elementos de HTML + CSS integrados eposteriormente o XSL.

</xsl:template> Finalização da raiz absoluta.

</xsl:stylesheet> Finalização das folhas de estilos.

15/29

Page 16: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Abaixo será apresentado o grupo do HTML + CSS e comentados. Também serão mostradoselementos do grupo XSL somente para efeito de localização, os quais estarão num tom mais claro esomente serão explicados na próxima tabela.

CÓDIGO FONTE ­ GRUPO HTML + CSS COMENTÁRIO

16/29

Page 17: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

<html>

<head> <title> <xsl:value­of select="@id"/> </title> <style type="text/css">

body margin­left: 2cm; margin­right: 1cm;

p font­family: Times; font­size: 12pt;

p.epigrafe text­align: center; text­transform: uppercase;font­weight: bold;

Início do HTML.

Início do HEAD, que trata daspropriedades do documento desaída, como TITLE (título dapágina HTML), STYLE (estilos /formatações), referenciar /importar um documento externo /outra localidade), META(metadados / informações quefacilitam buscas na rede atravésde palavras chaves), entreoutros.

Margem direita de 1cm eesquerda de 2cm da páginasaída.

No exemplo, todo e qualquerparágrafo será fonte tamanho 12e em Times New Roman.

Todo parágrafo da classeepígrafe será centralizado, letramaiúscula e em negrito.

Todo parágrafo da classeementa será justificado com amargem esquerda alinhada apartir da metade do documento.

Todo parágrafo da classepreâmbulo será em maiúscula eavançado de 1cm da margemesquerda.

Todo parágrafo da classe artigoserá justificado e avançado de 2cm da margem esquerda.

Todo parágrafo da classe

17/29

Page 18: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

p.paragrafo text­align: justify; text­indent: 2cm;

p.inciso text­align: justify; text­indent: 1cm;

p.alinea text­align: justify; text­indent: 1cm;

p.item text­align: justify; text­indent: 1cm;

p.justificativa text­align: justify; text­indent: 7cm;

p.mensagem text­align: justify;

p.data_apresentacao text­align: justify;

p.autor text­align: center; text­transform: uppercase;

p.cargo text­align: center;

h3.cab_secao text­align: center; font­size: 12pt;

parágrafo será justificado eavançado de 2 cm da margemesquerda.

Todo parágrafo da classe incisoserá justificado e avançado de 1cm da margem esquerda.

Todo parágrafo da classe alíneaserá justificado e avançado de 1cm da margem esquerda.

Todo parágrafo da classe itemserá justificado e avançado de1cm da margem esquerda.

Todo parágrafo da classejustificativa será justificado eavanço de 7cm da margemesquerda.

Todo parágrafo da classemensagem será justificado.

Todo parágrafo da classedata_apresentacao serájustificado.

Todo parágrafo da classe autorserá centralizado e emmaiúsculas.

Todo parágrafo da classe cargoserá alinhado no centro dapágina.

Todo título com tag h3 que fazparte da classe cab_secao serácentralizado com tamanho defonte 12.

18/29

Page 19: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

artigo[rotulo] font­weight: bold;

</style></head>

Deixa em negrito todos atributosrótulo do elemento artigo, ouseja Art 1º, Art 2º, etc.

Fechamento dos estilos (style) epropriedades (head) destapágina/documento.

<body>

<table>

<tr align="right" >

<td width="77" heigth="81">

<imgsrc="/sapl/portal_skins/sk_sapl/imagens/logo_casa.gif">

</img> </td>

<td align="left" heigth="40"> Câmara Municipal de Piraí<br/>Estado do Rio de Janeiro</td>

Início do modelo/conteúdo dapágina/documento.

Criação de uma tabela paramelhor alinhamento dalogomarca da Casa Legislativa edo texto/cabeçalho.

Criação de uma linha na tabelacom conteúdo alinhado a direita.

Início de inserção de dados nalinha criada acima.

Inserção da imagem doBrasão/Logo da Casa Legislativapelo endereço que está noatributo src, localizado noZOPE.

Finalização do elemento imageme de inserção de dado na linha.

Início de inserção de dado/Texto­exemplo (CâmaraMunicipal de Piraí) que, nestecaso, está na mesma linha daimagem. A tag br força aquebra de linha do texto paraque o restante seja escrito napróxima linha.

19/29

Page 20: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

</tr></table>

<br/>

<xsl:apply­templates/>

<hr color="#8B4513" size="4" width="90%"></hr><hr color="#8B4513" size="1" width="90%"></hr>

<p align="center"> Rua Dr. Luiz Antonio G. daSilveira, 16 Centro, Piraí/RJ ­ Cep: 27175/000</p><palign="center">e­mail:<a href="mailto:[email protected]">[email protected]</a></p><p align="center" padding="0">Telefax: (24) 2411­9500</p>

</body></html>

Finalização da linha (tr) efinalização da tabela (table).

Pula linha.

Cria linha horizontal com a cor#8B4513, com espessura “4” eque ocupa 90% da folha.

Início de um parágrafo cujoconteúdo estará centralizado.Neste caso, trata­se do rodapé efoi colocado neste local para queseja mostrado independente dequalquer elemento. A posiçãocorreta seria no final do códigofonte? Não! Pois estaria fora datag </html> que é o fim dodocumento.

Término do modelo e corpo dodocumento.

Caso especial: observe que apenas dois elementos XSL foram mostrados em um tom mais claro na tabela acima no GRUPO HTML + CSS, pois o local é o mais importante a saber, ou seja, <xsl:value­of select="@id"/> e <xsl:apply­templates/>. O primeiro XSL busca a informação marcada pelo atributo id (vide a presença do símbolo “@”) e o coloca na TITLE do documento, que será gerado, dando o mesmo nome/código do XML para o documento de saída. Já o segundo, serve para chamar todos elementos XSL do arquivo XSL e aplicá­los nas posições em que se encontram, ou seja, não importa se os elementos XSL estão após a TAG de finalização </html>, pois o <xsl:apply­templates/> localiza todos e aplica na mesma sequência em que se encontram definidos no local indicado por <xsl:apply­templates/>.

20/29

Page 21: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Após conhecer os dois elementos especiais e suas utilidades, falta apenas conhecer os restantes dos elementos XSL, que serão aplicados a cada elemento do XML conforme será demonstrado e comentado a seguir. Veja como identificar primeiramente os elementos XML:

Este exemplo tratará da proposição de Projeto de Lei no SAPL. Os campos acima (Proposição, Justificativa, Data de Apresentação, Autor e Mensagem de Encaminhamento) são filhos do pl (Pojeto de Lei). Exemplificando, a estrutura do XML seria da seguinte forma:

<?xml version="1.0"?><pl>

<proposicao><epigrafe>

<epigrafe_text></epigrafe_text></epigrafe><ementa>

<ementa_text></ementa_text></ementa><preambulo>

<preambulo_text></preambulo_text></preambulo><parte>

<livro><titulo>

<capitulo><artigo>

<artigo_text>

21/29

Page 22: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

<paragrafo><paragrafo_text></paragrafo_text>

</paragrafo></artigo_text>

</artigo></capitulo>

</titulo></livro>

</parte></proposicao><justificativa></justificativa><datadeapresentacao></datadeapresentacao><autor></autor><mensagem></mensagem>

</pl>

CÓDIGO FONTE ­ GRUPO XSL COMENTÁRIO

<xsl:template match="pl:proposicao">

<xsl:apply­templates select="./*"/>

</xsl:template>

<xsl:template match="pl:epigrafe">

<p class="epigrafe">

<xsl:value­of select="pl:epigrafe_text"/>

</p>

</xsl:template>

Elemento XSL que inicia o conjunto de estilospara o elemento proposição do XML.

Elemento que aplica estilos XSL em umconjunto de elementos do XML. Neste caso, oselect aponta para todos os elementos (*) damesma hierarquia/nível (/) sendo que oelemento root será a proposição.

Fechamento do primeiro template.

Elemento XSL que inicia conjunto de estilospara o elemento/nó epígrafe do XML.

HTML: marcação de início de parágrafo daclasse epígrafe.

Busca a informação “tagueada”/marcadas porepígrafe_text.

HTML: Fecha o parágrafo

Fecha folhas de estilos para a epígrafe.

22/29

Page 23: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

<xsl:template match="pl:ementa">

<br/><br/> <p class="ementa">

<xsl:value­of select="pl:ementa_text"/>

</p>

</xsl:template>

<xsl:template match="pl:preambulo">

<p class="preambulo">

<xsl:value­of select="pl:preambulo_text"/>

</p>

</xsl:template>

<xsl:template match="pl:artigo_text">

<p class="artigo">

<b>

<xsl:value­of select="../@Rotulo"/>

</b>

<xsl:value­of select="concat(' ',text())"/>

Inicializa estilos para o elemento ementa doXML.

HTML: Salta 2 linhas.HTML: Início de parágrafo da classe ementa.

Busca a informação “tagueada” / marcadas porementa_text.

HTML: Fecha parágrafo do grupo ementa.

Fecha as folhas de estilos para a ementa.

Inicializa estilos para elemento preâmbulo doXML.

HTML: Início de parágrafo da classepreâmbulo.

Busca a informação “tagueada” / marcadas porpreambulo_text.

HTML: Fecha parágrafo do grupo ementa.

Fecha as folhas de estilos para preambulo.

Busca a informação “tagueada” / marcadas porartigo_text.

HTML: Início de parágrafo da classe artigo.

HTML: Início de negrito.

Busca o valor do atributo de Rotulo que nãoesta no nó atual e sim no anterior, ou seja, ocapitulo.

HTML: Término de negrito.

Busca no elemento artigo_text, os valores que

23/29

Page 24: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

</p>

</xsl:template>

<xsl:template match="pl:paragrafo_text">

<p class="paragrafo">

<xsl:value­of select="concat(../@Rotulo,'',text())"/>

</p>

</xsl:template>

<xsl:template match="pl:inciso_text">

<p class="inciso">

<xsl:value­of select="concat(../@Rotulo,' ­',text())"/>

</p>

</xsl:template>

<xsl:template match="pl:alinea_text">

a função text() retornar (que será todo o texto)concatenado com um espaço em branco noinício.

HTML: Término do parágrafo da classeartigo.

Fecha folhas de estilos para artigo_text.

Busca a informação “tagueada” / marcadas porparagrafo_text.

HTML: Início de parágrafo da classeparagrafo.

Busca no elemento paragrafo_text os valoresdo atributo Rotulo do elemento anterior econcatena com um espaço em branco, mais ovalor retornado por text().

HTML: Fechamento de parágrafo da classeparagrafo.

Fecha folhas de estilos de paragrafo_text.

Inicia estilos para o elemento inciso_text doarquivo XML.

HTML: Início de parágrafo da classe inciso.

Busca no elemento inciso_text os valores doatributo Rotulo do elemento anterior econcatena/junta com o “­” e mais o valorretornado por text().

HTML: Término de parágrafo da classeinciso.

Fecha folhas de estilos de inciso_text.

Busca a informação “tagueada” / marcadas por

24/29

Page 25: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

<p class="alinea">

<xsl:value­of select="concat(../@Rotulo,'',text())"/>

</p>

</xsl:template>

<xsl:template match="pl:item_text">

<p class="item">

<xsl:value­of select="concat(../@Rotulo,'',text())"/>

</p>

</xsl:template>

<xsl:template match="pl:data_apresentacao_text">

<p class="data_apresentacao">

<xsl:value­of select="text()"/>

</p>

alinea_text.

HTML: Início de parágrafo da classe alinea.

Busca no elemento alinea_text os valores doatributo Rotulo do elemento anterior econcatena/junta com um espaço em brancomais o valor retornado por text().HTML: Fecha parágrafo da classealinea_text.

Fecha folhas de estilos de alinea_text.

Inicia estilos para o elemento item_text doarquivo XML.

HTML: Início de parágrafo da classe item.

Busca no elemento item_text os valores doatributo Rotulo do elemento anterior econcatena/junta com um espaço em brancomais o valor retornado por text().

HTML: Fecha parágrafo da classe item.

Fecha folhas de estilos de item_text.

Inicia estilos para o elementodata_apresentacao_text do arquivo XML.

HTML: Início de parágrafo da classedata_apresentacao.

Busca no elemento data_apresentacao osvalores Retornados da função text(), cujaretorna todo o texto/palavras que estão“tagueadas” por este elemento.

HTML: Fecha parágrafo da classedata_apresentacao.

25/29

Page 26: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

</xsl:template>

<xsl:template match="pl:autor_text">

<br/><br/>

<p class="autor"> <xsl:value­of select="text()"/>

</p>

</xsl:template>

<xsl:template match="pl:cargo_text">

<p class="cargo">

<xsl:value­of select="text()"/>

</p> <br/><br/><br/>

</xsl:template>

<xsl:template match="pl:justificativa">

<br/><br/>

Fecha folhas de estilos dedata_apresentacao_text.

Inicia estilos para o elemento autor_text doarquivo XML.

HTML: Salta duas linhas.

HTML: Início de parágrafo da classe autor.Busca no elemento alinea_text os valores doatributo Rotulo do elemento anterior econcatena/junta com um espaço em brancomais o valor retornado por text().

HTML: Término de parágrafo autor.

Fecha folhas de estilos de autor_text.

Inicia estilos para o elemento cargo_text doarquivo XML.

HTML: Início de parágrafo da classe cargo.

Busca no elemento cargo_text os valores doretornados pela função text(), que retornaapenas texto.

HTML: Início de parágrafo da classe cargo.HTML: Salta 3 linhas.

Fecha folhas de estilos de cargo_text.

Inicia estilos para o elemento justificativa doarquivo XML.

HTML: Salta duas linhas.

HTML: Cria o referido texto centralizado

26/29

Page 27: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

<b><p align="center">J U S T I F I C A T I VA :</p></b>

<br/>

<p class="justificativa">

<xsl:value­ofselect="pl:justificativa_text"/>

</p>

<br/>

</xsl:template>

<xsl:template match="pl:mensagem">

<h3 class="cab_secao">M E N SA G E M :</h3>

<br/>

<p class="mensagem">

<xsl:value­ofselect="pl:mensagem_text"/>

</p>

</xsl:template>

</xsl:stylesheet>

HTML: Salta uma linha.

HTML: Início de parágrafo da classejustificativa.

Busca a informação “tagueada” / marcadas porjustificativa_text.

HTML: Fim do parágrafo da classejustificativa.

HTML: Salta uma linha.

Fecha folhas de estilos de justificativa.

Inicia estilos para o elemento mensagem doarquivo XML.

HTML: Cria o texto na página no tamanho deh3.

HTML: Salta uma linha.

HTML: Início de parágrafo da classemensagem.

Busca a informação “tagueada” / marcadas pormensagem_text.

HTML: Fim do parágrafo da classemensagem.

Fecha folhas de estilos de mensagem.

Finaliza todas folhas de estilos.

27/29

Page 28: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

Após preencher os campos do Projeto de Lei no SAPL (vide figura anterior) e as folhas de estilos programadas conforme a tabela acima, tem­se o seguinte documento de saída estilizado pela linguagem XSL conforme abaixo:

28/29

Page 29: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

29/29

Page 30: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

30/29

Page 31: TUTORIAL: LINGUAGENS XSL E XSLT...Para isso, utiliza as linguagens XSL (eXtensible Stylesheet Language – Linguagem de folha de estilo extensível) e a XSLT ( eXtensible Stylesheet

31/29