1 © feup, maio 2002xml/xsl feup faculdade de engenharia da universidade do porto xsl gabriel david...

46
1 © FEUP, Maio 2002 XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David [email protected] Porto, Maio de 2002

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

1

© FEUP, Maio 2002 XML/XSL

FEUPFaculdade de Engenharia da Universidade do Porto

XSL

Gabriel David

[email protected]

Porto, Maio de 2002

Page 2: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

2

© FEUP, Maio 2002 XML/XSL

Estilo vs Conteúdo

• Reutilização de fragmentos de dados: o mesmo conteúdo pode ter um aspecto diferente em contextos diferentes.

• Múltiplos formatos de saída: diferentes tipos de media (papel, online), tamanhos diferentes (manuais, relatórios), diferentes tipos de hardware de saída (palms, workstations).

• Estilos talhados de acordo com as preferências do leitor: tamanho de impressão, côr, layout simplificado para dispositivos áudio.

• Estilos normalizados: normas de estilo organizacionais podem ser aplicados em qualquer altura.

• Autores não precisam de se preocupar com assuntos de estilo: podem escrever os seus artigos técnicos sem se preocuparem com o layout porque o estilo correcto pode ser aplicado depois.

Page 3: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

3

© FEUP, Maio 2002 XML/XSL

Maneiras de mostrar XML

Autor

DTDFolha de

estilos

Documentos

Apresentação

Page 4: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

4

© FEUP, Maio 2002 XML/XSL

Maneiras de mostrar XML

XSLT

XSL

doc

Novodoc

XSLTstylesheet

DTD FO DTD

apresentação

Page 5: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

5

© FEUP, Maio 2002 XML/XSL

Maneiras de mostrar XML

Page 6: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

6

© FEUP, Maio 2002 XML/XSL

XSL• Transformação opcional do documento inicial noutra estrutura• Descrição de como apresentar a informação transformada

• Transformação:– Geração de texto “constante”– Supressão de conteúdo– Mover texto– Duplicar texto– Ordenação– Transformações mais complexas capazes de “gerar” nova informação a partir

da existente• Descrição da informação:

– Especificação do layout do ecrã ou página– Introdução do texto transformado em “containers” básicos (listas, parágrafos,

tabelas...)– Especificação de propriedades de formatação (margem, fontes,

alinhamento...)

Page 7: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

7

© FEUP, Maio 2002 XML/XSL

Componentes do XSL

• XSL: Extensible Stylesheet Language – principais componentes

– XPath: XML Path Language – uma linguagem para referenciar partes específicas de um documento XML

– XSLT: XSL Transformations – uma linguagem para descrever como transformar um documento XML (representado como uma árvore) noutro.

– Formatting Objects e Formatting Properties

Page 8: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

8

© FEUP, Maio 2002 XML/XSL

XML -> Árvore XML resultante

Page 9: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

9

© FEUP, Maio 2002 XML/XSL

Árvores de partida

• Árvore XML para processador XML– Hierarquia de elementos

• Árvore XML para processador XSL– Nó raiz (diferente do elemento raiz)– Elementos– Texto– Atributos– Espaços de nomes– Instruções de processamento– Comentários

Page 10: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

10

© FEUP, Maio 2002 XML/XSL

<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="14-4.xsl"?><PERIODIC_TABLE>

<ATOM PHASE="GAS"> <NAME>Hydrogen</NAME> <SYMBOL>H</SYMBOL> <ATOMIC_NUMBER>1</ATOMIC_NUMBER> <ATOMIC_WEIGHT>

1.00794</ATOMIC_WEIGHT>

<BOILING_POINT UNITS="Kelvin">20.28

</BOILING_POINT> <MELTING_POINT UNITS="Kelvin">

13.81</MELTING_POINT>

<DENSITY UNITS="grams/cubic centimeter"><!-- At 300K -->

0.0899 </DENSITY> </ATOM>

<ATOM PHASE=“LIQUID">

<NAME>Helium</NAME>

<SYMBOL>He</SYMBOL>

<ATOMIC_NUMBER>

2

</ATOMIC_NUMBER>

<ATOMIC_WEIGHT>

4.0026

</ATOMIC_WEIGHT>

<BOILING_POINT UNITS="Kelvin">

4.216

</BOILING_POINT>

<MELTING_POINT UNITS="Kelvin">

0.95</MELTING_POINT>

<DENSITY UNITS="grams/cubic centimeter"><!-- At 300K -->

0.1785

</DENSITY>

</ATOM>

</PERIODIC_TABLE>

Exemplo

Page 11: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

11

© FEUP, Maio 2002 XML/XSL

Page 12: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

12

© FEUP, Maio 2002 XML/XSL

Árvores resultantes

• Outro documento XML– XHTML– Árvore contendo Formatting Objects

• O facto de a árvore resultante ser um documento XML coloca algumas restrições– Não é possível produzir HTML genérico, que não seja ele próprio XML– As ferramentas para analisar as árvores são as mesmas

Page 13: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

13

© FEUP, Maio 2002 XML/XSL

Ligando XSL com XML

• Incluir após a declaração do xml, uma directiva de processamento que aponta para o stylesheet a utilizar.

• Exemplo:

<?xml-stylesheet href=“14-2.xsl” type=“text/xsl”?>

• Comparar com folha de estilo em cascata:

<?xml-stylesheet href=“14-1n.css” type=“text/css”?>

Page 14: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

14

© FEUP, Maio 2002 XML/XSL

Folha de estilo

PERIODIC_TABLE {display : block; text-align : center}

NAME {display : block; font-size : 24pt}

ATOM {color : red}

SYMBOL {display : block; font-size : 18pt; color : yellow}

ATOMIC_NUMBER, ATOMIC_WEIGHT, BOILING_POINT,

MELTING_POINT, DENSITY {display : inline; font-size : 12pt}

Page 15: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

15

© FEUP, Maio 2002 XML/XSL

Visualizador de XML por omissão (IE5)

Page 16: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

16

© FEUP, Maio 2002 XML/XSL

Primeiro exemplo<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="PERIODIC_TABLE"> <h1> Tabela periodica </h1> </xsl:template> </xsl:stylesheet>

Resultado<html><h1>Tabela periodica</h1></html>

Page 17: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

17

© FEUP, Maio 2002 XML/XSL

Esquema básico de funcionamento

• Uma especificação XSLT é constituída por um conjunto de regras (templates)– Cada regra só se aplica aos nós que correspondam ao padrão

especificado no atributo match– Aplicar uma regra significa incluir na árvore de saída o conteúdo da

regra, executando as instruções que este possa conter– Uma instrução <xsl:apply-templates> manda tentar aplicar as regras a

cada um dos filhos directos do nó corrente

• O processamento XSLT começa pelo nó raiz da árvore de entrada e tenta aplicar-lhe as regras que existem– O nó raiz é designado por "/"– Não confundir com o elemento raiz, que vem abaixo e é, neste

exemplo, <PERIODIC_TABLE>– A distinção permite pendurar instruções de processamento em "/" mas

que não têm, neste caso, nenhum template para activarem

Page 18: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

18

© FEUP, Maio 2002 XML/XSL

Folha de estilo simples

<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template><xsl:template match="PERIODIC_TABLE"> <xsl:apply-templates/> </xsl:template><xsl:template match="ATOM"> <P> <xsl:apply-templates/> </P> </xsl:template><xsl:template match="NAME"> <xsl:value-of select="."/> </xsl:template></xsl:stylesheet>

Page 19: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

19

© FEUP, Maio 2002 XML/XSL

Comentários

• Tentativa de aplicação recursiva dos templates, percorrendo os filhos do nó corrente na árvore

• A aplicação efectiva-se quando o nó a ser processado corresponde ao elemento indicado no match

• A instrução <xsl:value-of select="."/> produz na árvore de saída o valor do nó seleccionado no atributo select– O valor de um nó é o texto do seu conteúdo (sem as marcas)– O "." refere-se ao nó corrente (neste caso o elemento NAME)

Page 20: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

20

© FEUP, Maio 2002 XML/XSL

Valor de um nó<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="PERIODIC_TABLE"> <xsl:apply-templates/> </xsl:template> <xsl:template match="ATOM"> <H1><xsl:value-of select="NAME"/></H1> <P> <xsl:value-of select="."/> </P> </xsl:template></xsl:stylesheet>

Page 21: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

21

© FEUP, Maio 2002 XML/XSL

Selecção de nós

• Neste caso o nó corrente é o ATOM, por isso a segunda chamada a value-of produz o seu valor– A instrução <xsl:value-of select="NAME"/> produz o conteúdo de

um elemento NAME, que seja filho do nó corrente (se houvesse mais do que um, teríamos apenas o primeiro; para ter todos seria necessário uma instrução xsl:apply-templates, para iterar, e um template para NAME com value-of de "."

• A instrução <xsl:value-of select="NAME"/> tem o mesmo efeito que a do exemplo anterior– há mais do que uma maneira de especificar o mesmo resultado,

jogando com a indicação de caminhos ao longo da árvore e com a posição corrente

Page 22: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

22

© FEUP, Maio 2002 XML/XSL

Definição de uma tabela<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <head> <title>Atomic Number vs. Atomic Weight</title> </head> <body> <xsl:apply-templates select="PERIODIC_TABLE"/> </body> </html> </xsl:template> <xsl:template match="PERIODIC_TABLE"> <h1>Atomic Number vs. Atomic Weight</h1> <table> <th>Element</th> <th>Atomic Number</th> <th>Atomic Weight</th> <xsl:apply-templates select="ATOM"/> </table>

</xsl:template> <xsl:template match="ATOM"> <tr> <td><xsl:value-of select="NAME"/></td> <td><xsl:value-of select="ATOMIC_NUMBER"/></td> <td><xsl:value-of select="ATOMIC_WEIGHT"/></td> </tr> </xsl:template></xsl:stylesheet>

Page 23: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

23

© FEUP, Maio 2002 XML/XSL

Tabela

Page 24: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

24

© FEUP, Maio 2002 XML/XSL

Aplicação selectiva

• É possível especificar um critério de selecção em apply-templates de forma a só percorrer os filhos que satisfaçam o critério (nó do elemento indicado)

• O atributo select nas primeiras regras é redundante pois os únicos filhos existentes já são nós desses elementos

Page 25: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

25

© FEUP, Maio 2002 XML/XSL

Valor de um atributo

<xsl:template match="MELTING_POINT">

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

<xsl:value-of select="@UNITS"/>

</xsl:template>

Page 26: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

26

© FEUP, Maio 2002 XML/XSL

Mais valores de nós

• Tipo de nó– Raiz– Elemento

– Texto– Atributo

– Espaço de nomes– Instrução de

processamento– Comentário

• Valor– o do elemento raiz– concatenação de todos os dados de

caracteres analisados do elemento, incluindo os dos descendentes

– o próprio nó– o valor do atributo, com as

entidades resolvidas e sem espaços– o URI respectivo– o valor da instrução, sem nome

nem limitadores– o texto do comentário, sem

limitadores

Page 27: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

27

© FEUP, Maio 2002 XML/XSL

Má solução

<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template>

<xsl:template match="PERIODIC_TABLE"> <html> <body> <xsl:value-of select="ATOM"/> </body> </html> </xsl:template></xsl:stylesheet>

Page 28: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

28

© FEUP, Maio 2002 XML/XSL

Ambiguidade

• O problema da solução anterior é o facto de o elemento PERIODIC_TABLE ter vários filhos ATOM o que deixa a instrução value-of ambígua (só mostra o primeiro)

• Melhor <xsl:template match="PERIODIC_TABLE"> <html> <body> <xsl:apply-templates select="ATOM"/> </body> </html> </xsl:template> <xsl:template match="ATOM"> <p><xsl:value-of select="."/></p> </xsl:template>

Page 29: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

29

© FEUP, Maio 2002 XML/XSL

Iteração

• Uma solução alternativa é forçar a iteração com for-each

<xsl:template match="PERIODIC_TABLE">

<html>

<body>

<xsl:for-each select="ATOM">

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

</xsl:for-each>

</body>

</html>

</xsl:template>

Page 30: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

30

© FEUP, Maio 2002 XML/XSL

Condições de selecção<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template>

<xsl:template match="PERIODIC_TABLE"> <html> <head><title>Gases</title></head> <body> <xsl:apply-templates select="ATOM[@PHASE='GAS']"/> </body> </html> </xsl:template> <xsl:template match="ATOM"> <P><xsl:value-of select="."/></P> </xsl:template></xsl:stylesheet>

Page 31: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

31

© FEUP, Maio 2002 XML/XSL

Condições

• A condição [@PHASE='GAS'] filtra os átomos de forma a reter apenas os gasosos e procura regras apenas para esse (daí que não seja preciso repetir a condição no template de ATOM)

Page 32: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

32

© FEUP, Maio 2002 XML/XSL

Caminhos de comprimento variável

<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match="/"> <html> <body> <h1>Elements with known Melting Points</h1> <xsl:apply-templates select="//MELTING_POINT"/> </body> </html> </xsl:template> <xsl:template match="MELTING_POINT"> <p> <xsl:value-of select=".."/> </p> </xsl:template></xsl:stylesheet>

Page 33: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

33

© FEUP, Maio 2002 XML/XSL

Pattern Matching

<xsl: template match=“city/building”> XPath• city/building : building cujo pai é city• city//building : building com um antepassado city• ancestor(city)/building : buildings descendentes directos de um antepassado de city• */building : buildings que sejam filhos directos de qualquer elemento• building/* : elementos que tenham como antecedente directo building• ./building : buildings que sejam filhos do nó corrente• ../building : buildings que sejam sibling (filhos do pai) do nó corrente• city|building : buildings ou cities do nó corrente• id(identificador) : elemento marcado com identificador (absoluto)• node() : um nó• text() : um nó de texto (idem para processing-instruction() )• /ArcWorld/ : caminho absoluto

Page 34: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

34

© FEUP, Maio 2002 XML/XSL

Testes

• city[church]/building : buildings das cities com church descendente directo

• building[@name] : buildings com atributo name• building[@name=“Louvre”] : buildings com nome Louvre

• Outros testes:– not()– first-of-type() : primeiro sibling do seu tipo– last-of-type()– first-of-any() : primeiro sibling de qualquer tipo– last-of-any()– comment() : comentário <!-- -->– pi() : processing instruction <? ?>

Page 35: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

35

© FEUP, Maio 2002 XML/XSL

Relacões possíveis

Page 36: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

36

© FEUP, Maio 2002 XML/XSL

Requisitos p/ um stylesheet XSL

• Todos os documentos XSL devem:– Ser documentos XML bem-formados– Cada tag deve usar o namespace xsl:– Começar com a tag <xsl:stylesheet> e acabar com </xsl:stylesheet>

(root element)– Dentro da tag inicial o namespace xsl deve ser definido:

<xsl: stylesheet xmlns:xsl=“http://www.w3.org/TR/WD-xsl”>

– Após o root element podem importar-se ou incluir-se outros dados XSL usando <xsl: include> ou <xsl: import>

– Depois podem usar-se quaisquer dos elementos seguintes: <xsl:preserve-space>, <xsl: strip-space>, <xsl: attribute-set>, <xsl:id>, <xsl:macro> ou <xsl:constant>. Sempre ANTES de quaisquer regras nossas usando o elemento <xsl:template>

Page 37: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

37

© FEUP, Maio 2002 XML/XSL

Elementos

• <xsl:for-each> • <xsl:if> • <xsl:import> • <xsl:include> • <xsl:key> • <xsl:message> • <xsl:namespace-alias> • <xsl:number> • <xsl:otherwise> • <xsl:output> • <xsl:param> • <xsl:preserve-space>

Page 38: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

38

© FEUP, Maio 2002 XML/XSL

Elementos

• <xsl:processing-instruction> • <xsl:sort> • <xsl:strip-space> • <xsl:stylesheet> • <xsl:template> • <xsl:text> • <xsl:transform> • <xsl:value-of> • <xsl:variable> • <xsl:when> • <xsl:with-param>

Page 39: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

39

© FEUP, Maio 2002 XML/XSL

Elementos

• <xsl:apply-imports> • <xsl:apply-templates> • <xsl:attribute> • <xsl:attribute-set> • <xsl:call-template> • <xsl:choose> • <xsl:comment> • <xsl:copy> • <xsl:copy-of> • <xsl:decimal-format> • <xsl:element> • <xsl:fallback>

Page 40: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

40

© FEUP, Maio 2002 XML/XSL

Document Object Model (DOM)

DOM 1.0 API

Page 41: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

41

© FEUP, Maio 2002 XML/XSL

DOM 1.0

• Plataforma-neutral• Linguagem-neutral• API para manipular a estrutura e conteúdo de documentos XML• Todas as marcas e declarações de tipos são disponibilizadas• Também permite a criação integral de documentos em memória• Produtos suportando DOM expõem interfaces para as suas

estruturas internas

Page 42: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

42

© FEUP, Maio 2002 XML/XSL

Fragmento de documento

<TABLE><TBODY><TR><TD>Shady Grove</TD><TD>Aeolian</TD></TR><TR><TD>Over the River,

Charlie</TD><TD>Dorian</TD></TR></TBODY></TABLE>

Page 43: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

43

© FEUP, Maio 2002 XML/XSL

DOM (Core)

• Estabelece um conjunto de definições de objectos– suficientes para representar instâncias contidas em documentos

HTML 4.0 e XML1.0

• Programas encontram objectos dos tipos:– Node — um pai e vários filhos– Element — conteúdo e lista de atributos– DocFragment — nó raiz de um fragmento– Document — raiz de um documento standalone

• e podem encontrar também:– NodeIterator — para iterar num conjunto especificado por um filtro– AtributeList — colecção de atributos indexados por nome– Attribute — atributo de um elemento– DocumentContext — repositório de meta-informação– DOM — operações dependentes da instância

Page 44: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

44

© FEUP, Maio 2002 XML/XSL

DOM (XML)

• Estende DOM (Core) para suportar DTDs, entidades, CDATA• Os objectos e interfaces de DOM (XML) são suficientes para

escrever processadores usando DTDs– XMLNode — métodos adicionais– DocumentType — declarações de tipos de elementos, entidades e

notações– ElementDefinition — definição de elemento– AtributeDefinition — atributo dentro de um elemento– ModelGroup — representa o modelo de conteúdo de elemento– EntityDefinition — definição de entidade– EntityReference — referência a entidade– Notation — notação

Page 45: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

45

© FEUP, Maio 2002 XML/XSL

ArcWorld.xml

<?xml version="1.0" ?><!-- ArcWorld.xml -->

<!DOCTYPE ArcWorld SYSTEM "ArcWorld.dtd"><ArcWorld><Country name="USA"/><Country name="France"/><Country name="China"/>

<City name="Washington" country="USA"/><City name="Paris" country="France"/><City name="Beijing" country="China"/>

<Building name="Lincoln Memorial" city="Washington"/><Building name="National Gallery" city="Washington"/><Building name="The Capitol" city="Washington"/><Building name="Washington Monument" city="Washington"/><Building name="Arc de Triumph" city="Paris"/><Building name="Eiffel Tower" city="Paris"/><Building name="Louvre" city="Paris"/><Building name="Great Wall" city="Beijing"/><Building name="Tiananmen" city="Beijing"/></ArcWorld>

Page 46: 1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David gtd@fe.up.pt Porto, Maio de 2002

46

© FEUP, Maio 2002 XML/XSL

ArcWorld.dom

Start documentStart element: ArcWorldText: ""Start element: CountryAttribute: name="USA"End element: CountryText: ""Start element: CountryAttribute: name="France"End element: CountryText: ""Start element: CountryAttribute: name="China"End element: CountryText: "

"Start element: CityAttribute: name="Washington"Attribute: country="USA"End element: CityText: ""

Start element: CityAttribute: name="Paris"Attribute: country="France"End element: CityText: ""Start element: CityAttribute: name="Beijing"Attribute: country="China"End element: CityText: "

"Start element: BuildingAttribute: name="Lincoln Memorial"Attribute: city="Washington"End element: BuildingText: ""Start element: BuildingAttribute: name="National Gallery"Attribute: city="Washington"End element: Building

...

Start element: BuildingAttribute: name="Eiffel Tower"Attribute: city="Paris"End element: BuildingText: ""Start element: BuildingAttribute: name="Louvre"Attribute: city="Paris"End element: BuildingText: ""Start element: BuildingAttribute: name="Great Wall"Attribute: city="Beijing"End element: BuildingText: ""Start element: BuildingAttribute: name="Tiananmen"Attribute: city="Beijing"End element: BuildingText: ""End element: ArcWorld