A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

XML – eXtensible Markup Language

Apresentações semelhantes


Apresentação em tema: "XML – eXtensible Markup Language"— Transcrição da apresentação:

1 XML – eXtensible Markup Language
Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD InfoView2002

2 Roteiro Introdução a XML XMLSchema DOM e SAX XSL XQuery InfoView2002

3 Dados semi-estruturados ?
Introdução Dados semi-estruturados ? Dados semi-estruturados: dados heterogêneos e irregulares, auto-descritivos. Banco de dados: originalmente, sistemas fechados, dedicados a gestão de dados regulares, cuja estrutura pouco evolui no tempo Novas aplicações requerem mais flexibilidade de representação e estão constantemente evoluindo o esquema Os modelos relacional e de objetos chegaram a seus limites InfoView2002

4 Introdução Dados estruturados São dados de um arquivo ou de um banco de dados relacional, em que sua estrutura é conhecida a priori Ex.: Create table empregado ( matricula int, nome varchar(30), salario float, depto int ) InfoView2002

5 Dados não-estruturados
Introdução Dados não-estruturados São dados em que não há nenhuma estrutura os definindo. São normalmente armazenados em arquivos ou em colunas do tipo BLOB ou CLOB em SGBDs Ex.: um texto em pdf uma imagem em jpg um video ou áudio InfoView2002

6 Dados semi-estruturados
Introdução Dados semi-estruturados São dados em que uma parte há estrutura e em outra não há nenhuma estrutura definida. O esquema da parte estruturada está contido junto com o dado, Ex.: Um (parte estruturada: <to>, <subject>, <date>, etc. Parte não estruturada: o corpo da mensagem) InfoView2002

7 A revolução da Web… 1989 - Primeiro Web Browser
Mosaic é difundido, há 50 web sites Primeiras ferramentas de busca (WWWW, webcrawler) US$ 1M gastos em compras na Web, presença em 150 países milhão de web sites web servers mais de 1 bilhão de páginas web 2002 – quase 2,5 bilhões de páginas web indexadas (google) InfoView2002

8 A Web hoje… documentos HTML (em sua maioria) voltada para uso humano
gerado automaticamente por aplicações fácil de alcançar qualquer Web page, de qualquer server, em qualquer plataforma InfoView2002

9 O Segredo do sucesso de HTML
HTML é simples: todo mundo pode escrever HTML HTML é textual: é legível, pode-se usar qualquer editor, ... HTML é transportável em qualquer plataforma (o browser é a aplicação universal) HTML conecta pedaços de informação através de hypertext links InfoView2002

10 HTML <h1> Bibliography </h1>
<p> <i> Foundations of Databases </i> Abiteboul, Hull, Vianu <br> Addison Wesley, 1995 <p> <i> Data on the Web </i> Abiteoul, Buneman, Suciu <br> Morgan Kaufmann, 1999 InfoView2002

11 Resultado produzido HTML descreve a apresentação InfoView2002

12 Problemas com HTML Uma vez criado, um documento é ligado a uma norma particular (ex. HTML 3.2 ) É necessário dispor de várias versões do documento em função da mídia em que vai ser apresentado A indexação de documentos só pode ser feita sobre a parte textual. InfoView2002

13 HTML ... Um conjunto pré-definido e limitado de tags, definidas por uma norma (HTML 2.0, 3.2, 4.0). Estas tags possuem semânticas variadas: h1,..,h6, title, address, … dando as indicações estruturais center,hr,b,i,big,small,… servem para descrever a apresentação. InfoView2002

14 Limites da Web … aplicações não devem consumir HTML
tecnologia de wrapper HTML é instável (modifica-se a página => modifica-se o wrapper) companhias se fundem, formam parcerias; necessitam de interoperabilidade de forma rápida InfoView2002

15 precisamos de um "super HTML"
… estão surgindo ... As novas aplicações Comércio Eletrônico Protocolos "B2B" Bibliotecas digitais sistemas distribuídos precisamos de um "super HTML" InfoView2002

16 XML ? « Buzz word » eXtensible Markup Language
Uma linguagem de descrição de documentos, definida por um organismo internacional W3C Um conjunto de tecnologias derivadas: Xlink, Xpointer, Xschema, DOM, SAX, XSL,… Usados em aplicações como: SVG, SMIL, MathML, MusicML, SOAP O esperanto da Web InfoView2002

17 Web: Mudança de paradigma …
Novo padrão Web XML: XML gerado por aplicações XML consumido por aplicações troca de dados entre plataformas: interoperabilidade na empresa entre empresas InfoView2002

18 XML XML descreve o conteúdo <bibliography>
<book> <title> Foundations… </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <publisher> Addison Wesley </publisher> <year> 1995 </year> </book> </bibliography> XML descreve o conteúdo InfoView2002

19 XML: uma resposta única a necessidades variadas
HTML é usada como a lingagem universal de apresentação de documentos na Web, mas não é uma linguagem adaptada para descrever a estrutura destes documentos Os sistemas de bases de dados atuais são muito rígidos para manipular dados cuja estrutura é irregular e evolui com o tempo. InfoView2002

20 Os segredos de XML Como HTML: Mas, Além de HTML
simples, legível, fácil de aprender universal e transportável suportado pela W3C (indústria absorve!) Mas, Além de HTML flexível : podemos representar qualquer tipo de informação estensível: pode-se representar informação de qualquer forma InfoView2002

21 Noção estrutural Princípio chave de SGML Idéia fundamental:
Considere um documento, é desejável separar completamente as informações de estrutura das informações de apresentação. InfoView2002

22 XML: herdeiro de SGML SGML Standard Generalized Markup Language, norma ISO 8879:1986 Muito utilizada na indústria para as grandes técnicas de documentação. Muito complexa para utilização de «público em geral» SGML tem demonstrado as vantagens do formato estrutural para a Gestão Eletrônica de Documentos (GED) XML usa 10% de SGML para representar de forma eficaz 90% dos documentos InfoView2002

23 Dois mundos se juntam na Web
Gestão de documentos SGML HTML Documentação hipertexto Gestão de dados Bases de dados estruturados (relacionais e objeto) semi-estruturadas XML InfoView2002

24 Comunidade de BD pode ajudar ...
otimização e processamento de consultas visões, transformações data warehouses, integração de dados mediadores, re-escrita de consultas eficiente armazenamento e indexação InfoView2002

25 Origem de XML 1993: primeiros trabalhos sobre adaptação das técnicas SGML à Web (Sperberg). "HTML to the Max: A Manifesto for Adding SGML Intelligence to the World Wide Web" Junho 1996: criação de um grupo de trabalho no W3C 10 fev. 1998: publicação da recomendação para versão 1.0 da linguagem. (2/98) InfoView2002

26 Origem de XML Trabalho cooperativo de um grande número de empresas e de pesquisadores reunidos no World Wide Web Consortium (W3C) 400 colaboradores da indústria, entre os quais Oracle, IBM, Compaq, Xerox, Microsoft, etc.. Laboratórios de pesquisa: MIT - USA, INRIA - França, universidade de Keio - Japão Objetivo: definição de um formalismo para facilitar a troca de dados na Web InfoView2002

27 Mandamentos iniciais:
XML deverá ser diretamente utilizável na Internet XML deverá suportar uma larga variedade de aplicações XML deverá ser compatível com SGML A criação de páginas XML deverá ser também o mais simples possível InfoView2002

28 Mandamentos iniciais(2)
Os documentos XML deverão ser de grande legibilidade A criação de documentos deverá ser rápida A sintaxe deverá ser formal e concisa A concisão do código tem mínima importância InfoView2002

29 documentos (semi-)estruturados
Resumindo: XML ... XML é uma linguagem de descrição e de troca de documentos (semi-)estruturados InfoView2002

30 Exemplo de um documento
Cabeçalho Logotipo Bar da Noite Rua das Bodegas, s/n C. Grande Tel: Fax: Objeto Data Campina GRande, 20 de maio de 2001 Saudação Sr. Edilson Silva, Rua das Flores, 12 Caruaru Destinatário Objet: Dívida? Prezado Senhor, Forma Polida Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v Corpo Aproveito do ensejo para renovar meus protestos de elevada estima e consideração. assinatura Assinatura Rodapé Rodapé

31 Representação XML <cabeca> . . .
<destinatario> <nome> Sr Edilson Silva </nome> <endereco> <rua> rua das Flores </rua> <cidade> Caruaru </cidade> </endereco> </destinatario> <objeto> bla bla </objeto> <data> 20 Maio 2001 </data> <saudacao> Prezado Senhor, </saudacao> <corpo> </corpo> <logotipo loc="logo-graph"/> <endereco> &abrev-endereco; </endereco> <carta> . . . </carta> <para> Aqui é o primeiro parágrafo </para> aqui é o segundo ...

32 Pontos importantes A representação desta carta em XML não tem nenhuma indicação sobre a apresentação. As numerosas propriedades gráficas ou tipográficas estão ausentes da fonte XML. Estas propriedades serão definidas por intermédio de uma folha de estilo. Uma folha de estilo é um conjunto de regras para especificar a realização concreta de um documento sobre uma mídia particular. InfoView2002

33 Princípio de funcionamento das folhas de estilos
<carta> <cabeca> . . . </cabeca> <corpo> </corpo> </carta> If carta then ... If cabeca then … If corps then ... If para then Police new roman, size 12, skip first line If … then … Bar da Noite Rua das Bodegas, s/n C. Grande Tel: Fax: Campina GRande, 20 de maio de 2001 Sr. Edilson Silva, Rua das Flores, 12 Caruaru Objeto: Dívida Prezado Senhot, Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v . sssinatura Rodapé

34 Descoberta de XML Vantagens de XML InfoView2002

35 Estensibilidade e estrutura
Vantagens de XML Estensibilidade e estrutura Em XML, um autor ou uma comunidade de autores inventam livremente as tags que lhes pareçam úteis para marcar os componentes de um documento. Exemplo: diversas formas de representar uma data <date> 5 janeiro 2000 </date> <date> <ano> 2000 </ano> <mes> 01 </mes> <dia> 05 </dia> </date> <date format='ISO-8601'> </date> Grande liberdade de escolha das estruturas de dados facilita a troca de dados comércio eletrônico, transações financeiras e comerciais, pesquisa e indústria de biotecnologias multimídia

36 Vantagens de XML Interoperabilidade Todos os dados podem ser vistos como documentos XML e não mais como arquivos no formato X ou Y. Consequências: Um servidor de documentos XML pode responder a um conjunto de necessidades de uma organização. Um simples editor de textos pode tratar o conjunto de dados de uma organização. A interoperabilidade dos utilitários está assegurada. InfoView2002

37 Modularidade e reutilização
Vantagens de XML Modularidade e reutilização Cada usuário é livre para definir suas próprias estruturas de documento Um documento pode também estar conforme as estruturas tipadas, chamadas DTD Cada comunidade pode propor as estruturas normalizadas A validação a um DTD permite a automatização no tratamento dos dados e assegura uma possibilidade de controle de integridade InfoView2002

38 Accesso às fontes de informação heterogêneas
Vantagens de XML Accesso às fontes de informação heterogêneas A consulta e troca de dados entre as base de dados heterogêneas é complexa XML contribui pare minimizar este problema: formato de troca normalizado, genérico, independente de plataforma A indexação e consulta de bases de documentos pode se beneficiar de informações estruturais e textuais. pesquisa por palavras-chaves: Jorge+Amado retorna todos os documentos contendo as palavras Jorge e Amado, então as páginas pessoais de Pedro Amado cujo filho se chama Jorge. pesquisa estrutural: pesquisa os documentos cujo autor é Jorge Amado (ie os documentos contendo um elemento autor, ou escrito-por contendo Jorge e Amado) InfoView2002

39 Definição da linguagem XML 1.0
Descoberta de XML Definição da linguagem XML 1.0 InfoView2002

40 Exemplos de documentos XML
<documento></documento> <documento/> <documento> Bom dia!</documento> <documento> <saudacao> Bom dia! </saudacao> </documento> <?xml version="1.0" standalone="yes" ?> <documento> <saudacao> Bom dia! </saudacao> </documento> InfoView2002

41 Estrutura de um documento
XML 1.0 Estrutura de um documento Um documento XML é composto de um prólogo cuja presença é facultativa, mas fortemente aconselhada uma árvore de elementos, obrigatória comentários, seção CDATA e de instruções de tratamento, facultativos <?xml version="1.0" standalone="yes" ?> <documento> <saudacao> Bom dia! </saudacao> </documento> InfoView2002

42 <!DOCTYPE exemplo SYSTEM "exemplo.dtd" [ declarações ]>
XML 1.0 O prólogo contém ... Uma declaração XML, facultativa da forma: <?xml version="1.0" encoding="ISO " standalone="yes"> indica ao processador que vai tratar o documento: a versão da linguagem XML utilizada o código de caracteres utilizado a existência de declarações exteriores ao documento Uma declaração de tipo de documento, facultativa da forma <!DOCTYPE exemplo SYSTEM "exemplo.dtd" [ declarações ]> indica a estrutura particular a qual deve estar de acordo um documento InfoView2002

43 Estrutura de um DTD XML 1.0 Um DTD pode compreender duas partes
uma parte externa a parte externa é definida fora do documento. É referenciada por uma referência DTD, frequentemente uma URL. Este mecanismo permite assegurar uma reutilização de DTDs frequentemente utilizados. uma parte interna utilizada para especializar um DTD externo genérico ou redefinir certos tipos de elementos InfoView2002

44 Estrutura de um elemento (1)
XML 1.0 Estrutura de um elemento (1) Um elemento é da forma: <nome attr='valor'> conteúdo </nome> <nome> é a tag de abertura (XML é case sensitive!) </nome> é a tag de fechamento. A presença é obrigatória, a exceção particular dos elementos nulos, denotado por <nome> </nome> ou <nome/> conteúdo é o conteúdo de um elemento . Pode ser: attr='valor' representa um conjunto eventualmente vazio de atributos, ou seja de pares (nome,valor). Os nomes dos atributos são únicos num elemento. uma mistura de texto e elementos instruções de tratamento comentários vazio texto outros elementos InfoView2002

45 Estrutura de um elemento (2)
XML 1.0 Estrutura de um elemento (2) Um nome de elemento é uma sequência não nula de caracteres que pode conter caracteres alfanuméricos undescore sinal de menos ponto caracter dois-pontos (:) é utilizado, mas com um sentido particular deve satisfazer as seguintes restrições o primeiro caracter deve ser alfabético ou um undescore os três primeiros caracteres não devem formar uma cadeia cuja representação em letras minúsculas seja "xml". InfoView2002

46 Estrutura de um elemento (2)
XML 1.0 Estrutura de um elemento (2) Exemplos de nomes de elementos 1998-catalogo xmlSpecification nome sociedade _toto Nome_sociedade xsl:rule X.11 incorretos corretos InfoView2002

47 Sintaxe dos atributos XML 1.0
Um atributo é um par nome='valor' que permite de caracterizar um elemento. Um elemento pode ter vários atributos. Neste caso, os pares nome='valor' serão separados por um espaço. Exemplos <relatorio lingua= ’pt' ult-modif='08/07/99'> <anuario generator='SQL2XML V2.0' update=' '> O nome de um atributo obedece as mesmas regras que o nome de um elemento O valor de um atributo é uma string entre aspas(") ou apóstrofos simples ('). Um valor de atributo não deve conter os caracteres ^, % e &. InfoView2002

48 Seção CDATA Uma seção CDATA instrui o parser a ignorar os caracteres de markup Exemplo: <![CDATA[ *p = &q; b = (i <= 3); ]]> Entre o início da seção, <![CDATA[ e o fim da seção, ]]>, todos os caracteres são passados diretamente para a aplicação, sem interpretação. A única string que não pode ocorrer numa seção CDATA é ]]>. InfoView2002

49 Comentários Comentários iniciam com ”<!--” e terminam com ”-->”. (só não podem conter o string ”--”). Ex.: <!-- Isto é um comentário --> Comentários podem ser colocados em qualquer linha do documento. InfoView2002

50 <p> <b> bla bla </p> bla </b>
XML 1.0 Árvore de elementos Um documento XML contém uma árvore de elementos, com as seguintes restrições: Existe num documento um único elemento pai que contém todos os outros. É a raiz do documento. Todo elemento distinto da raiz é totalmente incluído dentro de seu pai. Assim: <p> <b> bla bla </p> bla </b> não é uma estrutura XML. InfoView2002

51 Documentos bem formados
XML 1.0 Documentos bem formados Um documento é dito bem formado se: está de acordo com as regras sintáticas de XML (tags são aninhadas propriamente e atributos são únicos) <?xml version="1.0" standalone="yes" ?> <documento> <saudacao> Bom dia! </saudacao> </documento> Ex. de uma documento não bem formado: <saudacao> Bom dia! </saudacao> InfoView2002

52 Documentos válidos XML 1.0 Um documento é dito válido se:
seu prólogo contém uma declaração de tipo de documento sua árvore de elementos respeita a estrutura definida pelo DTD <?xml version="1.0" encoding="ISO " standalone="yes" ?> <!DOCTYPE documento [ <!ELEMENT documento (saudacao)> <!ELEMENT saudacao (#PCDATA)> ]> <documento> <saudacao> Bom dia! </saudacao> </documento> InfoView2002

53 XML 1.0 Noção de DTD Um documento válido deve conter uma declaração de tipo de documento. Esta declaração pode fazer referência, por intermédio de uma URL a um arquivo externo. Este arquivo é chamado de DTD (Definição de Tipo de Documento). Exemplo <?xml version="1.0" encoding="ISO " standalone="yes" ?> <!DOCTYPE documento SYSTEM "acolhida.dtd"> <documento> <saudacao> Bom dia! </saudacao> </documento> InfoView2002

54 XML 1.0 Noção de DTD <!–- Arquivo acolhida.dtd. Exemplo de DTD simples --> <!–- Autor: Cláudio Baptista --> <!–- Data: /setembro/2002--> <!–- a declaração XML não é obrigatória dentro de um DTD --> <!–- permite assegurar que os documentos que a referenciam --> <!–- utilizam a mesma versão de XML > <?xml version="1.0" encoding="ISO " standalone="yes" ?> <!–- Definição do elemento raiz --> <!ELEMENT documento (saudacao)> <!–- Um elemento saudacao contém texto --> <!ELEMENT saudacao (#PCDATA)> InfoView2002

55 Conteúdo de um DTD XML 1.0 Um DTD pode conter as declarações
de elementos de listas de atributos de entidades gerais de entidades parametrizadas de notações como também comentários InfoView2002

56 Declaração de elemento
XML 1.0: elementos Declaração de elemento Uma declaração de elemento é da forma <!ELEMENT nome modelo> ELEMENT é uma palavra-chave e se escreve imperativamente em maiúsculas nome é um nome válido de um elemento modelo é o modelo de conteúdo deste elemento. Distinguimos cinco modelos de conteúdo elementos dados misto livre vazio InfoView2002

57 Modelo de conteúdo de elementos (1)
Sequência de elementos filhos ( .., .., ..) Exemplo <!ELEMENT capitulo (titulo,intro,secao)> Um elemento capitulo cujo conteúdo, imperativamente e nesta ordem, contém sub-elementos titulo, intro e secao. Alternativa ( ..| ..| ..) <!ELEMENT capitulo (titulo,intro,(secao|secoes))> Indicadores de ocorrência *,+,? Um nome de elemento pode ter um indicador de orrorrência: p* : p pode ocorrer zero, uma ou várias vezes dentro do conteúdo de um instância p+ : p pode ocorrer uma ou várias vezes p? : p pode ocorrer zero ou uma vez InfoView2002

58 Modelo de conteúdo de elementos (2)
Exemplos <!ELEMENT capitulo ( titulo, intro?, secao+ ) > <!ELEMENT secao ( titulo-secao, texto-secao ) > <!ELEMENT texto-secao (p|a)* > InfoView2002

59 Modelo de conteúdo de dados
A presença de dados no conteúdo de um elemento é especifidada pela palavra-chave #PCDATA Exemplo <!ELEMENT p (#PCDATA) > InfoView2002

60 Modelo de conteúdo misto
Este modelo permite definir os modelos de conteúdo podendo misturar dados e elementos Forma do modelo (#PCDATA | nome1 | …|nomen)* Exemplos de declarações <!ELEMENT p (#PCDATA | negrito | italico | sublinhado)* > <!ELEMENT negrito (#PCDATA|italico|sublinhado)* > <!ELEMENT italico (#PCDATA) > <!ELEMENT sublinhado (#PCDATA) > Exemplo de uso <p> um parágrafo pode conter texto <negrito> em evidência </negrito> ou em <italico> itálico </italico></p> InfoView2002

61 Modelo de conteúdo livre (1)
Um elemento pode ser definido como sendo um conteúdo qualquer, desde que este conteúdo respeite as regras gerais da linguagem XML. Exemplo <!ELEMENT qualquer ANY> Para que o conteúdo de um elemento de modelo de conteúdo livre seja válido, é necessário que, se ele contiver elementos, estes sejam declarados num DTD InfoView2002

62 Modelo de conteúdo livre (2)
Utilidade: este modelo de conteúdo é particularmente útil quando da criação de um DTD complexo Exemplo <!ELEMENT relatorio ANY> <!ELEMENT capitulo ANY> <!ELEMENT secao ANY> <!ELEMENT titulo-secao ANY> <!ELEMENT ilustracao ANY> <!ELEMENT bibliografia ANY> <!ELEMENT indice ANY> <!ELEMENT p ANY> <!ELEMENT negrito (#PCDATA)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (prenome+,nome)> <!ELEMENT nome (#PCDATA)> <!ELEMENT prenome (#PCDATA)> InfoView2002

63 Modelo de conteúdo vazio
Um elemento pode ser declarado como obrigatoriamente vazio, usando a palavra-chave EMPTY. Exemplo de declarações <!ELEMENT p (#PCDATA|bibref)* > <!ELEMENT bibref EMPTY> <!ATTLIST bibref ref IDREF #REQUIRED> Exemplo de utilização <p> para uma definição precisa, veja <bibref ref='REC-xml '/> </p> InfoView2002

64 Modelo de conteúdo vazio
Observações: quando o modelo de conteúdo de um elemento é o modelo vazio, deve obrigatoriamente obedecer a sintaxe <nome/> não é possível misturar EMPTY a uma outra construção de modelo de conteúdo InfoView2002

65 Declaração de atributos
XML 1.0: atributos Declaração de atributos Um atributo é um par nome-valor associado a um elemento uma declaração de atributos num DTD permite especificar os atributos que poderão ou deverão estar associados às instâncias dos elementos. Forma da declaração <!ATTLIST nome-elemento nome-atributo tipo-atributo declaração-default> InfoView2002

66 Declaração de atributos
Exemplos <!ELEMENT ex1 (#PCDATA)> <!ATTLIST ex1 lang NMTOKEN #IMPLIED > <!ATTLIST ex1 target ID #IMPLIED > <!ATTLIST ex1 nb (1 | 2 | 3) '1'> equivalente a target ID #IMPLIED > nb (1 | 2 | 3) '1'> InfoView2002

67 Tipo de atributo XML 1.0: atributos O tipo de atributo pode ser:
CDATA: o valor do atributo é uma cadeia de caracteres ID ou IDREF: permite definir um identificador para um documento Uma lista de escolhas num conjunto de tokens, ou identificadores lógicos NMTOKEN ou NMTOKENS: abreviação de Name Token. Permite ao atributo de ter seu valor de um conjunto de nomes simbólicos. ENTITY ou ENTITIES: permite que um atributo tome como valor o nome de uma entidade externa não XML NOTATION: define um atributo de notação InfoView2002

68 Declaração default XML 1.0: atributos Possui quatro formas
valor por default do atributo #REQUIRED: cada instância deverá ter um atributo deste nome. Não aceita valor default. #IMPLIED: presença facultativa. Não aceita valor default. #FIXED: fixa o valor deste atributo para toda instância. InfoView2002

69 Exemplos (1) XML 1.0: atributos Atributo CDATA Atributo enumerado
<!ATTLIST f att1 CDATA #FIXED '<toto>' > O atributo att1 dos elementos de tipo f tem um valorr constante: o string <toto>. Atributo enumerado Exemplo 1 <!ELEMENT data (#PCDATA) > <!ATTLIST data formato (ANSI | ISO | BR) #REQUIRED> <data formato= ’BR'> 24 Maio 1998 </data> <data formato='ISO'> </data> O atributo formato é obrigatório e deve ter valores do tipo ANSI, ISO ou BR Exemplo 2 <!ELEMENT list (item,item+)> <!ELEMENT item (list|#PCDATA)> <!ATTLIST list type (ord | num | alpha) 'ord'> <list type='alpha'> <item> Maria </item> <item> Pedro </item> <item> José </item> </list> InfoView2002

70 Exemplos (2) XML 1.0: atributos Atributos ID e IDREF
Estes tipos de atributos permitem de criar uma referência a um documento <!–- declaração do element secao --> <!–- o atributo de identificação de secao --> <!–- target é optional --> <!ELEMENT secao (#PCDATA|xref)* > <!ATTLIST secao target ID #IMPLIED > <!–- declaracao do elemento xref --> <!ELEMENT xref EMPTY > <!ATTLIST xref ref IDREF #REQUIRED> <secao target='X321'> conteúdo de uma seção </secao> <secao> outra seção. Faz referência à seção X321 <xref ref='X321'/> </secao> Obs.: nós não referenciamos de fato uma seção, mas um elemento do documento que possui um atributo do tipo ID e cujo valor é X321. InfoView2002

71 Entidades internas XML 1.0: entidades Entidades pré-definidas
certos caracteres, como < > & ' " não podem ser utilizados dentro do texto de um documento estes caracteres devem ser representados por seus códigos pré-definidos, chamadas entidades pré-definidas <: < >: > &: & InfoView2002

72 Entidades internas XML 1.0: entidades Entidades definidas pelo usuário
é possível declarar as entidades dentro do DTD esta declaração tem a forma <!ENTITY nome-entidade "valor-entidade"> Exemplo a declaração seguinte <!DOCTYPE livro [ <!ENTITY copyright "© Tropical Editition">]> <livro> ©right; </livro> produzirá © Tropical Editions observação: 00A9 é o código Unicode do caracter © InfoView2002

73 Entidades externas endereçadas por URL
Exemplo <?xml version='1.0' ?> <!DOCTYPE livro [ <!ENTITY capitulo1 SYSTEM "chap1.xml"> <!ENTITY capitulo2 SYSTEM "chap2.xml"> <!ENTITY autor "Maria Luiza Baptista"> ]> <livro> <titulo> XML para iniciantes </titulo> <autor> &autor; </autor> <intro> Era uma vez uma Web… </intro> &capitulo1; &capitulo2; </livro> Restrição: as entidades externas devem ser documentos bem formados InfoView2002

74 Notações e entidades não XML
Exemplo <!DOCTYPE exemplo [ <!NOTATION jpeg SYSTEM "/usr/local/bin/xview"> <!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA jpeg> <!ELEMENT exemplo (foto)> <!ELEMENT foto EMPTY> <!ATTLIST foto img ENTITY #REQUIRED> ]> <exemplo> <foto img='foto-ferias'/> </exemplo> A declaração de notação associa ao formato jpeg a aplicação xview que poderá ser utilizada em extensão da aplicação XML. A declaração da entidade foto-ferias indica que o conteúdo dos dados está situado no arquivo foto1.jpg A palavra-chave NDATA indica que este arquivo é de um formato não XML InfoView2002

75 XML 1.0: Exemplos Exemplo <?xml version='1.0' ?>
<!DOCTYPE db [ <!ELEMENT db (pessoa*)> <!ELEMENT pessoa (nome, idade, )> <!ELEMENT nome (#PCDATA)> <!ELEMENT idade (#PCDATA)> <!ELEMENT (#PCDATA)> ]> <db> <pessoa> <nome> Pedro Maia </nome> <idade> 33 </idade> < > </ > </pessoa> <pessoa> <nome> Ana Maria </nome> <idade> 24 </idade> < > </ > <pessoa> </pessoa> </db> InfoView2002

76 DTDs como esquemas Exemplo Seja o esquema r1(a, b, c) e r2 (c, e)
<db> <r1> <a> a1 </a> <b> b1 </b> <c> c1 </c> </r1> <r1> <a> a2 </a> <b> b2 </b> <c> c2 </c> </r1> <r2> <c> c1 </c> <d> d1 </d> </r2> <r2> <c> c2 </c> <d> d3 </d> </r2> </db> <!DOCTYPE db[ <!ELEMENT (r1*|r2*)> <!ELEMENT r1(a,b,c)> <!ELEMENT r2(c,d)> <!ELEMENT a (#PCDATA)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)> <!ELEMENT d (#PCDATA)> ]> InfoView2002

77 Exemplo de DTD XML 1.0 <?xml version="1.0"?>
<!ELEMENT (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)> <!ATTLIST LANGUAGE (Western|Greek|Latin|Universal) "Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL"> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT BCC (#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE"> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> <!ENTITY SIGNATURE "Mattheus Baptista"> InfoView2002

78 Limitações de DTDs como esquemas
DTD impõe ordem Não existe a noção de tipos de dados atômicos (int, float, etc) Não podemos especificar uma faixa de valores de domínio IDREF não é relacionado a um tipo. Tipos são associados com tags => elementos com mesmo nome porém pertencendo a diferentes tipos (nome de pessoa e nome de um curso) não podem usar o mesmo elemento nome. Nesta caso ou redefinimos nomePessoa e nomeCurso ou usamo namespaces com os qualificadores, pessoa:nome e curso:nome InfoView2002

79 Namespaces InfoView2002

80 Namespaces XML permite autores de documentos criarem suas próprias tags => pode haver uma mesma tag com semântica diferenciada Ex.: Documento1: <assunto> Bioinformatica </assunto> Documento2: <assunto> Animais </assunto> Usa PI para associar nomes exclusivos a URI Permitem que seja usado um esquema de atribuição de nomes ao longo de um conjunto de documentos InfoView2002

81 Solução Primeira tentativa <Documento1:assunto> Bioinformatica </Documento1:assunto> Segunda tentativa <www.lsi.dsc.ufcg.edu.br/cursos:assunto> Bioinformatica </www.lsi.dsc.ufcg.edu.br/cursos:assunto> Solução final (uso de namespaces) <curso:curso xmlns:curso=”www.lsi.dsc.ufcg.edu.br/cursos”> <curso:assunto> Bioinformatica </curso:assunto> InfoView2002

82 Examplo de Namespace <html:html xmlns:html=”...” xmlns:math=”...”> <html:title> George Soros </html:title> <html:h2> Counting ... </html:h2> <math:reln> ..... </math:reln> </html:html> InfoView2002

83 Namespace default <html xmlns=”...” xmlns:math=”...”>
<title> George Soros </title> <h2> Contabilidade ... </h2> <math:reln> ..... </math:reln> </html> InfoView2002

84 Nome de Atributo com Namespace
Atributos podem ter namespace Exemplo: <myLink xmlns:xlink=”...” xlink:type=”simple” ...... </myLink> InfoView2002

85 XML Schema InfoView2002

86 XML Schema Visa remediar as limitações dos DTDs
Schemas são documentos XML Por ser mais recente ainda não é suportado por muitos parsers Schemas ainda usam um DTD para ser validado Declaração default: <xsd:schema xmlns:xsd=“http://www.w3.org/2000/10/XMLSchema” InfoView2002

87 Propósito de XML Schemas
Especificar: a estrutura de documentos “o elemento estudante contém os elementos matrícula, endereço, curso, nome, ... os tipos de dados de cada elemento/atributo “o elemento idade deve ser inteiro entre 0 e 130” InfoView2002

88 Motivação para XML Schemas
Existe insastifação em usar DTDs: sintaxe diferente você escreve seu documento XML usando uma sintaxe e o DTD usando outra sintaxe capacidade limitada de tipos de dados DTDs suportam um conjunto muito limitado de tipos de dados. Não podemos dizer “o elemento <salario> deve ser entre 0 e 3000,00” Desejo de se ter um conjunto de tipos de dados compatíveis com aqueles encontrados nos banco de dados InfoView2002

89 Vantagens de XML Schemas
XML Schemas são mais poderosos que DTDs: Tipos de dados melhor especificado +41 tipos e a capacidade de se criar tipos de dados definidos pelo usuário Escritos em XML (mesma linguagem dos documentos) Podem expressar conjuntos (sets): um elemento filho pode estar em qualquer ordem Pode especificar unicidade (chaves) Uso de técnicas de orientação a objetos InfoView2002

90 Exemplo: Conversão do DTD CatalogoLivros.dtd para XML Schema
<!ELEMENT CatalogoLivros(livro)+> <!ELEMENT livro(titulo, autor, data, isbn, editora) <!ELEMENT titulo (#PCDATA) <!ELEMENT autor (#PCDATA) <!ELEMENT data (#PCDATA) <!ELEMENT isbn (#PCDATA) <!ELEMENT editora (#PCDATA) InfoView2002

91 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=“editora" type="xsd:string"/> </xsd:schema> InfoView2002

92 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:schema> <!ELEMENT CatalogoLivros (livro)+> <!ELEMENT livro (titulo, autor, data, ISBN, editora)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT editora (#PCDATA)> InfoView2002

93 Todos XML Schemas têm "schema" como elemento raiz..
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> Todos XML Schemas têm "schema" como elemento raiz.. InfoView2002

94 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> Os elementos que são usados para criar um XML Schema vêm do XMLSchema namespace InfoView2002

95 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> indica que os elementos declarados neste schema (CatalogoLivros, livro, titulo, autor, data, ISBN, editora) vão para este namespace InfoView2002

96 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:schema> O namespace default é que é o targetNamespace! Este está referenciando uma declaração de um elemento livro. livro em qual namespace? Uma vez que não há um qualificador de namespace, é uma referência ao elemento livro no namespace default, que é o targetNamespace! InfoView2002

97 Referenciando um schema numa instância de um documento XML
<?xml version="1.0"?> <CatalogoLivros xmlns ="http://www.publishing.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.publishing.org CatalogoLivros.xsd"> <livro> <titulo>Meninos de Rua</titulo> <autor>Jorge Amado</autor> <data>julho,1976 </data> <ISBN> </ISBN> <editora>Nossos Livros</editora> </livro> ... </CatalogoLivros> 1. O uso de um namespace default, diz ao schema-validator que todos os elementos usados neste document vêm do publishing namespace. 2. schemaLocation indica para o schema-validator que o namespace está definido em CAtalogoLivros.xsd. 3. Diz ao schema-validator que o atributo schemaLocation usado pertence ao the namespace schema instance namespace. InfoView2002

98 Referenciando um schema num documento XML
schemaLocation="A CatalogoLivros.xsd" targetNamespace="A" CatalogoLivros.xml CatalogoLivros.xsd - usa elementos do namespace A - define elementos no namespace A InfoView2002

99 Há multiplos níveis de verificação
CatalogoLivros.xml CatalogoLivros.xsd XMLSchema.xsd (schema-for-schemas) Valida se o documento xml está conforme as regras descritas em CatalogLivros.xsd Valida se CatalogoLivros.xsd é um documento schema válido, i.e., está conforme com as regras descritas no schema-for-schemas InfoView2002

100 Valores Default para minOccurs e maxOccurs
O valor default para minOccurs é "1" O valor default para maxOccurs é "1" <element ref=”titulo" minOccurs="1" maxOccurs="1"/> Equivalentes! <element ref=”titulo"/> InfoView2002

101 Esquema alternativo ... <?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> InfoView2002

102 Um tipo pode ser nomeado
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" type="CardCatalogueEntry" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="CardCatalogueEntry"> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:schema> Tipo nomeado

103 <xsd:element name="A" type=”ttt"/>
Observação <xsd:element name="A" type=”ttt"/> <xsd:complexType name=”ttt"> <xsd:sequence> <xsd:element name="B" …/> <xsd:element name="C" …/> </xsd:sequence> </xsd:complexType> é equivalente a <xsd:element name="A"> <xsd:complexType> </xsd:element> Elemento A referencia o complexType ttt. Elemento A tem a definição complexType embutida na delcaração do elemento. InfoView2002

104 Observação 2 Uma declaração de elemento pode ter um atributo type, ou um complexType elemento filho, mas não pode ter ambos. <xsd:element name="A" type=”ttt"> <xsd:complexType> </xsd:complexType> </xsd:element> InfoView2002

105 Sumário de declaração de Elementos (2 formas)
1 <xsd:element name="nome" type="type" minOccurs="int" maxOccurs="int"/> Um tipos simples (ex.., xsd:string) ou o nome de um complexType Um inteiro não negativo Um inteiro não negativo ou "unbounded" Obs: minOccurs e maxOccurs podem ser usados apenas em declaração de elementos. 2 <xsd:element name="nome" minOccurs="int" maxOccurs="int"> <xsd:complexType> </xsd:complexType> </xsd:element> InfoView2002

106 Problema: Como restringir os tipos?
Suponha que queremos restringir o elemento ISBN da seguinte forma: ddddd-ddddd-ddddd ou d-ddd-ddddd-d ou d-dd-dddddd-d, onde 'd' significa 'digit' <xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType> InfoView2002

107 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:date"/> <xsd:element name="ISBN" type="ISBNType"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:complexType> </xsd:element> </xsd:schema>

108 <xsd:complexType> ou <xsd:simpleType>?
Use o elemento complexType quando quiser definir elementos filhos e/ou atributos de um elemento Use o elemento simpleType quando precisar criar um novo tipo que é um refinamento de um tipo embutido (string, integer, etc) InfoView2002

109 Criando seus próprios Datatypes
Um novo datatype pode ser definido de um datatype existente (chamado tipo "base" ) através da especificação de valores para uma ou mais das facetas opcionais para o tipo base. Exemplo. O tipo primitivo string tem seis facetas opcionais: pattern enumeration length minLength maxlength whitespace (valores: preserve, replace, collapse) InfoView2002

110 Exemplo de criação de um novo Datatype através da especificação de valores de facetas
<xsd:simpleType name=”NumTelefone"> <xsd:restriction base="xsd:string"> <xsd:length value="8"/> <xsd:pattern value="\d{3}-\d{4}"/> </xsd:restriction> </xsd:simpleType> InfoView2002

111 Outro Exemplo <xsd:simpleType name=”Cores-Brasil">
<xsd:restriction base="xsd:string"> <xsd:enumeration value=”verde"/> <xsd:enumeration value=”amarelo"/> <xsd:enumeration value=”azul"/> <xsd:enumeration value=”branco"/> </xsd:restriction> </xsd:simpleType> Cria um novo tipo chamado Cores-Brasil. Um elemento declarado deste tipo deve ter o valor verde, amarelo, azul ou branco. InfoView2002

112 Facetas do tipo Integer
Facets: pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision InfoView2002

113 Exemplo <xsd:simpleType name= "EarthSurfaceElevation">
<xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-1290"/> <xsd:maxInclusive value="29035"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="elevation" type="EarthSurfaceElevation"/> Exemplo. Definindo um elemento elevation: <elevation>5240</elevation> InfoView2002

114 Tipos Derivados Podemos ter uma forma de especializar definições complexType. Conhecido como "tipos derivados" derivar por extensão: estender o complexType pai com mais elementos derivar por restrição: restringir o complexType pai através da restrição de alguns elementos para ter uma faixa de valores mais restrita, ou um número de ocorrências mais restrito. InfoView2002

115 InfoView2002 <?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:complexType name="Publicacoes"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:date"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=”livro"> <xsd:complexContent> <xsd:extension base=”Publicacoes" > <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:extension> </xsd:complexContent> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:element name=”livro" type=”livro" maxOccurs="unbounded"/> </xsd:element> </xsd:schema> InfoView2002

116 Derivação por Restrição
<xsd:complexType name="Publicacao"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”date" type="xsd:year"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name= "PublicacaoUnicoAutor"> <xsd:complexContent> <xsd:restriction base="Publicacao"> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:year"/> </xsd:restriction> </xsd:complexContent> InfoView2002

117 Proibindo Derivações <xsd:complexType name="Publicacao" final="#all" …> Publicação não pode ser estendida or restringida <xsd:complexType name="Publicacao" final="restriction" …> Publicacao não pode ser restringida <xsd:complexType name="Publicação" final="extension" …> Publicação não pode ser estendida InfoView2002

118 Atributos Seja o DTD <!ELEMENT CatalogoLivros (livro)+>
<!ELEMENT livro (titulo, autor+, data, ISBN, editora)> <!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " "> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT editora (#PCDATA)> InfoView2002

119 InfoView2002 <xsd:element name="CatalogoLivros">
<xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="AtributosLivro"/> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="AtributosLivro"> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:attributeGroup> Categoria (autobiography | non-fiction | fiction) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " " InfoView2002

120 Alternativamente ... <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:complexType> </xsd:element> InfoView2002

121 Sumário de Declaração de Atributos (2 formas)
1 <xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/> required default fixed optional prohibited This attribute is only used with use="default" and use="fixed" xsd:string xsd:integer xsd:boolean ... 2 <xsd:attribute name="nome" use=”como-usad" value="valor"> <xsd:simpleType> <xsd:restriction base=”tipo-simples"> <xsd:facet value="valor"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute>

122 Observação sobre Atributos
A declaração de atributos sempre vem após as declarações de elementos. Os atributos estão sempre com relação ao elemento que eles estão definidos (nested). <xsd:element name=”A"> <xsd:complexType> <xsd:sequence> </xsd:sequence> <xsd:attribute name=”aa" …/> <xsd:attribute name=”ab" …/> </xsd:complexType> </xsd:element> ”aa e ab são atributos de A" InfoView2002

123 Elementos com Simple Content e Atributos
Exemplo. Considere: <elevation units=“metros">5440</elevation> O elemento elevation tem duas restrições: - um simples (integer) conteúdo - um atributo chamado units Como declarar elevation? InfoView2002

124 Solução <xsd:element name="elevation"> <xsd:complexType>
<xsd:simpleContent> <xsd:extension base="xsd:integer"> <xsd:attribute name="units" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> InfoView2002

125 Solução mais completa (constraints)
<xsd:simpleType name="elevationType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="12000"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="unitsType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="feet"/> <xsd:enumeration value="meters"/> <xsd:element name="elevation"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="elevationType"> <xsd:attribute name="units" type="unitsType" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>

126 Expressando Alternativas
<!ELEMENT transporte (trem | aviao | carro)> DTD: XML Schema: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.travel.org" xmlns="http://www.travel.org”> <xsd:element name="transporte"> <xsd:complexType> <xsd:choice> <xsd:element name="trem" type="xsd:string"/> <xsd:element name=”aviao" type="xsd:string"/> <xsd:element name=”carro" type="xsd:string"/> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> InfoView2002

127 Expressando Repetições
DTD: <!ELEMENT binary-string (zero | one)*> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.binary.org" xmlns="http://www.binary.org”> <xsd:element name="binary-string"> <xsd:complexType> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="zero" type="xsd:unsignedByte" fixed="0"/> <xsd:element name="one" type="xsd:unsignedByte" fixed="1"/> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> XML Schema: InfoView2002

128 Expressando Ordem Qualquer
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:all> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element> </xsd:sequence> XML Schema: Problema: criar um elemento livro, que contenha autor, titulo, data, ISBN, e editora, em qualquer ordem. InfoView2002

129 Elemento Vazio <!ELEMENT imagem EMPTY>
<!ATTLIST imagem href CDATA #REQUIRED> DTD: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.photography.org" xmlns="http://www.photography.org”> <xsd:element name="galeria"> <xsd:complexType> <xsd:sequence> <xsd:element name="imagem" maxOccurs="unbounded"> <xsd:attribute name="href" type="xsd:uriReference" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:schema> Schema: InfoView2002

130 Prof. Dr. Cláudio Baptista
XML API: DOM e SAX Prof. Dr. Cláudio Baptista InfoView2002

131 XML Document Object Model (DOM) W3C standard recommendation
DOM - Introdução XML Document Object Model (DOM) W3C standard recommendation Constrói árvore na memória para documentos XML Um DOM Document é uma coleção de nodes organizada numa hierarquia DOM provê uma API que permite o programador adicionar, editar, mover, ou remover nodes em qualquer ponto da árvore DOM-based parsers fazem o “parsing” destas estruturas. Existe em várias linguagens (Java, C, C++, Python, Perl, etc.) InfoView2002

132 DOM Roadmap Um Parser analiza um arquivo XML
para criar um DOM document que é composto de nodes que podem ser elementos, atributos, textos,ou outros tipos de node que fazem parte de um (ou mais) Namespace(s) que podem ser acessados via métodos da DOM API InfoView2002

133 Evolução do DOM Level 0 - Foi a primeira recomendação que permitia Web browsers identificar e manipular elementos numa página Level 1- inclui suporte a XML e HTML Level 2- permite o uso de Namespaces, provê API mais sofisticada com eventos e CSS Level 3- suporte avançado a Namespaces, eventos de User interface, DTD, XML Schema, Xpath, XSLT InfoView2002

134 Exemplo <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ORDERS SYSTEM "orders.dtd"> <orders> <order> <customerid limit="1000">12341</customerid> <status>pending</status> <item instock="Y" itemid="SA15"> <name>Silver Show Saddle, 16 inch</name> <price>825.00</price> <qty>1</qty> </item> <item instock="N" itemid="C49"> <name>Premium Cinch</name> <price>49.00</price> </order> <customerid limit="150">251222</customerid> <item instock="Y" itemid="WB78"> <name>Winter Blanket (78 inch)</name> <price>20</price> <qty>10</qty> </orders> Exemplo InfoView2002

135 Exemplo (cont) InfoView2002

136 Tipos básicos de nodes Document Element Attribute Text InfoView2002

137 DOM Introdução DOM tree
Cada node representa um elemento, atributo, etc. <?xml version = "1.0"?> <message from = ”Ana" to = ”Marta"> <body>Oi Marta!</body> </message> Node criado para elemento message Elemento message tem element child node: elemento body Elemento body tem text child node: “Oi Marta!" Atributos from e to também têm nodes na árvore InfoView2002

138 Implementações de DOM DOM-based parsers Microsoft msxml
Sun Microsystem JAXP InfoView2002

139 DOM: classes e interfaces.
InfoView2002

140 Alguns métodos de Document
InfoView2002

141 Métodos Node InfoView2002

142 Alguns tipos de node InfoView2002

143 Métodos de Element InfoView2002

144 Parsing um arquivo XML num documento
Processo em 3 passos 1. Criar o DocumentBuilderFactory. Este objeto criará o DocumentBuilder. 2. Criar o DocumentBuilder. O DocumentBuilder fará o atual parsing criar o objeto Document. 3. Fazer o parsing do arquivo para criar o objeto Document. InfoView2002

145 Exemplo de aplicação básica
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import org.w3c.dom.Document; public class OrderProcessor { public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); } catch (Exception e) { System.out.print("Problem parsing the file."); } InfoView2002

146 Ex de aplicação básica import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import org.w3c.dom.Document; import org.w3c.dom.Element; public class OrderProcessor { ... System.exit(1); } //Passo 1: obtém o elemento raiz (root) Element root = doc.getDocumentElement(); System.out.println("The root element is " + root.getNodeName()); InfoView2002

147 Ex de aplicação básica - Obtendo um node filho
... import org.w3c.dom.NodeList; //PASSO 1: obtém o elemento raiz(root) Element root = doc.getDocumentElement(); System.out.println("The root element is "+root.getNodeName()); //PASSO 2: obtém os filhos (children) NodeList children = root.getChildNodes(); System.out.println("There are "+children.getLength()+" nodes in this document."); } InfoView2002

148 Usando getFirstChild() e getNextSibling()
... import org.w3c.dom.Node; //PASSO 3: processando os filhos (children) for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling()) { System.out.println(child.getNodeName()+" = "+child.getNodeValue()); } InfoView2002

149 Múltiplos filhos ... public class OrderProcessor {
private static void stepThrough (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); for (Node child = start.getFirstChild(); child != null;child = child.getNextSibling()) stepThrough(child); } public static void main (String args[]) { File docFile = new File("orders.xml"); System.out.println("There are "+children.getLength() +" nodes in this document."); //PASSO 4: fazendo recursividade stepThrough(root); InfoView2002

150 Resultado: InfoView2002

151 Manipulando Atributos
... import org.w3c.dom.NamedNodeMap; private static void stepThroughAll (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); if (start.getNodeType() == start.ELEMENT_NODE) NamedNodeMap startAttr = start.getAttributes(); for (int i = 0; i < startAttr.getLength(); i++) { Node attr = startAttr.item(i); System.out.println(" Attribute: "+ attr.getNodeName() +" = "+attr.getNodeValue()); } for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling()) stepThroughAll(child); InfoView2002

152 Manipulando Atributos
InfoView2002

153 Edição de documentos XML
Existem métodos para adicionar nodes, remover nodes, mudar valores de nodes Consulte a API! InfoView2002

154 Outro método para acessar o conteúdo de documentos XML.
SAX SAX Simple API for XML Outro método para acessar o conteúdo de documentos XML. Desenvolvido por membros da XML-DEV mailing-list (não é da W3C) Usa um modelo baseado em eventos Notificações (eventos) ocorrem à medida em que o documento é analizado (“parsed”) InfoView2002

155 SAX-based Parsers SAX-based parsers Disponível em várias LPs:
e.g., Java, Python, C++, etc. InfoView2002

156 Eventos SAX parser Invoca certos métodos quando eventos ocorrem
Programadores devem fazer overriding destes métodos para processar os dados InfoView2002

157 Métodos invocados pelo SAX parser
InfoView2002

158 Como SAX funciona? Dado o documento XML abaixo:
<?xml version="1.0"?> <samples> <server>UNIX</server> <monitor>color</monitor> </samples> SAX gera os seguintes EVENTOS: Start document Start element (samples) Characters (white space) Start element (server) Characters (UNIX) End element (server) Start element (monitor) Characters (color) End element (monitor) End element (samples) InfoView2002

159 Como SAX funciona? Processamento em SAX involve os seguintes passos
1. Criar um event handler 2. Criar o SAX parser 3. Associar o event handler ao parser criado 4. Fazer o parsing do documento, enviando cada evento ao event handler. InfoView2002

160 Exemplo: Uma pesquisa de opinião
<?xml version="1.0"?> <surveys> <response username="bob"> <question subject="appearance">A</question> <question subject="communication">B</question> <question subject="ship">A</question> <question subject="inside">D</question> <question subject="implant">B</question> </response> <response username="sue"> <question subject="appearance">C</question> <question subject="communication">A</question> <question subject="implant">A</question> <response username="carol"> <question subject="communication">C</question> <question subject="implant">C</question> </surveys> Exemplo: Uma pesquisa de opinião InfoView2002

161 Criando um event handler
import org.xml.sax.helpers.DefaultHandler; public class SurveyReader extends DefaultHandler { public SurveyReader() { System.out.println("Object Created."); } public void showEvent(String name) { System.out.println("Hello, "+name+"!"); public static void main (String args[]) { SurveyReader reader = new SurveyReader(); reader.showEvent(”Nick"); InfoView2002

162 Criando o SAX parser public class SurveyReader extends DefaultHandler
// Exemplo usando JAXP import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.XMLReader; public class SurveyReader extends DefaultHandler { public SurveyReader() { } public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); } catch (Exception e) { System.err.println(e); System.exit(1); Criando o SAX parser InfoView2002

163 Associando o event handler ao parser
... xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SurveyReader()); } catch (Exception e) { InfoView2002

164 Parsing os dados ... import org.xml.sax.InputSource;
xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml"); xmlReader.parse(source); } catch (Exception e) { Pronto! Falta apenas definir os eventos ... InfoView2002

165 Criando um ErrorHandler
... import org.xml.sax.SAXParseException; public class SurveyReader extends DefaultHandler { public SurveyReader() { } public void error (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); public void warning (SAXParseException e) { System.out.println("Problem parsing the file: "+e.getMessage()); public void fatalError (SAXParseException e) { System.out.println("Cannot continue."); System.exit(1); public static void main (String args[]) { ... InfoView2002

166 Associando o ErrorHandler
... xmlReader.setContentHandler(new SurveyReader()); xmlReader.setErrorHandler(new SurveyReader()); InputSource source = new InputSource("surveys.xml"); InfoView2002

167 Eventos: startDocument()
... import org.xml.sax.SAXException; public class SurveyReader extends DefaultHandler { public void fatalError (SAXParseException e) { System.out.println("Error parsing " + "the file: "+e.getMessage()); System.out.println("Cannot continue."); System.exit(1); } public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); public static void main (String args[]) { InfoView2002

168 Eventos: startElement()
... import org.xml.sax.Attributes; public class SurveyReader extends DefaultHandler { public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) System.out.print("Start element: "); System.out.println(localName); public static void main (String args[]) { InfoView2002

169 startElement(): pegando atributos
... public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.print("Start element: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" " + attName + ": " + atts.getValue(attName)); } InfoView2002

170 Obtendo Dados: characters()
// ch inclui o documento inteiro public void characters(char[] ch, int start, int length) throws SAXException { if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); } ... InfoView2002

171 Obtendo Dados: characters()
InfoView2002

172 Obtendo Dados: characters() (completo)
... public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" "); } String thisQuestion = ""; String thisElement = ""; public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (localName == "question") { thisQuestion = atts.getValue("subject"); thisElement = localName; public void endElement( String namespaceURI, String localName, String qName) throws SAXException { thisQuestion = ""; thisElement = ""; } public void characters(char[] ch, int start, int length) if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); ... InfoView2002

173 Modelo baseado em árvore
SAX versus DOM DOM Modelo baseado em árvore armazena o documento inteiro numa hierarquia de document nodes Dados são acessados rapidamente Provê facilidades para adicionar e remover nodes SAX Invoca métodos quando markup (tag) é encontrada Melhor performance do que DOM Menos overhead de memória do que DOM Tipicamente usado para ler documentos (não para modificá-los) InfoView2002

174 XSL - eXtensible Stylesheet Language
InfoView2002

175 XSL - Motivação Vantagens de separar apresentação de conteúdo:
Múltiplos formatos de saída: tamanhos diferentes, mídias diferentes (papel, online), dispositivos diferentes (PDA, celular, PC) Interface voltada para usuário (ex.: acessabilidade), cores, fontes, etc. Uso de estilos padrões Liberdade do autor não se preocupar com apresentação, que será tratada depois por um profissional. InfoView2002

176 Opções para mostrar XML
InfoView2002

177 O que faz uma folha de estilo?
Especifica a apresentação de XML em duas categorias: Uma transformação opcional do documento de entrada em outra estrutura Uma descrição de como apresentar a informação transformada InfoView2002

178 O que faz um folha de estilo?
geração de texto supressão de conteúdo mover texto duplicar texto ordenação transformações mais complexas que computam nova informação baseada na informação existente. InfoView2002

179 Revisão de CSS CSS - Cascade Style Sheet
Define o estilo de um documento para apresentação Pode ser inline ou externa ao documento Precedência de estilos: Autor > Usuário > Web Browser InfoView2002

180 Contidas num arquivo.css Único style sheet usado por múltiplas páginas
External Style Sheets External Style Sheets Contidas num arquivo.css Único style sheet usado por múltiplas páginas Usado com o elemento link InfoView2002

181 Exemplo de um CSS InfoView2002 /* styles.css */
/* An external stylesheet */ a { text-decoration: underline; color: red; background-color: #ccffcc } li em { color: red; font-weight: bold} ul { margin-left: 2cm } <html> <!-- Linking external style sheets --> <head> <title>Exemplo de CSS</title> <link rel = "stylesheet" type = "text/css” href = "styles.css"> </head> InfoView2002

182 XSL - Princípios gerais
Como CSS, funcionamento a base de regras CSS não modifica a estrutura de um documento, XSL sim XSL utiliza a sintaxe XML InfoView2002

183 XSL - Histórico XML derivada de SGML Padronizada pelo W3C
XSL derivada de DSSSL (Document Style Semantics and Specification Language) Primeira proposta formal em 1997 pela W3C (já continha conceitos de XSLT, como uso de templates) Novembro de 1999 XSLT tornou-se uma recomendação da W3C Última versão de XSL: Outubro de 2001 (incluindo XSL-FO) InfoView2002

184 Componentes de XSL XSL consiste logicamente de 3 componentes:
XPath: XML Path Language-- linguagem para referenciar partes específicas de um documento XML XSLT: XSL Transformations-- linguagem para descrever como transformar um documento XML (representado como uma árvore) em outro XSL-FO: uma descrição de um conjunto de Formatting Objects e Formatting Properties InfoView2002

185 XSLT - Características
Linguagem declarativa Descreve a transformação desejada, ao invés de prover uma sequência de instruções procedurais XSLT é essencialmente uma “ferramenta” para transformar documentos XML XSLT manipula árvores Uso de XSL Namespaces - O W3C provê um namespace para tags XSL InfoView2002

186 XSLT - Características
Processadores XSLT Aplicam um stylesheet XSLT a um documento origem XML e produz um documento resultado. Tratam árvores Exemplos de processadores: Saxon, xt, MSXML3, Xalan (Apache) Web browsers já trazem tal processador sobretudo IE 6.0 e Netscape 6.0 InfoView2002

187 XSLT - Estrutura de uma folha XSL
Uma folha XSL é um conjunto de regras Uma regra associa um seletor a uma forma ou modelo O seletor define a estrutura a qual pode se aplicar esta regra A forma define a estrutura da sub-árvore gerada quando da ativação da regra Se várias regras se aplicam a um elemento, a mais específica é executada InfoView2002

188 XSLT - Características
Elemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template <?xml version=“1.0” encoding=ISO ”?> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:template match=“”> corpo do template </xsl:template> </xsl:stylesheet>

189 XSLT - Características
O corpo das regras de template é constituído por: Expressões XPath Elementos XSLT Funções XSLT e XPath Permite manipular partes de um documento Duas formas de utilizar um arquivo xsl: Através de uma linha de comando, que referencia os documentos envolvidos na transformação (p.e, o xml origem, o html resultado e o xslt) Incluindo uma referência no próprio arquivo xml InfoView2002

190 Saudacao.xml Saudacao.html
<?xml version=“1.0” encoding=“iso ”?> <saudacao>Bem-vindo ao InfoView 2002!</saudacao> <html> <head> <title>Saudação de Hoje</title> </head> <body> <p>Bem-vindo ao InfoView 2002!</p> </body> </html> Saudacao.html InfoView2002

191 Linha de comando para transformar Saudacao.xml em
<?xml version=“1.0” encoding=“iso ”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”> <xsl:template match=“/”> <html> <head> <title>Saudação de Hoje</title> </head> <body> <p><xsl:value-of select=“saudacao”/></p> </body> </html> </xsl:template> </xsl:stylesheet> Saudacao.xsl Linha de comando para transformar Saudacao.xml em Saudacao.html via Saudacao.xsl: C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html InfoView2002

192 Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:
<?xml version=“1.0” encoding=“iso ”?> <?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?> <saudacao>Bem-vindo ao InfoView 2002!</saudacao> Saudacao.xml InfoView2002

193 Exemplo 2 Stylesheet que transforma elementos <para> e <emphasis> para HTML: <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="para"> <p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:stylesheet> InfoView2002

194 Exemplo 2(cont) Com a stylesheet anterior, o documento XML:
<?xml version='1.0'?> <para>Isto é um <emphasis>teste</emphasis>.</para> seria transformado em: <?xml version="1.0" encoding="utf-8"?> <p>Isto é um <i>teste</i>.</p> InfoView2002

195 <capitulo titulo = introducao> Texto do capitulo
Exemplo 3: XML <capitulo titulo = introducao> Texto do capitulo </capitulo> XSL <xsl:template match=“capitulo”> <H1> <xsl:value-of </H1> <xsl:apply-templates/> </xsl:template> <xsl:template match=“text()”> <xsl:value-of select=“.”/> HTML <H1> Introducao </H1> Texto do capitulo InfoView2002

196 Templates A maioria dos templates têm a seguinte forma: <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:template> The elemento <xsl:template> é um template O match pattern determina onde este template se aplica Elementos XSLT vêm do XSL namespace InfoView2002

197 XSLT – Expressões XPath
Contrutores sintáticos Chamadas de função - pode-se chamar funções embutidas ou definidas em XSLT concat() calculaDesconto() not(isbn) $ - referencia uma variável ou um parâmetro $X $ALPHA or, and - representa expressões booleanas or e and, respectivamente $x = 5 or $x = 10 $x > 3 and $x < 8 InfoView2002

198 Xpath - Exemplo de patterns (1)
para associa todos filhos <para> no contexto corrente para/emphasis associa com todos elementos <emphasis> que têm um pai <para> / associa com a raiz do documento para//emphasis associa com todos elementos <emphasis> que têm um ancestral <para> section/para[1] associa o primeiro filho <para> de todos os filhos <section> no contexto corrente //title associa todos elementos <title> em qualquer lugar no documento .//title associa todos elementos <title> que são descendentes do contexto corrente InfoView2002

199 XPath- Exemplo de patterns (2)
section/*/note associa elementos <note> que tenham <section> como avós. associa elementos <stockquote> que têm um atributo "symbol" associa elementos <stockquote> que têm um atributo "symbol" com valor "XXXX" emphasis|strong associa elementos <emphasis> ou <strong> InfoView2002

200 XSLT - Elementos Elementos XSLT possuem sintaxe e semântica bem definidos Existem muitos elementos pré-definidos no namespace XSLT e que são interpretados por processadores XSLT Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT Forma: <xsl: element_name> InfoView2002

201 XSLT - Elementos Exemplo Base de XML:
<?xml version="1.0" encoding="ISO " ?> - <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist>   <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> ... </catalog> InfoView2002

202 XSLT - Elementos <xsl:template> <xsl:value-of>
Contém regras que serão aplicadas a um nó específico Possui o atributo “match”, que determina à qual elemento XML, a regra deve ser aplicada. <xsl:value-of> É usado para selecionar o valor de um elemento XML e adicioná-lo à saída da transformação Possui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado InfoView2002

203 <?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform”> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td>  <xsl:value-of select="catalog/cd/title" />   </td>- <td>  <xsl:value-of select="catalog/cd/artist"/>   </td> </table> </body> </html> </xsl:template>  </xsl:stylesheet> InfoView2002

204 Resultado InfoView2002

205 XSLT - Elementos <xsl:for-each> <xsl:sort>
Permite a construção de loops Possui o atributo “select”, que contém uma expressão Xpath que vai determinar sobre que elemento será realizado o loop <xsl:sort> É usado para ordenar a saída Possui o atributo “select”, que indica qual elemento XML ordenar Possui o atributo “order”, que indica o tipo da ordenação: ascending ou descending. InfoView2002

206 <?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">- <xsl:template match="/"> <html><body>   <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist" /> <tr> <td>  <xsl:value-of select="title" />   </td> <td>  <xsl:value-of select="artist" />   </td>   </tr> </xsl:for-each>   </table> </body>  </html>   </xsl:template>  </xsl:stylesheet> InfoView2002

207 Resultado InfoView2002

208 XSLT - Elementos <xsl:if>
Aplica um conteúdo apenas se uma condição especificada for verdadeira Possui o atributo “test”, que contém a expressão a ser avaliada <xsl:if test=“price>‘10’> conteúdo ... </xsl:if> InfoView2002

209 <?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body>   <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32">   <th>Title</th>   <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price>'10'"> <tr> <td>  <xsl:value-of select="title" />   </td> <td>  <xsl:value-of select="artist" />   </td> </xsl:if> </xsl:for-each> </table>   </body>  </html> </xsl:template>  </xsl:stylesheet> InfoView2002

210 XSLT - Elementos InfoView2002

211 XSLT - Elementos <xsl:attribute>
É usado para adicionar atributos aos elementos <picture> <xsl:attribute name=“source”/> <xsl:element> cria um elemento (node) na saída <xsl:template match="/"> <xsl:for-each select="catalog/cd"> <xsl:element name="singer"> <xsl:value-of select="artist" /> </xsl:element> <br /> </xsl:for-each> </xsl:template> InfoView2002

212 XSLT - Elementos <xsl:copy>
Cria uma cópia do nó corrente do documento origem para o documento destino <xsl:template match="message"> <xsl:copy> </xsl:copy> </xsl:template> <xsl:copy-of> Cria uma cópia do nó corrente (inclusive os nós filhos e atributos) InfoView2002

213 Exemplo: Seja o DB XML: <?xml version = "1.0"?>
<!-- Banco de Dados Esporte > <esportes> <jogo titulo = "cricket"> <id>243</id> <para> Mais popular na Inglaterra </para> </jogo> <jogo titulo = ”baseball"> <id>431</id> Mais popular nos EUA <jogo titulo = ”futebol"> <id>123</id> Mais popular no Brasil </esportes> InfoView2002

214 Exemplo (cont): XSL <?xml version = "1.0"?> <!-- Usando xsl:element e xsl:attribute --> <xsl:stylesheet version = "1.0” xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <xsl:apply-templates/> </xsl:template> <xsl:template match = ”esportes"> <esportes> </esportes> <xsl:template match = ”jogo"> <xsl:element name = <xsl:attribute name = "id"> <xsl:value-of select = "id"/> </xsl:attribute> <comment> <xsl:value-of select = "para"/> </comment> </xsl:element> </xsl:stylesheet> Use o atributo match para selecionar a raiz do documento XML match elemento esportes e aplica os templates aos nodes filhos esportes Cria elemento titulo Cria atributo id para elemento titulo Cria comentário com o conteúdo do elemento para InfoView2002

215 Resultado produzido <?xml version = "1.0" ?> <esportes>
<cricket id = "243"> <comment> Mais popular na Inglaterra </comment> </cricket> <baseball id = "432"> Mais popular nos EUA </baseball> <futebol id = ”123"> Mais popular no Brasil </futebol> </esportes> InfoView2002

216 XSLT - Elementos <xsl:param> <xsl:call-template>
Elemento que define parâmetros Possui o atributo “name” para assinalar o nome do parâmetro Possui o atributo “select”, que armazena o valor do parâmetro <xsl:call-template> Elemento que chama um determinado template Possui o atributo “name” para assinalar o nome do template InfoView2002

217 XSLT - Elementos <xsl:with-param> <xsl:variable>
Elemento que define os valores dos parâmetros quando da chamada de um template Possui o atributo “name” para assinalar o nome do parâmetro Possui o atributo “select”, que armazena o valor do parâmetro <xsl:variable> Elemento usado para declarar variáveis Possui o atributo “name” para assinalar o nome da variável Possui o atributo “select”, que armazena o valor do variável InfoView2002

218 XSLT - Elementos <xsl:template name=“parenthsize”>
<xsl:param name=“string”/> <xsl:value-of select=“concat(‘(‘,$string,’)’)”/> </xsl:template> <xsl:variable name=“credit-in-paren”> <xsl:call-template name=“parenthsize”> <xsl:with-param name=“string” </xsl:call-template> <xsl:variable> InfoView2002

219 XSLT - Elementos <xsl:text>
Elemento usado para escrever texto na saída <xsl:template match="car"> <p> <xsl:value-of <xsl:text>.</xsl:text> <xsl:value-of </p> </xsl:template> InfoView2002

220 XSLT - Funções Juntamente com XPath e os elementos XSLT, formam o core XSLT Em um stylesheet XSLT podem ser usadas dois tipos de funções built-in: Funções XPath Funções XSLT Existem ainda as funções que podem ser definidas pelo elemento XSLT <xsl:functions> <xsl:value-of select=“funcs:f1”> <xsl:functions ns=“funcs” type=“text/javascript”> function f1() { return “Funcao 1”; } </xsl:functions> InfoView2002

221 XSLT - Funções format-number() generate-id()
É usada para converter números em strings de acordo com algum padrão de formato format-number(value, format) => string <<format-number(12.5, ‘$#.00’)>> <<$12.50>> <<format-number(0.25, ‘#00%’)>> <<25%>> generate-id() Gera um string, na forma de um nome XML, que unicamente identifica um nó. generate-id(nó) => string o código retornado depende do XSLT processor <<generate-id(book)>> <<N015732>> InfoView2002

222 XSLT - Funções current() document() Retorna o nó corrente
current() => conjunto de nós <<generate-id(current())>> document() Retorna o nó raiz de um documento XML externo document(uri) => nó <<document(‘data.xml’)>> InfoView2002

223 XSLT - Funções id() element-available()
Retorna o nó com um determinado valor para seu atributo ID id(value) => nó <<id(‘A ’)>> <product code=“A ”> element-available() É usada para testar se um determinada instrução XSLT está disponível para uso. Element-available(name) => boolean <<element-available(‘xsl:text’)>> InfoView2002

224 XSLT - Funções count(arg1) sum(arg1) contains(arg1, arg2)
retorna o número de nodes presentes no conjunto de nós passados como argumento sum(arg1) calcula a soma de um conjunto de valores numéricos contidos nos nodes do conjunto de nodes passados como argumento contains(arg1, arg2) testa se arg1 contém arg2 como substring é case sensitive Ex: contains (‘Paris’, ‘A’) retorna false InfoView2002

225 XSLT - Exemplo Completo (Doc1 – Documento Origem XML)
<?xml version="1.0" encoding="utf-8" ?> <customers>   <customer CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57" City="Berlin" PostalCode="12209" Country="Germany" Phone=" " Fax=" " />   <customer CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" ContactName="Ana Trujillo" ContactTitle="Owner" Address="Avda. de la Constitución 2222" City="México D.F." PostalCode="05021" Country="Mexico" Phone="(5) " Fax="(5) " />   <customer CustomerID="AROUT" CompanyName="Around the Horn" ContactName="Thomas Hardy" ContactTitle="Sales Representative" Address="120 Hanover Sq." City="London" PostalCode="WA1 1DP" Country="UK" Phone="(171) " Fax="(171) " />   <customer CustomerID="BERGS" CompanyName="Berglunds snabbköp" ContactName="Christina Berglund" ContactTitle="Order Administrator" Address="Berguvsvägen 8" City="Luleå" PostalCode="S " Country="Sweden" Phone=" " Fax=" " /> ... </customers> InfoView2002

226 XSLT - Exemplo Completo (Doc1 – Documento Resultado XML)
<?xml version="1.0" encoding="UTF-16" ?> <customers> <customer CompanyName="Cactus Comidas para llevar" CustomerID="CACTU" Country="Argentina" />   <customer CompanyName="Océano Atlántico Ltda." CustomerID="OCEAN" Country="Argentina" />   <customer CompanyName="Ernst Handel" CustomerID="ERNSH" Country="Austria" />   <customer CompanyName="Piccolo und mehr" CustomerID="PICCO" Country="Austria" />   <customer CompanyName="Maison Dewey" CustomerID="MAISD" Country="Belgium" />   <customer CompanyName="Comércio Mineiro" CustomerID="COMMI" Country="Brazil" /> ... <customer CompanyName="Save-a-lot Markets" CustomerID="SAVEA" Country="USA" />   <customer CompanyName="The Big Cheese" CustomerID="THEBI" Country="USA" /> </customers> InfoView2002

227 XSLT - Exemplo Completo (Documento XSLT para conversão Doc1 => Doc2)
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match=“customer">   <xsl:apply-templates /> </xsl:template> <xsl:template match="customers"> <xsl:for-each select="customer">   <xsl:sort order="ascending" /> <customer> <xsl:attribute name="CompanyName">   <xsl:value-of />   </xsl:attribute> <xsl:attribute name="CustomerID">   <xsl:value-of /> </xsl:attribute> <xsl:attribute name="Country">   <xsl:value-of   </customer>   </xsl:for-each> </xsl:template> </xsl:stylesheet> InfoView2002

228 XSL: Extensible Stylesheet Language Formatting Objects
Usado para formatar documentos XML para apresentação Tipicamente usado quando o resultado da transformção é para mídia impressa livros, revistas, encartes, etc. FOP Ferramenta em Java da Apache Transforma documentos XSL que contêm formatting objects Download em xml.apache.org/fop InfoView2002

229 XSLFO Exemplos de ferramentas http://xml.apache.org/fop - FOP para PDF
- TeX para PDF - XSLFO para RTF - browser XML que usa FOP InfoView2002

230 Exemplo <?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> ... <fo:page-sequence> <fo:flow> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> Prefácio </fo:block> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> Este é um documento simples de teste. Ele mostra uma <fo:inline font-style="italic">árvore</fo:inline> fo-result parcial (sem usar page layout). </fo:flow> </fo:page-sequence> </fo:root> InfoView2002

231 Exemplo <xsl:template match="chapter"> <fo:flow>
<xsl:apply-templates/> </fo:flow> </xsl:template> <xsl:template match="chapter/title"> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> </fo:block> <xsl:template match="para"> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> <xsl:template match="emphasis"> <fo:inline font-style="italic"> </fo:inline> Exemplo InfoView2002

232 Alguns Formatting Objects (FO)
page-sequence-- a parte maior (tal como body) na qual o layout de página pode diferir de outras partes flow-- um capítulo ou divisão de seção dentro de uma page-sequence block-- um parágrafo (ou title ou block quote, etc.) inline-- uma mudança de fonte dentro de um parágrafo list FOs--list-block, list-item, list-item-label, list-item-body graphic--referencia um objeto gráfico externo table FOs--análogo a table model em HTML InfoView2002

233 Propriedades básicas fonte margens e espaçamento bordas
alinhamento horizontal/justification endentação dentre outros ... InfoView2002

234 Exemplo Final <?xml version="1.0"?> <xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="article"> <fo:page-sequence font-family="serif" font-size="12pt"> <xsl:apply-templates/> </fo:page-sequence> </xsl:template> <xsl:template match="chapter"> <fo:flow> </fo:flow> <xsl:template match="para"> <fo:block space-before="6pt"> </fo:block> <!--(continua no próximo slide) --> InfoView2002

235 Exemplo (cont) <xsl:template match="chapter/title">
<fo:block font-family="sans-serif" color="blue" font-weight="bold" font-size="18pt" space-after="0.5em"> <xsl:number level="multiple" count="chapter"/> <xsl:text> </xsl:text> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="section/title"> <fo:block font-family="sans-serif" font-weight="bold" font-size="16pt" <xsl:number level="multiple" count="chapter|section"/> <xsl:template match="article/title"> <fo:block font-family="sans-serif" font-size="24pt" space-after="2pc"> </xsl:stylesheet> InfoView2002

236 Consulta a dados semi-estruturados
InfoView2002

237 Requisitos desejáveis (Maier ’98)
Consulta Requisitos desejáveis (Maier ’98) Expressividade linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados Semântica precisa muito importante para XML Composição o resultado de uma consulta deve poder ser utilizado dentro de uma outra consulta Consulta ao esquema visando otimização Facilitar a geração automática de consultas InfoView2002

238 Expressões de caminho (Path expressions)
Expressões que permitem navegar no grafo de dados Expressões de caminho simples sequências de labels exemplos root.pessoas {&p1,&p2,&p3} root.pessoas.filhos {&p2,&p3} semântica o resultado de uma expressão de caminho r.l1. … .ln, onde l1,…,ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l1,…,ln. InfoView2002

239 Expressões de caminho Consulta Expressões de caminho generalizadas
Idéia: além de especificar completamente um caminho, permite exprimir restrições (constraints) sobre o caminho Utilização de expressões regulares Exemplos _ é um caracter coringa que designa um label qualquer (pessoa|estudante)._.idade As expressões de caminho definidas até o presente retornam os conjuntos de objetos e não de dados semi-estruturados InfoView2002

240 Linguagem de Consulta X-Query InfoView2002

241 XQuery Baseda em Quilt (que é baseda em XML-QL)
XML Query data model InfoView2002

242 FLWR (“Flower”) Expressions
FOR ... LET... WHERE... RETURN... InfoView2002

243 XQuery Encontre os títulos dos livros publicados após 1995:
FOR $x IN document("bib.xml")/bib/book WHERE $x/year > 1995 RETURN $x/title Resultado: <title> abc </title> <title> def </title> <title> ghi </title> InfoView2002

244 XQuery Para cada autor de um livro publicado pela Morgan Kaufmann, listar os livros publicados: FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> distinct = elimina duplicatas InfoView2002

245 XQuery Resultado: <result> <author>Jones</author>
<title> abc </title> <title> def </title> </result> <author> Smith </author> <title> ghi </title> InfoView2002

246 XQuery FOR $x in expr -- liga $x a cada valor na lista expr
LET $x = expr -- liga $x à inteira lista expr Usado para subexpressões comuns e para agregações InfoView2002

247 XQuery count = função (aggregate) que retorna o número de elementos
<big_publishers> FOR $p IN distinct(document("bib.xml")//publisher) LET $b := document("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers> count = função (aggregate) que retorna o número de elementos InfoView2002

248 XQuery Encontre os livros cujos preços são maiores do que a média de preços: FOR $b in document("bib.xml")/bib/book LET $a=avg(document("bib.xml")/bib/book/price) WHERE $b/price > $a RETURN $b InfoView2002

249 XQuery Sumário: FOR-LET-WHERE-RETURN = FLWR FOR/LET Clauses
Lista de tuplas WHERE Clause Lista de tuplas RETURN Clause Instância do modelo de dados Xquery InfoView2002

250 FOR versus LET FOR liga variáveis nodo  iteration LET
liga variáveis coleção  one value InfoView2002

251 FOR versus LET FOR $x IN document("bib.xml")/bib/book
Retorna: <result> <book>...</book></result> ... FOR $x IN document("bib.xml")/bib/book RETURN <result> $x </result> LET $x IN document("bib.xml")/bib/book RETURN <result> $x </result> Retorna: <result> <book>...</book> <book>...</book> ... </result> InfoView2002

252 Coleções em XQuery Conjuntos e Bags
/bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do tipo conjunto (Set) LET $a = /bib/book  $a é uma coleção $b/author  uma coleção (vários autores...) Retorna: <result> <author>...</author> <author>...</author> ... </result> RETURN <result> $b/author </result> InfoView2002

253 Ordenação em XQuery <publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list> Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR InfoView2002

254 If-Then-Else FOR $h IN //holding RETURN <holding> $h/title,
IF = "Journal" THEN $h/editor ELSE $h/author </holding> SORTBY (title) InfoView2002

255 Quantificador Existencial
FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing") RETURN $b/title InfoView2002

256 Quantificador Universal
FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing") RETURN $b/title InfoView2002


Carregar ppt "XML – eXtensible Markup Language"

Apresentações semelhantes


Anúncios Google