Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao...

31
Plano das aulas Aula 3 Documentos em XML Estruturas l´ ogicas Estruturas f´ ısicas Modelos e DTDs Constru¸ ao de modelos. Exemplos Aula 5 Processamento de XML Analisadores sint´ acticos e o SAX DOM Xpath XSL Aula 6 Transforma¸ ao e apresenta¸ ao de documentos XML XSLT CSS Departamento de Ciˆ encia de Computadores da FCUP — ADI2 — Aula 6 1

Transcript of Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao...

Page 1: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Plano das aulas

Aula 3 Documentos em XML

• Estruturas logicas• Estruturas fısicas• Modelos e DTDs• Construcao de modelos. Exemplos

Aula 5 Processamento de XML

• Analisadores sintacticos e o SAX• DOM• Xpath• XSL

Aula 6 Transformacao e apresentacao de documentos XML

• XSLT• CSS

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 1

Page 2: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Transformacao e apresentacao dedocumentos XML

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 2

Page 3: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

XSLT

Uma folha de estilo XSLT define um conjunto de regras de transformacao que seraoaplicadas a um documento XML (arvore fonte) para produzir outro documento XML(arvore resultado). As regras associam padroes a formas (templates).Os padroessao expressoes XPath que sao satisfeitas por elementos na arvore fonte. As formassao instanciadas para construir a arvore resultado.

Permite:

• adicionar texto ao conteudo de elementos

• remover, criar, alterar e ordenar os conteudos dos elementos

• converter conteudo de elementos para valores de atributos, ou vice-versa

• alterar a ordem dos elementos

• substituir elementos por novos elementos

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 3

Page 4: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Processadores de XSLT

Existem varias ferramentas e varias que fornecem APIs para incluir o processamentoem programas: Java, C, python, perl . etc

XT Escrito por James Clark http://www.jclark.com/xml/xt.html (em Java)

Xalan parte do projecto Apache (em C); muito rapido http://www.apache.org/xalan

Saxon escrito por Michael Kay (so par Windows ?) http://saxon.sourceforge.net

4xslt em Python http://4suite.org/

Oracle http://technet.oracle.com

Navegadores WWW podem transformar o documento

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 4

Page 5: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

A linguagem XSLTE definido o espaco de nomes (namespace): xsl.O elemento raiz e xsl:stylesheet (ou xsl:transform)<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0">....</xsl:stylesheet>

Pode tambem ser ser embebido noutro documento XML<?xml-stylesheet type="text/xsl" href="#estilo" ?><elemento-raiz>

<xsl:stylesheet id="estilo" ...>...

</xsl:stylesheet>...</elemento-raiz>

ou apenas referenciado:<?xml-stylesheet type="text/xsl" href="estilo.xsl" ?>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 5

Page 6: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Regras de transformacaoUma regra de transformacao e definida pelo elemento xsl:template e tem comovalor do atributo match o padrao a ser satisfeito:

<xsl:template match="*|/">...

</xsl:template>

*|/ satisfaz qualquer no ou o elemento raiz

<xsl:template match="ADDRBOOK">...

</xsl:template>

<xsl:template match="text()|@*">...

</xsl:template>

text()|@* satisfaz qualquer conteudo de texto ou o valor de um atributo

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 6

Page 7: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Processamento recursivoPara que as regras sejam aplicadas a hierarquia de elementos e necessario usar oelemento xsl:apply-templates

<xsl:template match="/"><html><body><xsl:apply-templates />

</body></html></xsl:template>

A seguinte regra e aplicada por omissao a toda a estrutura:

<xsl:template match="*|/"><xsl:apply-templates/>

</xsl:template>

Isto permite descer na estrutura sem obrigar a haver regras para todos os elementos.

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 7

Page 8: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Obter o valor de um noO elemento xsl:value-of permite a copia para a arvore resultado do valor dumaexpressao que e o valor do seu atributo select:

<xsl:value-of select="."/>

<xsl:value-of select="PHONENUM[@DESC="Cell"]">

A regra por omissao para a escrita de texto e:

<xsl:template match="text()|@*"><xsl:value-of select="."/>

</xsl:template>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 8

Page 9: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Processamento selectivo

Podemos selecionar quais os filhos que se pretende processar, usando o atributoselect de apply-templates:

<xsl:template match="ENTRY"><tr><td><xsl:value-of select="NAME"/></td><td><xsl:apply-templates select="PHONENUM[@DESC=’Cell’]"/></td>

</tr></xsl:template>

Ou selecionar para processamento qualquer outro elemento:

<xsl:template match="ADDRBOOK"><xsl:apply-templates select="//NAME"></xsl:template>

Copia os nomes para o inıcio do elemento ADDRBOOK

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 9

Page 10: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Modos de processamentoUm documento pode ser processado de diversos modos para produzir estilosdiferentes, p.e:

• Indices: remissivo ou conteudos

• Apresentacao na Web ou para impressao em papel

O atributo mode dos elementos xsl:template e xsl:apply-templates permitedefinir num mesmo documento os diversos processamentos:<xsl:template match="/">

<html><body><xsl:apply-templates mode="indice"/><xsl:apply-templates />

</body></html></xsl:template><xsl:template match="ADDRBOOK" mode="indice">

<ol><xsl:apply-templates mode="indice"/></ol></xsl:template><xsl:template match="ENTRY" mode="indice">

<li><xsl:value-of select="NAME"/></li></xsl:template>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 10

Page 11: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Iteracao

Podemos iterar sobre um conjunto de elementos dum mesmo tipo usando o elementoxsl:for-each.

O valor do seu atributo select e o conjunto de nos para os quais sao aplicadas asregras:

<xsl:for-each select="PHONENUM"><tr><td><xsl:value-of select="@DESC"/></td><td><xsl:value-of select="."/></td>

</tr></xsl:for-each>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 11

Page 12: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

OrdenacaoDado um conjunto de elementos selecionados pela avaliacao de xsl:applytemplates ou xsl:for-each, podemos ordena-los com xsl:sort

<xsl:for-each select="PHONENUM"><xsl:sort select="@DESC"/>

<tr><td><xsl:value-of select="@DESC"/></td><td><xsl:value-of select="."/></td></tr>

</xsl:for-each>

Tem como atributos

select por omissao ., indica qual o no a ordenar

order ascending, descending

data-type text, number

case-order nao distingue maiusculas/minusculas

Pode haver sucessivos xsl:sort, o que permite a ordenacao por varias chaves...

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 12

Page 13: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Output

O elemento xsl:output permite indicar qual o tipo do documento que resulta datransformacao.

<xsl:output method="html" enconding="iso-8859-1">

E util para o tratamento de caracteres especiais e brancos.

Pode tambem especificar-se que a arvore resultado deve ser conforme um dtd:

<xsl:output method="xml"enconding="iso-8859-1" doctype-system="moradas.dtd">

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 13

Page 14: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Variaveis

E possıvel associar a uma string valores constantes ou resultados de avaliacao deuma expressao:

<xsl:variable name="cor">azul</xsl:variable>

<xsl:variable name="conta"><xsl:value-of select="count()">

</xsl:variable>

<xsl:variable name="numero"><xsl:number/></xsl:variable>

O seu valor e obtido antecedendo o nome com $a

<xsl:value-of select="$conta"/>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 14

Page 15: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Pseudo-rotinas

Em XSLT e possıvel simular chamadas a subrotinas se:

• deremos um nome a uma forma

<xsl:template name="cabecalho"><h1> A minha agenda </h1>

</xsl:template>

• invocar-mo-la por nome: xsl:call-template

<xsl:template>...<xsl:call-template name="cabecalho"/>

</xsl:template>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 15

Page 16: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

ParametrosTambem e possıvel passar parametros: xsl:with-param e xsl:param

<xsl:template name="converte"><xsl:param name="horas"/><xsl:param name="minutos"/><xsl:param name="segundos"/><xsl:value-of select="$horas*3600+ $minutos*60+$segundos"/>

</xsl:template>...<xsl:call-template name="converte">

<xsl:with-param name="horas" select="2"/><xsl:with-param name="minutos" select="20"><xsl:with-param name="segundos" select="40">

</xsl:call-template>

Os parametros tambem podem ser globais, isto e, definidos fora de qualquer forma.

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 16

Page 17: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

ControloO elemento xsl:if permite a execucao condicional. A condicao e uma expressaoXPath que e o valor do atributo test.

<xsl:if test="ENTRY"> <xsl:apply-templates/> </xsl:if><xsl:if test=’position() mod 2’> $cor </xsl:if><xsl:if test="preceding-sibling::ENTRY">

<a href="#preceding-sibling::ENTRY[@id]">&lt;</a></xsl:if>

O elemento xsl:choose permite varias alternativas (if... else ...):

<xsl:choose><xsl:when test="preceding-sibling::ENTRY">

<a href="#preceding-sibling::ENTRY[@id]">&lt;</a></xsl:when><xsl:otherwise>

[ &lt; ]</xsl:otherwise>

</xsl:choose>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 17

Page 18: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Hiperligacoes e referencias

Podemos usar a funcao id() do XPath para fazer hiperligacoes entre elementosque tenham atributos unicos ID

<glossario><entrada>

<termo id="editor" xreftexto="editor de texto">Editor de texto</termo><definicao> Programa que permite criar e alterar um <xref refid="ficheiro"/> de texto.</definicao>

</entrada><entrada>

<termo id="ficheiro" xreftexto="ficheiro">Ficheiro</termo><definicao>Os ficheiros permitem manipular e organizar

a informac~ao guardada em memorias secundarias (discos rigıdos,etc) e noutros recursos.

</definicao></entrada>

</glossario>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 18

Page 19: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Para criar hiper-ligacoes em html:

<xsl:template match="xref"><a href="#{@refid}">

<xsl:choose><xsl:when test="id(@refid)/@xreftexto">

<xsl:value-of select="id(@refid)/@xreftexto"/></xsl:when><xsl:otherwise>

<xsl:value-of select="id(@refid)"/></xsl:otherwise>

</xsl:choose></a>

</xsl:template>

obtem-se

<b><a name="editor"></a>Editor de texto: </b>Programa que permitecriar e alterar um <a href="#ficheiro">ficheiro</a> de texto.

<b><a name="ficheiro"></a>Ficheiro: </b>Os ficheiros...

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 19

Page 20: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Criacao de ındices com key()Podemos indexar um documento XML, definindo chaves.

Para definir a chave usamos o elemento xsl:key:

<xsl:key name="nome" match="ENTRY" use="NAME">

Isto cria um ındice de moradas por nome.

Para seleccionar uma morada por nome:

<xsl:value-of select=’key("nome","Luısa Lima")’/>

Para o exemplo das referencias ao glossario podıamos usar a chave:

<xsl:key name="termo-id" match="termo" use="@id"/>

e para criar a hiperligacao:

<a href="#{@refid}"><xsl:value-of select="key("termo-id",@refid)[1]/@xreftexto"/>

</a>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 20

Page 21: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Combinar documentos XMLA funcao document() permite o processamento (de partes) de varios documentos.

O argumento da funcao e um URI para o documento pretendido.

Podıamos ter varios documentos com moradas e querer processa-los em conjunto:<listagem>

<titulo> Moradas </titulo><mo ficheiro="familia.xml"><mo ficheiro="amigos.xml"><mo ficheiro="profissionais.xml">

</listagem>E uma folha de estilo:<xsl:template match="/">

<xsl:for-each select="listagem/mo"><xsl:apply-templates select="documento("@ficheiro")/>

</xsl:for-each></xsl:template><xsl:template match="ADDRBOOK">

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 21

Page 22: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

...

Tambem se pode ir buscar so um extracto do documento.

<xsl:apply-templates select="documento("@ficheiro")/ENTRY/PHONENUM/>

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 22

Page 23: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Mais elementos e extensoes

• introducao de texto: xsl:text

• copiar e criar elementos e atributos novos: xsl:copy, xsl:element,xsl:attribute, xsl:attribute-set

• importar outras folhas de estilo: xsl:import, xsl:apply-imports,xsl:include

• varias funcoes... ver referencia

• Extensoes (a definir por cada processador)

? gerar varios ficheiros de saıda? outras funcoes externas

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 23

Page 24: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Leituras

• [Tid01, XSLT]

• Tutorial de XSLT

• [Bra02, Cap. 17-25]

• [McL00, Java and XML]

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 24

Page 25: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Apresentacao de documentos:formatacao

Caracteres Tipos e tamanhos font, size

Cores Do fundo e dos caracteres color bgcolor

Texto Espaco entre palavras, linhas (line-height); identacao (text-align),maiusculas e minusculas; superescritos, subescritos

Caixas Espaco entre caixas (padding), limites (border), margens, localizacao nacaixa, alinhamento, ...

Tabelas Definicao de estilos para linhas, celulas, cabecalhos,

... limites ()

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 25

Page 26: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

CSSO Cascade Style Sheet foi desenvolvido inicialmente para o HTML. Mas agora jaexistem varias versoes: CSS1, CSS2, CSS3, ...

<head><link rel="stylesheet" href="meu_estilo.css" type="text/css">

</head>

Ou embebido no documento:

<p style="color:blue"> Ola</p>

As suas regras associam a um elemento (ou grupo de elementos) uma especificacaode estilo:elemento {atributo_1:valor_1; ...;atributo_n:valor_n}

h1 {font-size: 32pt; color: blue}p { font-size:medium; text-align:justify; border-width: 2pt; border-style: solid}table { border-spacing: 4pt; border:4pt solid brown}table-caption {font-size: 24pt}

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 26

Page 27: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Referencia e tutoriais: http://www.zvon.org

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 27

Page 28: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

CSS e XMLPodemos associar estilos CSS directamente a elementos XML que a maior parte dosnavegadores WWW ja suporta.

ADDRBOOK { border-spacing: 4pt; border-style: solid brown;}ADDRBOOK {display: table}ENTRY {display: table-row;}NAME {dispaly: table-cell; color:red}ADDRESS {display: table-cell}EMAIL {display: table-cell}PHONENUM {display: list-item}

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 28

Page 29: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Regras Contextuais

Podemos ter regras para elementos dependendo do contexto em que eles aparecem:

<livro><titulo></titulo><capitulo></capitulo>

<titulo></titulo><seccao></seccao><titulo></titulo><tabela></tabela>

...

livro titulo { font-size:24pt; color:red}livro titulo:first-line {font-weight:bold}capitulo titulo { font-size:16pt; color:blue}capitulo:first-letter {font-size: 14pt}

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 29

Page 30: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

CSS2

CSS2 permite mais regras contextuais, mais estilos para texto e estilos paraimpressao

PHONENUM[DESC="Work"] {color:blue}

livro * titulo {color:blue}livro capitulo > p {font-size: 12pt}

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 30

Page 31: Plano das aulas - dcc.fc.up.ptnam/aulas/0102/adi2/aula6.pdf · s˜ao expressoes XPath que s˜ao satisfeitas por elementos ... Podemos iterar sobre um conjunto de elementos dum mesmo

Referencias

[Bra02] Neil Bradley. The XML Companion. Addison Wesley, 3rd edition, 2002.

[McL00] Brett McLaughlin. Java and XML. O’Reilly & Associates, 2000.

[Tid01] Doug Tidwell. XSLT. O’Reilly & Associates, 2001.

Departamento de Ciencia de Computadores da FCUP — ADI2 — Aula 6 31