Vous êtes sur la page 1sur 31

TUTORIAL:

LINGUAGENSXSLEXSLT

Verso1.0

1/29

Apresentao
Este tutorial foi desenvolvido com a finalidade de orientar as Casas Legislativas, que utilizam o
SAPL na elaborao de documentos e/ou proposies legislativas, a realizarem customizaes nas
respectivas folhas de estilo armazenadas em XML. Para isso, utiliza as linguagens XSL (eXtensible
Stylesheet Language Linguagem de folha de estilo extensvel) e a XSLT ( eXtensible Stylesheet
Language Transformations Transformaos do XSL) para a estilizao e a formatao desses
documentos.
Estaaverso1.0quejseencontradisposioparauso.
AComunidadeLegislativapodersugerire/oupromover melhoriasquejulgarpertinentessegundo
suasnecessidades.

RequisitosTcnicosMnimos
ConhecimentosbsicosnaslinguagensXML,HTML,CSSeediodetextos.

2/29

Sumrio

Apresentao....................................................................................................................2
RequisitosTcnicos...........................................................................................................2
1.XML(eXtensibleMarkup Language)..........................................................................4
1.1.

XMLBSICO..........................................................................................4

2.XML(eXtensibleStylesheet
2.1.

2.2.
2.3.
2.4.
2.5.

Language)..............................................................6

XSLBSICO............................................................................................6
ESTRUTURADEUMXSLBSICO...................................................8
PRINCIPAISELEMENTOSXSL.........................................................10
EXTENSESXSL..................................................................................14
XSLaplicadoaoSAPL.........................................................................14

3/29

1.

XML(EXtensibleMarkupLanguage)

Para falar da linguagem XSL,primeiramente,necessrioconhecer aestruturadeumdocumento


ou arquivo em XML. Pelo menos uma introduo bsica com vistas ao melhor entendimento para o
desenvolvimentodoassunto.

1.1.

XMLBSICO

O XML uma linguagem de marcao de dados, cuja funoproverumformatoquedescreva


asinformaes/dadosdemodoestruturado.Ouseja,umarquivodetextosmarcadoportagsdispostasde
formaestruturadaehierrquicaparaarmazenarinformaes.Oarquivodetextodeveteraextensoxml.
Essa tecnologia permite ousodeumainfinidadedetags(extensible)e,ainda,utilizarnfunes
como p.ex. guardar textos para impresso em vrios formatos, banco de dados, utilizao da mesma
informao por sistemas diferentes, etc. Sua estrutura bastante simples, como pode ser observada no
exemploabaixo,deumainformaoememaileasuarepresentaoemXML:
INFORMAO
De: Pedro
Para: Mrio

REPRESENTAOEMXML
<?xml version="1.0"?>
<email>

Saudaes Mrio! Solicito verificao e envio do


comprovante de pagamento da fatura da
faculdade deste ms.

<from>Pedro</from>

Desde j, obrigado!

<to>Mrio</to>

Pedro Magalhes

<message>Saudaes Mrio! Solicito


verificao e envio do comprovante de
pagamento da fatura da faculdade deste ms.
</message>

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

<sign>Pedro Magalhes</sign>
</email>

Observeque:

Um documento xml tem um Document type definition no cabealho, representado pela


tag <?xml ?>. Tambm, poder ter novos atributos ou variaes dos mesmos, como por
exemplo: <?xml version="1.0" encoding="ISO8859-1"?>, onde encoding um atributo do
elemento xml, que define a lngua, (cdigos, nmeros, letras, smbolos, ...) no caso o padro

4/29

ISO88591

H uma hierarquiaentreastags/elementosouns.Observequeasindentaes,almdas
tags, ajudam a representar melhor a hierarquia numa estrutura do tipo pai, filhos, netos...,
conformesegue:
<raiz>
<filho1>
<neto1>
</neto1>
</filho1>
</raiz>

Toda tag/elemento deve iniciar com o padro < > e terminar/fechar com a mesma tag
iniciada,porm,acrescidadeumabarra</>,p.ex:<teste>exemplo</teste>

Um par detagsrepresentaumelemento.Noexemploacimafoiutilizadaatag testepara


representar/marcar o elemento exemplo, mas poderia ser utilizado qualquer textoouconjuntode
palavrasnolugardapalavrateste

As tags em XML so cases sensitive, ou seja, <teste> diferente de <TESTE> ou


<Teste>eassimpordiante

todastags/nspodemteratributosparadescreveroselementos:

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

EXEMPLO 2
<?xml version="1.0"?>
<pessoa sexo=masculino>

<pessoa>
<sexo>masculino</sexo>

<nome>Pedro</nome>

<nome>Pedro</nome>

<sobrenome>Mrio</sobrenome
>

<sobrenome>Mrio</sobrenome>

</pessoa>

</pessoa>
No exemplo1,sexoumelemento,pormjnoexemplo2umatributodoelementopessoa.

5/29

A escolha de uma forma ou de outra deve ser orientadapelasoluoquesequerdar,sendoquesedeve


evitar o uso de atributosquandooelemento possuirmltiplosvaloresparaomesmoatributo,umavezque
os mesmos no podem ser expandidos (cada atributo deve ter apenas um valor), no podem descrever
estruturase,ainda,sodedifcilmanuteno.
FONTES:

2.

CURSOGRATUITO: http://www.w3schools.com/xml
TESTEDECONHECIMENTO:http://www.w3schools.com/xml/xml_quiz.asp
CERTIFICAOXML(U$95):http://www.w3schools.com/cert

XSL(eXtensibleStylesheetLanguage)
2.1.

XSLBSICO

A linguagem XSL (Linguagem de Folha de Estilos Extensvel) surgiu da necessidade de se


melhorar a apresentao/estilizao/formatao de um documento XML em HTML. A XSL foi criada
para dar uma forma prtica de leitura aos dados em formato XML num navegador, ou seja, ela permite
apresentar os dados de uma maneira mais inteligvel. Abaixo serdemonstradootexto (cdigofonte)do
documento aviso.xml que est em um computador localeomodocomoapresentadononavegadorde
internet(browser)naformapura:
CDIGOFONTEaviso.xml

APRESENTAOVIABROWSER

<?xmlversion="1.0"?>
<aviso>
<para>Janicedata="01/04/2000"</para>
<de>Jefferson</de>
<cabecalho>Lembrese</cabecalho>
<corpo>Amanhavocetemprovade
matematica</corpo>
</aviso>

6/29

A linguagem XSL pode apresentar as informaes de um modo mais amigvel ao usurio,


bastando referenciar no documento XML o arquivo XSL que uma linguagem de estilos padro para
arquivos XML, podendo ainda utilizar acombinaodaslinguagensHTML+CSSnoarquivoXSL.Para
referenciar, basta acrescentar a seguinte tag no arquivo XML aps o cabealho: <?xmlstylesheet
type="text/xsl"href="/var/www/xxxx.xsl"?>
Obs:Oxxxx.xslonomedoarquivoXSLqueestnodiretrioindicadoacima.
Aps referenciadooXML,devesecriaroarquivocomaextensoXSL,usarelementos/tags do
XSL para ler as informaes do XML, definir os formatos/estilos/lugares ondecadainformaodever
estaremsuaapresentaoutilizandoHTMLeCSS.
Antes de mostrar a eficciadoXSL,quetambmumalinguagemdemarcaoXML(porissoa
declarao <?xml?> usadanocabealho),sernecessriaumaespecificao pormeiodecomentrios
de sua estrutura/cdigofonte e obrigatoriedade, observando a indicao SIM = obrigatrio para todos
XSL e, DEPENDE quando depender da lgica do documento, ou seja, varivel/no obrigatria.
Observeaestruturadehierarquiaapresentadanasindentaesdocdigofonteaseguir:
CDIGOFONTE
1

<?xmlversion="1.0"?>

COMENTRIOS
Declarao/especificaodotipode
documento,quenestecasoXML.

Obrigatrio?
SIM

Declarao/especificaoPADROda

<xsl:stylesheetversion="1.0"
linguagemXSLdeacordocomos
xmlns:xsl="http://www.w3.org/1999/XS
padresdaW3CparaTransformaesno
L/Transform">

SIM

XML.

ElementodeInciopadrodaraiz
principal('/')doXSL

<xsl:templatematch="/">

Exemplodousodoelementoforeachdo
<xsl:foreachselect="xxxxx"> XSLparafazerloopquandosequer
aplicarosestilosparacadaelementox
encontradonoxml

</xsl:foreach>

Todoelementoiniciadodeveser
finalizado/fechado!Nestecasofoi
finalizadooforeach.

DEPENDE

...

QualqueroutroelementodoXSL,assim
comooforeach,desdequenose
esqueadefechalo.

DEPENDE

</xsl:template>

Todoelementoiniciadodeveser

7/29

SIM

DEPENDE

SIM

finalizado/fechado!Nestecasoo
fechamentodotemplateraiz.

FimdodocumentoXSL.

</xsl:stylesheet>

SIM

OcdigofonteapresentadoacimaapenasaestruturadoXSLpuro,ondetemos:
asdeclaraesdecabealho(stylesheet)
oinciodaraiz/diretrioprincipal(templatematch)
algicaadequadaparaleituradoXML(foreach)
finalizaesdatagraiz.
OBS: As indentaes representam a hierarquia,obedecendoasmesmasregrasdepais,filhos,netos...,do
XML.

2.2.

ESTRUTURADEUMXSLBSICO

OXSLdivideseemtrspartes:
XSLTransformations(XSLT):LinguagemparatransformarXML
XPath:LinguagemparaacessarereferiraspartesdedocumentoXML
XSLFO:VocabulrioXMLparaespecificarsemnticasdeformatao.
As trs so importantes, porm s trataremos a XSLT,necessriacriao dosmodelos/leiautes
dedocumentoslegislativosnoSAPL.
Como exemplo, ser criado o arquivo aviso.xsl para testes em computador local, especificando
cada linha de cdigo, pelos comentrios abaixo, passoapasso de modo a permitir maior clareza, como
segue:
1PASSOcriar,nomearesalvarumarquivovaziodetextocomoaviso.xsl
2PASSOcopiarastagsbsicasdopadroXSLconformeabaixoe,emseguida,salvalas:
CDIGOFONTEaviso.xsl
<?xmlversion="1.0"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:templatematch="/">

8/29

</xsl:template>
</xsl:stylesheet>

3PASSOcriaraestruturaHTML+CSSe,emseguida,salvala:
OBS:oCSSpodeserusadodentrodatagstyle(nfilhonohtml)ouemcadaelementodo
prprioHTML.
CDIGOFONTEaviso.xsl
<?xmlversion="1.0"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:templatematch="/">
<html>
<style type="text/css">
</style>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Esta a estrutura bsica do XSL e est pronta para iniciar o configurao/programao dos
estilosdosXMLs.Observeque:
Elementos do HTML e/ou CSS s podem estar dentro dos elementos template, assim como
nveis filhos, netos, etc.... Ou seja, entre as tags <xsl:templatematch="/">e</xsl:template>
nenhumelementodeveconstaraps</xsl:tamplate>ede</xsl:stylesheet>
A partir deste ponto, podese utilizar todas as ferramentas/recursos que o HTML e/ou CSS
fornecemparaumapgina/documentodatag<html>at</html>

9/29

2.3.

PRINCIPAISELEMENTOSXSL

Neste momento, a parte mais importante e esperada a de busca das informaes do arquivo
XML para povoar a pgina html ou, o documento de sada tratado neste escopo. Para que cada
informao especfica aparea na pgina/documento, necessrio conheceroselementosdoXSL,pois,
atravs deles que, por sua semntica, sero buscadas as informaes no/do documento XML dado a
tag/nreferente,destinadasaoplano/configuraofeitanoarquivofonteXSL.

ElementosXSL
applyimports

Aplicaumaregradotemplatedeumafolhadeestiloimportado.

applytemplates

Aplicaumaregradotemplatenoelementocorrenteounosnveisfilhos
doelementocorrente.

attribute

Adicionaumatributo.

attributeset

Defineumconjuntodeatributos.

calltemplate

Fazumachamadaaumtemplate.

choose

Usadoemconjuntocom<when>and<otherwise>paraexpressar
mltiplostestescondicionais.

comment

Criaumncomentadonarvoreresultante.

copy

Criaumacpiadoncorrente(semosnveisfilhoseatributos).

copyof

Criaumacpiadoncorrente(comosnveisfilhoseatributos).

decimalformat

Defineoscaracteresesmbolosaseremusadosquandoseconverte
nmerosemstrings,comafunoformatnumber().

element

Criaumelementonodocumentodesada.

fallback

Especificaumcdigoalternativopararodarseoprocessadorno
suportarumelementoXSLT.

foreach

Comandoderepetioparacadanemumnespecfico.

if

Aplicatemplate(s)apenasseacondioespecificadaforverdadeira.

import

Importaocontedodeumafolhadeestiloemoutra.Nota:Umafolha
deestiloimportadaterprioridadeinferiordaquelaqueaimportou.

10/29

include

Incluiocontedodeumafolhadeestiloemoutra.
Nota:Umafolhadeestiloinclusateramesmaprioridadedafolhade
estiloqueaincluiu.

key

Declaraumachavenomeada,quepodeserusadanafolhadeestilocom
afunokey().

message

Escreveumamensagemdesada(usadoparareportarerros).

namespacealias

Substituiumnamespacenafolhadeestilocomumnamespacediferente
nasada.

number

Determinaaposiointeiradoncorrenteeformataumnmero.

otherwise

Especificaumaaodefaultparaoelemento<choose>.

output

Defineoformatododocumentodesada.

param

Declaraumparmetrolocalouglobal.

preservespace

Defineoelementoparacadaespaoembrancoaserpreservado.

processinginstruction Escreveumainstruodeprocessamentonasada.
sort

Ordenaasada.

stripspace

Defineoelementoespaoembrancoaserremovido.

stylesheet

Defineoelementoraizdafolhadeestilo.

template

Regrasaseremaplicadasaonespecificado.

text

Escreveotextoliteralnasada.

transform

Defineoelementoraizdafolhadeestilo.

valueof

Extraiovalordonselecionado.

variable

Declaraumavarivellocalouglobal.

when

Especificaumaaoparaoelemento<choose>.

withparam

Defineovalordeumparmetroaserpassadonotemplate.

2.4.

ESTRUTURADOELEMENTOSXSL

11/29

ParautilizarcorretamenteoselementosXSL,deveseobservaraformasintticapadro,poish
algumasvariaesqueserdemonstradaecomentadanatabelaabaixo:
ELEMENTOS

COMENTRIO

<xsl:text>email:</xsl:text>

Inserodecaracteres/textoElemento
usadoparainserircaracterestextuaisno
documentodesada.Noexemplo,ser
impressoemail:diretamentenolocalonde
forusadonapaginadeestilo.

<xsl:valueofselect=aviso/corpo/>

Buscarelementos/atributosdon
Elementoquebuscatodainformao
marcadadoxmlpelatag/ncorpononvel
filhodoavisoeapresentadanodocumento
desada.

LaoforeachElementoderepetioque
precedeoutroelementoXSL,usadopara
aplicarumalgica/programaorepetidaa
<xsl:foreachselect=aviso></xsl:foreach> umconjuntodenodos/elementodoXML,
que,nestecaso,nosnveisfilhosdeaviso.
Esteoutroelementopodeserqualquer
elementodestatabelaedoXSL.
<xsl:applytemplatesselect=nomedon/>
ou<xsl:applytemplates/>
<xsl:choose>
<xsl:whentest=testsituation>
stylesheetcommands
</xsl:when>
<xsl:otherwise>
stylesheetcommands
</xsl:otherwise>
</xsl:choose>
<xsl:iftest=testsituation></xsl:if>

AplicartemplatesElementousadopara
aplicaroelementonomedon.Casoesteja
semoselect,aplicartodootemplate.
LaoCondicionalChooseTratasede
umlaocondicional,sendoqueseoprimeiro
teste(when)forbemsucedidosero
executadososseuscomandos,caso
contrrio,executaroutroscomandosda
condiootherwise.Ousodootherwise
obrigatrioe,quandonohouverem
comandosparaele,deveseusarapenas
</xsl:otherwise>aoinvsdoblocotodo.
LaoCondicionalsimples(if)Sexecuta

12/29

ocomandocasoacondiotestseja
satisfeita.
CriarvarivelElementoquecriaa
<xsl:variablename=x>atribuirumvalorax
varivelx,comvalorigualaatribuirum
aqui...</xsl:variable>
valoraxaqui.
<xsl:valueofselect=$x/>

UsarvalordaVarivelElementoque
acessaovalordavarivelxcriadaacima

<xsl:elementname=aviso2>
<xsl:attributename=valor>
<xsl:text>2013</xsl:text>
</xsl:attribute>
</xsl:element>

Criarnovoelemento+atributoCriar
novoelementoaviso2comatributovalor=
2013paraserutilizadonodocumentode
sada.

<xsl:sortselect="ano"datatype="number"
order="ascending"/>

2.4.

ElementodeordenaoElementoque
ordena/agrupainformaesdeacordocom
parmetros/filtros.Nestecaso,obtmse
todasasinformaesdonanoeorganiza
pordataemordemcrescente.

EXTENSESXSL

PodemseradicionadasnovasfuncionalidadeslinguagemXSLusandoextensesquedevemser
declaradascomoatributosdatag<xsl:stylesheet>.Atabelaabaixodemonstraalgumaspara
exemplificao:

EXTENSO

LINGUAGEM

<xsl:stylesheetxmlns:java="http://xml.apache.org/xslt/java">

JAVA

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

XSL

<xsl:stylesheetxmlns:html="http://www.w3.org/1999/xhtm">

HTML

<xsl:stylesheetxmlns:gx="http://www.google.com/kml/ext/2.2">

OGCKML
(GoogleEarth)

2.5.

XSLparaoSAPL

O SAPL o sistema que automatiza as atividades legislativas, tornando mais fcil a produo
legislativa, como forma de apoiar as Casas Legislativas nas suas atividades relacionadas ao processo

13/29

legislativo em geral, tais como: elaborao de proposies, protocolo e tramitao de matrias


legislativas, organizao da pauta da sesso, registro de votaes nas sesses plenrias, manuteno
atualizada da base de leis, entre outras. Por exemplo, as Proposies digitadas so armazenadas
segundo o padro XML. Aps deliberao, votao e encaminhamento para o executivo sancionar ou
vetar, a matria poder retornar ao sistema, na forma de lei, quandopassaafazerparte dabasedeLeis
MunicipaisouNormasJurdicas.
Documentos como Indicao, Moo, Ofcio, 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, bastadigitarnobrowseraURL:http://localhost:8080/manage,indicarusurio
e senha (autenticao), acessar no painel, no ladoesquerdodatela,aspastassaple,emseguida,XSLT
e por ltimo HTML, ou seja, /sapl/XSLT/HTML. No repositrio HTML, tmse todos os modelos
XSLdisponveisparaosdocumentos.Observeoprintscreemabaixo:

Ser usado o modelo pl.xsl que o estilizador do documento Projeto de Lei do SAPL. Ao
clicar no arquivo acima referido, temse acesso ao seu cdigo fonte, que, neste tutorial, ser expandido
gradualmenteecomentadoparafacilitaroentendimentoconformesegue:

14/29

CDIGOFONTEGRUPOBASE
<?xmlversion="1.0"Encoding="ISO88591"?>

COMENTRIO
DeclaraoobrigatriadoarquivoXSL
paralerXML.Nestecaso,sobregrasdo
padroISO88591.

DeclaraoobrigatriaparaarquivoXSL,
queindicainciodaprogramaodos
<xsl:stylesheetversion="1.0"
estilos,buscandoextenso/
xmlns:xsl="http://www.w3.org/1999/XSL/Transform
funcionalidadesdositew3c(conformeo
"xmlns:pl="/XSD/ProjLei">
endereo)ecomaextensodoarquivo
/XSD/ProjLeiqueserlocadanoZOPE.
<xsl:outputencoding="ISO88591"/>

ElementoqueforaasadadoXSLna
codificaodopadroISO88591.

<xsl:templatematch="/pl:pl">

Incio/montagemdaRaizabsoluta
(principal)indicadapor/pl,quesera
medetodoosoutroselementos.

ElementosdeHTML+CSSintegradose
posteriormenteoXSL.

</xsl:template>

Finalizaodaraizabsoluta.

</xsl:stylesheet>

Finalizaodasfolhasdeestilos.

15/29

AbaixoserapresentadoogrupodoHTML+CSSecomentados.Tambmseromostrados
elementosdogrupoXSLsomenteparaefeitodelocalizao,osquaisestaronumtommaisclaroe
somenteseroexplicadosnaprximatabela.
CDIGOFONTEGRUPOHTML+CSS

16/29

COMENTRIO

InciodoHTML.
InciodoHEAD,quetratadas
propriedadesdodocumentode
sada,comoTITLE(ttuloda
pginaHTML),STYLE(estilos/
formataes),referenciar/
importarumdocumentoexterno/
outralocalidade),META
(metadados/informaesque
facilitambuscasnaredeatravs
depalavraschaves),entre
outros.
Margemdireitade1cme
esquerdade2cmdapgina
sada.
Noexemplo,todoequalquer
pargrafoserfontetamanho12
eemTimesNewRoman.
<html>

Todopargrafodaclasse
epgrafesercentralizado,letra
maisculaeemnegrito.

<head>
<title>
<xsl:valueofselect="@id"/>
</title>
<styletype="text/css">

Todopargrafodaclasse
ementaserjustificadocoma
margemesquerdaalinhadaa
partirdametadedodocumento.
Todopargrafodaclasse
prembuloseremmaisculae
avanadode1cmdamargem
esquerda.

body{marginleft:2cmmarginright:1cm}

Todopargrafodaclasseartigo
serjustificadoeavanadode2
cmdamargemesquerda.

p{fontfamily:Timesfontsize:12pt}

Todopargrafodaclasse

17/29

p.epigrafe{textalign:centertexttransform:uppercase
fontweight:bold}

p.paragrafo{textalign:justifytextindent:2cm}

p.inciso{textalign:justifytextindent:1cm}

p.alinea{textalign:justifytextindent:1cm}

pargrafoserjustificadoe
avanadode2cmdamargem
esquerda.
Todopargrafodaclasseinciso
serjustificadoeavanadode1
cmdamargemesquerda.
Todopargrafodaclassealnea
serjustificadoeavanadode1
cmdamargemesquerda.

p.item{textalign:justifytextindent:1cm}

Todopargrafodaclasseitem
serjustificadoeavanadode
1cmdamargemesquerda.

p.justificativa{textalign:justifytextindent:7cm}

Todopargrafodaclasse
justificativaserjustificadoe
avanode7cmdamargem
esquerda.

p.mensagem{textalign:justify}

Todopargrafodaclasse
mensagemserjustificado.

p.data_apresentacao{textalign:justify}

Todopargrafodaclasse
data_apresentacaoser
justificado.

p.autor{textalign:centertexttransform:uppercase}

Todopargrafodaclasseautor
sercentralizadoeem
maisculas.
Todopargrafodaclassecargo
seralinhadonocentroda
pgina.

p.cargo{textalign:center}

h3.cab_secao{textalign:centerfontsize:12pt}

18/29

Todottulocomtagh3quefaz
partedaclassecab_secaoser
centralizadocomtamanhode
fonte12.

Deixaemnegritotodosatributos
rtulodoelementoartigo,ou
sejaArt1,Art2,etc.

artigo[rotulo]{fontweight:bold}

Fechamentodosestilos(style)e
propriedades(head)desta
pgina/documento.
</style>
</head>
<body>

Inciodomodelo/contedoda
pgina/documento.
Criaodeumatabelapara
melhoralinhamentoda
logomarcadaCasaLegislativae
dotexto/cabealho.

<table>

Criaodeumalinhanatabela
comcontedoalinhadoadireita.

<tralign="right">

Inciodeinserodedadosna
linhacriadaacima.

<tdwidth="77"heigth="81">
<img
src="/sapl/portal_skins/sk_sapl/imagens/logo_casa.gif">

Inserodaimagemdo
Braso/LogodaCasaLegislativa
peloendereoqueestno
atributosrc,localizadono
ZOPE.
Finalizaodoelementoimagem
edeinserodedadonalinha.

</img>
</td>

Inciodeinserodedado/
Textoexemplo(Cmara
<tdalign="left"heigth="40">CmaraMunicipaldePiraMunicipaldePira)que,neste
caso,estnamesmalinhada
<br/>EstadodoRiodeJaneiro</td>
imagem.Atagbrforaa
quebradelinhadotextopara
queorestantesejaescritona
prximalinha.

19/29

</tr>
</table>

Finalizaodalinha(tr)e
finalizaodatabela(table).

<br/>

Pulalinha.

<xsl:applytemplates/>
<hrcolor="#8B4513"size="4"width="90%"></hr>
<hrcolor="#8B4513"size="1"width="90%"></hr>

Crialinhahorizontalcomacor
#8B4513,comespessura4e
queocupa90%dafolha.

Inciodeumpargrafocujo
<palign="center">RuaDr.LuizAntonioG.da
contedoestarcentralizado.
Silveira,16Centro,Pira/RJCep:27175/000</p><p
Nestecaso,tratasedorodape
align="center">email:<ahref="mailto:cmpirai@pirai.rj.leg.br">
foicolocadonestelocalparaque
cmpirai@pirai.rj.leg.br</a></p><palign="center"padding="0">
sejamostradoindependentede
Telefax:(24)24119500</p>
qualquerelemento.Aposio
corretaserianofinaldocdigo
fonte?No!Poisestariaforada
tag</html>queofimdo
documento.
Trminodomodeloecorpodo
documento.

</body>
</html>

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:valueof select="@id"/> e <xsl:applytemplates/>. O primeiro XSL busca a informao
marcada pelo atributo id (vide apresenadosmbolo@)eocolocanaTITLEdodocumento,queser
gerado, dando o mesmo nome/cdigo do XML para o documento de sada. J o segundo, serve para
chamar todos elementos XSL do arquivo XSL e apliclos nas posies em que se encontram, ou seja,
no importa se os elementos XSL esto aps a TAG de finalizao </html>, pois o
<xsl:applytemplates/> localiza todos e aplica na mesma sequncia em que se encontram definidos no
localindicadopor<xsl:applytemplates/>.

20/29

Aps conhecer os dois elementos especiais e suas utilidades, falta apenas conhecer os restantes
dos elementos XSL, que sero aplicados a cada elemento do XML conforme ser demonstrado e
comentadoaseguir.VejacomoidentificarprimeiramenteoselementosXML:

Este exemplo tratar da proposio de Projeto de Lei no SAPL. Os campos acima


(Proposio, Justificativa, DatadeApresentao,AutoreMensagemdeEncaminhamento)so
filhosdopl(PojetodeLei).Exemplificando,aestruturadoXMLseriadaseguinteforma:
<?xmlversion="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

<paragrafo>
<paragrafo_text></paragrafo_text>
</paragrafo>
</artigo_text>
</artigo>
</capitulo>
</titulo>
</livro>
</parte>
</proposicao>
<justificativa></justificativa>
<datadeapresentacao></datadeapresentacao>
<autor></autor>
<mensagem></mensagem>
</pl>

CDIGOFONTEGRUPOXSL
<xsl:templatematch="pl:proposicao">

COMENTRIO
ElementoXSLqueiniciaoconjuntodeestilos
paraoelementoproposiodoXML.

<xsl:applytemplatesselect="./*"/>

ElementoqueaplicaestilosXSLemum
conjuntodeelementosdoXML.Nestecaso,o
selectapontaparatodososelementos(*)da
mesmahierarquia/nvel(/)sendoqueo
elementorootseraproposio.

</xsl:template>

Fechamentodoprimeirotemplate.

<xsl:templatematch="pl:epigrafe">

ElementoXSLqueiniciaconjuntodeestilos
paraoelemento/nepgrafedoXML.

<pclass="epigrafe">

HTML:marcaodeinciodepargrafoda
classeepgrafe.

<xsl:valueofselect="pl:epigrafe_text"/>
</p>
</xsl:template>

Buscaainformaotagueada/marcadaspor
epgrafe_text.
HTML:Fechaopargrafo
Fechafolhasdeestilosparaaepgrafe.

22/29

<xsl:templatematch="pl:ementa">
Inicializaestilosparaoelementoementado
XML.
<br/><br/>
<pclass="ementa">

<xsl:valueofselect="pl:ementa_text"/>
</p>

HTML:Salta2linhas.
HTML:Inciodepargrafodaclasseementa.
Buscaainformaotagueada/marcadaspor
ementa_text.
HTML:Fechapargrafodogrupoementa.

</xsl:template>

Fechaasfolhasdeestilosparaaementa.

<xsl:templatematch="pl:preambulo">

Inicializaestilosparaelementoprembulodo
XML.

<pclass="preambulo">

<xsl:valueofselect="pl:preambulo_text"/>
</p>

HTML:Inciodepargrafodaclasse
prembulo.
Buscaainformaotagueada/marcadaspor
preambulo_text.
HTML:Fechapargrafodogrupoementa.

</xsl:template>
<xsl:templatematch="pl:artigo_text">
<pclass="artigo">

Fechaasfolhasdeestilosparapreambulo.
Buscaainformaotagueada/marcadaspor
artigo_text.
HTML:Inciodepargrafodaclasseartigo.

<b>
HTML:Inciodenegrito.
<xsl:valueofselect="../@Rotulo"/>

</b>

BuscaovalordoatributodeRotuloqueno
estanonatualesimnoanterior,ouseja,o
capitulo.
HTML:Trminodenegrito.

<xsl:valueofselect="concat('',text())"/>
Buscanoelementoartigo_text,osvaloresque

23/29

afunotext()retornar(quesertodootexto)
concatenadocomumespaoembrancono
incio.
</p>

HTML:Trminodopargrafodaclasse
artigo.

</xsl:template>

Fechafolhasdeestilosparaartigo_text.

<xsl:templatematch="pl:paragrafo_text">

Buscaainformaotagueada/marcadaspor
paragrafo_text.

<pclass="paragrafo">

HTML:Inciodepargrafodaclasse
paragrafo.

<xsl:valueofselect="concat(../@Rotulo,'
',text())"/>

Buscanoelementoparagrafo_textosvalores
doatributoRotulodoelementoanteriore
concatenacomumespaoembranco,maiso
valorretornadoportext().

</p>

HTML:Fechamentodepargrafodaclasse
paragrafo.

</xsl:template>
Fechafolhasdeestilosdeparagrafo_text.
<xsl:templatematch="pl:inciso_text">

Iniciaestilosparaoelementoinciso_textdo
arquivoXML.

<pclass="inciso">

HTML:Inciodepargrafodaclasseinciso.

<xsl:valueofselect="concat(../@Rotulo,'
',text())"/>

Buscanoelementoinciso_textosvaloresdo
atributoRotulodoelementoanteriore
concatena/juntacomoemaisovalor
retornadoportext().

</p>

HTML:Trminodepargrafodaclasse
inciso.

</xsl:template>
Fechafolhasdeestilosdeinciso_text.
<xsl:templatematch="pl:alinea_text">

Buscaainformaotagueada/marcadaspor

24/29

alinea_text.
<pclass="alinea">
<xsl:valueofselect="concat(../@Rotulo,'
',text())"/>
</p>

HTML:Inciodepargrafodaclassealinea.
Buscanoelementoalinea_textosvaloresdo
atributoRotulodoelementoanteriore
concatena/juntacomumespaoembranco
maisovalorretornadoportext().
HTML:Fechapargrafodaclasse
alinea_text.

</xsl:template>

Fechafolhasdeestilosdealinea_text.

<xsl:templatematch="pl:item_text">

Iniciaestilosparaoelementoitem_textdo
arquivoXML.

<pclass="item">

HTML:Inciodepargrafodaclasseitem.

<xsl:valueofselect="concat(../@Rotulo,'
',text())"/>

Buscanoelementoitem_textosvaloresdo
atributoRotulodoelementoanteriore
concatena/juntacomumespaoembranco
maisovalorretornadoportext().

</p>

HTML:Fechapargrafodaclasseitem.

</xsl:template>

Fechafolhasdeestilosdeitem_text.

Iniciaestilosparaoelemento
<xsl:templatematch="pl:data_apresentacao_text">data_apresentacao_textdoarquivoXML.
<pclass="data_apresentacao">

<xsl:valueofselect="text()"/>

</p>

HTML:Inciodepargrafodaclasse
data_apresentacao.
Buscanoelementodata_apresentacaoos
valoresRetornadosdafunotext(),cuja
retornatodootexto/palavrasqueesto
tagueadasporesteelemento.
HTML:Fechapargrafodaclasse
data_apresentacao.

25/29

Fechafolhasdeestilosde
data_apresentacao_text.

</xsl:template>

Iniciaestilosparaoelementoautor_textdo
arquivoXML.

<xsl:templatematch="pl:autor_text">
<br/><br/>

HTML:Saltaduaslinhas.

<pclass="autor">
<xsl:valueofselect="text()"/>

HTML:Inciodepargrafodaclasseautor.
Buscanoelementoalinea_textosvaloresdo
atributoRotulodoelementoanteriore
concatena/juntacomumespaoembranco
maisovalorretornadoportext().

</p>

HTML:Trminodepargrafoautor.

</xsl:template>

Fechafolhasdeestilosdeautor_text.

<xsl:templatematch="pl:cargo_text">

Iniciaestilosparaoelementocargo_textdo
arquivoXML.

<pclass="cargo">

HTML:Inciodepargrafodaclassecargo.

<xsl:valueofselect="text()"/>

Buscanoelementocargo_textosvaloresdo
retornadospelafunotext(),queretorna
apenastexto.
HTML:Inciodepargrafodaclassecargo.
HTML:Salta3linhas.

</p>
<br/><br/><br/>
</xsl:template>

Fechafolhasdeestilosdecargo_text.

<xsl:templatematch="pl:justificativa">

Iniciaestilosparaoelementojustificativado
arquivoXML.

<br/><br/>

HTML:Saltaduaslinhas.
HTML:Criaoreferidotextocentralizado

26/29

<b><palign="center">JUSTIFICATIV
A:</p></b>

HTML:Saltaumalinha.

<br/>
<pclass="justificativa">

<xsl:valueof
select="pl:justificativa_text"/>

HTML:Inciodepargrafodaclasse
justificativa.
Buscaainformaotagueada/marcadaspor
justificativa_text.

</p>

HTML:Fimdopargrafodaclasse
justificativa.

<br/>

HTML:Saltaumalinha.

</xsl:template>

Fechafolhasdeestilosdejustificativa.

<xsl:templatematch="pl:mensagem">

Iniciaestilosparaoelementomensagemdo
arquivoXML.

<h3class="cab_secao">MENS HTML:Criaotextonapginanotamanhode
AGEM:</h3>
h3.
<br/>

HTML:Saltaumalinha.

<pclass="mensagem">

HTML:Inciodepargrafodaclasse
mensagem.

<xsl:valueof
select="pl:mensagem_text"/>
</p>

Buscaainformaotagueada/marcadaspor
mensagem_text.
HTML:Fimdopargrafodaclasse
mensagem.

</xsl:template>

Fechafolhasdeestilosdemensagem.

</xsl:stylesheet>

Finalizatodasfolhasdeestilos.

27/29

ApspreencheroscamposdoProjetodeLeinoSAPL(videfiguraanterior)easfolhas
de estilos programadas conforme a tabela acima, temse o seguinte documento de sada
estilizadopelalinguagemXSLconformeabaixo:

28/29

29/29

30/29

31/29