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

Post on 24-May-2018

224 views 2 download

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

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

Transformacao e apresentacao dedocumentos XML

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

...

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

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

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

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

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

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

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

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

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

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

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