126
Carlos Henrique M. da Silva c [email protected]

eXtensible Markup Language (XML)

Embed Size (px)

DESCRIPTION

eXtensible Markup Language (XML)

Citation preview

Page 1: eXtensible Markup Language (XML)

Carlos Henrique M. da [email protected]

Page 2: eXtensible Markup Language (XML)

O que é XML

Comparação entre XML e HTML

Características do XML

Definição conceitual do XML

Padrões da estrutura do XML

Principais benefícios da linguagem XML

Inserindo XML em documentos HTML

Aplicações do XML

Índice

Page 3: eXtensible Markup Language (XML)

Extensible Markup Language (XML) é linguagem de marcação dedados (meta-markup language) que provê um formato paradescrever dados estruturados.

O XML permite a definição de um número infinito de tags. Enquantono HTML, se as tags podem ser usadas para definir a formatação decaracteres e parágrafos, o XML provê um sistema para criar tagspara dados estruturados.

Um elemento XML pode ter dados declarados como sendo preços devenda, taxas de preço, um título de livro, a quantidade de chuva, ouqualquer outro tipo de elemento de dado.

O Que é XML

Page 4: eXtensible Markup Language (XML)

Comparação entre XML e HTML

HTML e XML são primos. Eles derivam da mesma inspiração, o SGML.

Ambos identificam elementos em uma página e ambos utilizamsintaxes similares. Se você é familiar com HTML, também o será como XML. A grande diferença entre HTML e XML é que o HTML descrevea aparência e a ações em uma página na rede enquanto o XML nãodescreve nem aparência nem ações, mas sim o que cada trecho dedados é ou representa! Em outras palavras, o XML descreve oconteúdo do documento!

Page 5: eXtensible Markup Language (XML)

Características do XMLRepresentação estruturada dos dados

O XML provê um padrão que pode codificar o conteúdo, assemânticas e as esquematizações para uma grande variedade deaplicações desde simples até as mais complexas, dentre elas:

Simples documento. Registro estruturado tal como uma ordem de compra de produtos. Objeto com métodos e dados como objetos Java ou controlesActiveX. Registro de dados. Apresentação gráfica, como interface de aplicações de usuário. Entidades e tipos de esquema padrões. Todos os links entre informações e pessoas na web.

Page 6: eXtensible Markup Language (XML)

Características do XMLSeparação entre dados e apresentação

A mais importante característica do XML se resume em separar ainterface com o usuário (apresentação) dos dados estruturados. OHTML especifica como o documento deve ser apresentado na tela porum navegador. Já o XML define o conteúdo do documento. Porexemplo, em HTML são utilizadas tags para definir tamanho e cor defonte, assim como formatação de parágrafo. No XML você utiliza astags para descrever os dados, como exemplo tags de assunto, título,autor, conteúdo, referências, datas, etc...

O XML ainda conta com recursos tais como folhas de estilo definidascom Extensible Style Language (XSL) e Cascading Style Sheets (CSS)para a apresentação de dados em um navegador.

Page 7: eXtensible Markup Language (XML)

Exemplo de aplicação Web em três níveis, a qual é flexível e permite a troca de dados entre mainframes e os clientes (desktops).

Page 8: eXtensible Markup Language (XML)

Definição conceitual do XMLEstrutura do documento

Um documento XML é uma árvore rotulada onde um nó externoconsiste de:

Dados de caracteres (uma sequência de texto) Instruções de processamento (anotações para osprocessadores), tipicamente no cabeçalho do documento Um comentário (nunca com semântica acompanhando) Uma declaração de entidade (simples macros) Nós DTD (Document Type Declaration)

Um nó interno é um elemento, o qual é rotulado com:

Um nome ou um conjunto de atributos, cada qual consistindode um nome e um valor.

Normalmente, comentários, declarações de entidades e informaçõesDTD não são explicitamente representadas na árvore.

Page 9: eXtensible Markup Language (XML)

<root><child>

<subchild>.....</subchild></child>

</root>

<bookstore><book category="COOKING">

<title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price>

</book></bookstore>

Page 10: eXtensible Markup Language (XML)

Padrões da Estrutura do XMLO XML é baseado em padrões de tecnologia comprovadamenteotimizados para a Web.

Os padrões que compõem o XML são definidos pelo W3C (World WideWeb Consortium) e são os seguintes:

Extensible Markup Language (XML)

XML Namespaces - é também uma Recomendação, a qual descrevea sintaxe de namespace, ou espaço de nomes, e que serve para criarprefixos para os nomes de tags.

Document Object Model (DOM) Level 1 - é uma Recomendação queprovê formas de acesso aos dados estruturados utilizando scripts,permitindo aos desenvolvedores interagir e computar tais dadosconsistentemente.

Page 11: eXtensible Markup Language (XML)

Extensible Stylesheet Language (XSL)- é atualmente um rascunho. O XSL apresenta duas seções: a linguagem de transformação e a formatação de objetos. A linguagem de transformação pode ser usada para transformar documentos XML em algo agradável para ser visto, assim como transformar para documentos HTML, e pode ser usada independentemente da segunda seção (formatação de objetos).

XML Linking Language (XLL) - e XML Pointer Language (XPointer) - são também rascunhos. O XLL é uma linguagem de construção de links que é similar aos links HTML, sendo que é mais poderosa, porque os links podem ser multidirecionais, e podem existir a nível de objetos, e não somente a nível de página.

Os esquemas modelados para XML descritos pelo W3C em XML- Data Note -e Document Content Description for XML (DCD) - estão ainda sendo desenvolvidos (consulta: XML- Data Working Group).

Page 12: eXtensible Markup Language (XML)

Principais Benefícios da Linguagem XMLO XML tem por objetivo trazer flexibilidade e poder às aplicaçõesWeb.

Dentre os benefícios para desenvolvedores e usuários temos:

Buscas mais eficientes;

Desenvolvimento de aplicações Web mais flexíveis. Isso inclui:I. Integração de dados de fontes completamente diferentes, demúltiplas aplicações;

II. Computação e manipulação local dos dados;

III. Múltiplas formas de visualização e

IV. Atualização granulares do conteúdo.

Distribuição dos dados via rede de forma mais comprimida eescalável.

Padrões abertos.

Page 13: eXtensible Markup Language (XML)

Inserindo XML em Documentos HTML

Um documento XML não indica por si só como a informação deve servisualizada. Já o HTML é uma linguagem ótima para a apresentação dedados para o usuário final.

Os mecanismos de ligação de dados e folhas de estilos podem serusados para organizar os dados XML em uma apresentação visual, epara adicionar interatividade.

O XSL (Extensible Stylesheet Language) pode adicionar poderes aindamaiores à esse processo. Uma folha de estilos XSL contém instruçõesde como retirar informação de um documento XML e transformá-lapara outro formato, como o HTML. Essa transformação é feita deforma declarativa, e não via scripts.

Page 14: eXtensible Markup Language (XML)

Os Cascade Style Sheets (CSSs) também podem ser usados paradados XML, só que de estrutura mais simplificada, e são usuais emtais situações. Entretanto, os CSSs não provém uma estrutura deapresentação que se difere da estrutura da fonte de dados. Com oXSL, é possível gerar estruturas de apresentação (em HTML, porexemplo) que são bem diferentes das estruturas de dados originaisdos documentos XML, como mostrado a seguir.

Inserindo XML em Documentos HTML

Page 15: eXtensible Markup Language (XML)

Aplicações do XML

Dentre os vários exemplos que podem ser dados estão:

Aplicações em XHTML (www.w3.org/TR/xhtml1)

Aplicações em CML (Chemical Markup Language, www.xml-cml.org)

Aplicações em previsões de tempo (Weather Observation MarkupLanguage)

Aplicações nas descrições de conteúdo matemático com MathML(Math Markup Language) - http://www.w3.org/pub/WWW/TR/REC-MathML/.

Aplicações de voz interativas (Extensible Phone Markup Language- XPML)

Uma lista mais completa de aplicações pode ser encontradaem www.oasis-open.org/cover/xml.html#applications

Page 16: eXtensible Markup Language (XML)

Regras para Boa Formação de um Arquivo XML

Todo documento XML, além da tag introdutória, deve ter um únicoelemento (tag) que sirva como raiz para todos os demais elementosdo documento;

XML é case sensitive, portanto difere letras maiúsculas eminúsculas, devendo tomar cuidado com o uso de CamelCases.

Todo elemento XML deve ser iniciado e fechado, exceto o quedefine a versão do XML usada e outras definições de tag única,exemplo <system opera="ligado" onde="aqui" />.

Comentários em XML são iguais ao HTML (<!--comentário-->).

Page 17: eXtensible Markup Language (XML)

O Objeto XMLHttpRequest

Todos os browsers modernos (IE7+, Firefox, Chrome, Safari, andOpera) têm embutido o objeto XMLHttpRequest.

Sintaxe para criar um objeto XMLHttpRequest:

xmlhttp=new XMLHttpRequest();

Versões antigas do of Internet Explorer (IE5 and IE6) usam umobjeto ActiveX:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

Page 18: eXtensible Markup Language (XML)

Analisador XMLUm Analisador XML converte um documento XML em um objetoDOM XML - que pode ser manipulado com JavaScript.

O fragmento de código a seguir analisa um documento XML em um objeto XML DOM:

if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();}

else{// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

xmlhttp.open("GET","books.xml",false);xmlhttp.send();

xmlDoc=xmlhttp.responseXML;

Page 19: eXtensible Markup Language (XML)

EXERCÍCIOS

Um catalogo de CDs contendo (Mínimo de 10 CDs):

Título do álbum Artista Gravadora Preço Ano de lançamento

Editar o arquivo XML acima adicionado categorias aos CDs usando elementos com atributos

Dica: Caracteres portugueses<?xml version="1.0" encoding="ISO-8859-1" ?>

Page 20: eXtensible Markup Language (XML)

EXERCÍCIOS

Monte um arquivo XML com as informações do seu currículo. Ex.:

<curriculo><nome>Carlos Henrique Martins da Silva</nome><telefone>2197978445</telefone><email>[email protected]</email>...

</curriculo>

Page 21: eXtensible Markup Language (XML)

XSL - consiste em três partes:

1. XSLT - uma linguagem para transformar documentos XML2. XPath - uma linguagem para navegar em documentos XML3. XSL-FO - uma linguagem para formatar documentos XML

A linguagem de transformação pode ser usada para transformardocumentos XML em algo agradável para ser visto, assim comotransformar para documentos HTML, e pode ser usadaindependentemente da segunda seção (formatação de objetos).

Esquematizando temos:

XML - Informação (dados) XSL , CSS - Apresentação ( XML + XSL = HTML )

Page 22: eXtensible Markup Language (XML)

O XSL é formato de Templates e cada template possui duas partes:

Pattern - Referência ao elemento Action - formato aplicado ao elemento

NOME PORTUGUES MATEMATICA CIÊNCIAS

JANICE 7 8 6

JEFFERSON 5 8 7

Formatando um documento XML com XSL.

Vamos mostrar como formatar o documento boletim.xml e exibir os dados no formato de um arquivo HTML , uma tabela onde devemos ter:

Page 23: eXtensible Markup Language (XML)

<?xml-stylesheet type="text/xsl" href="arquivo.xsl"?>

A primeira coisa a fazer para formatar um documento XML é incluiruma linha no documento XML a ser formatado que indique o arquivoXSL que irá formatar os dados que serão exibidos no Navegador. Asintaxe da declaração a ser incluída é:

<?xml-stylesheet type="text/xsl" href="boletim.xsl"?><boletim>

<aluno><nome>JANICE</nome>

<portugues>7</portugues><matematica>8</matematica>

<ciencias>6</ciencias></aluno>

.

.

.

</boletim>

Page 24: eXtensible Markup Language (XML)

<?xml version="1.0" ?><HTML xmlns:xsl="http://www.w3.org/TR/WD-xsl">*<BODY>

<TABLE BORDER="1" CELLPADDING="2"><tr>

<td>nome</td><td>portugues</td><td>matematica</td><td>ciencias</td>

</tr><xsl:for-each select="boletim/aluno">

<TR><TD><xsl:value-of select="nome"/></TD><TD><xsl:value-of select="portugues"/></TD><TD><xsl:value-of select="matematica"/></TD><TD><xsl:value-of select="ciencias"/></TD>

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

</TABLE></BODY></HTML> * Esta é a declaração XSL do documento sendo obrigatória.

Page 25: eXtensible Markup Language (XML)

A forma correta de declarar uma folha de estilo XSL de acordo com a Recomendação W3C XSLT é:

<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

OU<xsl:transform version="1.0"

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

Para ter acesso aos elementos, atributos e características XSLT deve ser declarado o namespace XSLT no topo do documento.

O xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" aponta para o namespace oficial XSLT W3C. Se você usar este namespace, você deve também incluir o atributo de versão = "1.0".

Page 26: eXtensible Markup Language (XML)
Page 27: eXtensible Markup Language (XML)

Elemento <xsl:template>

Uma folha de estilo XSL consiste em um ou mais conjunto de regrasque são chamadas de modelos (templates).

Um modelo contém regras para aplicar quando um nó especificado écorrespondido.

O atributo match é utilizado para associar um modelo com umelemento XML. O atributo de partida também pode ser usado paradefinir um modelo para todo o documento XML. O valor do atributode correspondência é uma expressão XPath (ex.: match = "/" define odocumento inteiro).

<?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="/">

Page 28: eXtensible Markup Language (XML)

Elemento <xsl:value-of>

O elemento <xsl:value-of> pode ser usado para extrair o valor de umelemento XML e adicioná-lo para o fluxo de saída da transformação:

<tr><td><xsl:value-of select="catalog/cd/title"/></td>

<td><xsl:value-ofselect="catalog/cd/artist"/></td>

</tr>

O atributo select no exemplo acima, contém uma expressãoXPath. Uma expressão XPath funciona como navegar em um sistemade arquivos; uma barra (/) seleciona subdiretórios.

Page 29: eXtensible Markup Language (XML)

Elemento <xsl:for-each>

O elemento <xsl:for-each> pode ser usado para selecionar todos oselementos XML de um determinado conjunto de nós:

<xsl:for-each select="catalog/cd"><tr>

<td><xsl:value-of select="title"/></td><td><xsl:value-of select="artist"/></td>

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

Page 30: eXtensible Markup Language (XML)

Filtrando a saída

Nós também podemos filtrar a saída do arquivo XML, adicionando um critério de seleção para o atributo do elemento <xsl:for-each>.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Elemento <xsl:for-each>

Os operadores de filtro são:

= (Igual)! = (Não igual)

< (Menor)> (Maior)

Page 31: eXtensible Markup Language (XML)

Elemento <xsl:sort>

O elemento <xsl:sort> é usado para classificar a saída.

Onde colocar as informações de classificação

Para ordenar a saída, basta adicionar um elemento <xsl:sort> dentrodo elemento <xsl:for-each> no arquivo XSL:

<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>

Page 32: eXtensible Markup Language (XML)

Elemento <xsl:if>É usado para colocar um teste condicional contra o conteúdo doarquivo XML.

<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>

</tr></xsl:if>

</xsl:for-each>

O código acima irá apenas produzir oselementos do título e artista dos CDs que temum preço que é superior a 10.

Page 33: eXtensible Markup Language (XML)

Elemento <xsl:choose>É usado em conjunto com os elementos <xsl:when> e<xsl:otherwise> para expressar múltiplos testes condicionais.

<xsl:for-each select="catalog/cd"><tr>

<td><xsl:value-of select="title"/></td>

<xsl:choose><xsl:when test="price > 10">

<td bgcolor=" #FFD700 "><xsl:value-of select="artist"/></td>

</xsl:when><xsl:otherwise>

<td><xsl:value-of select="artist"/></td>

</xsl:otherwise></xsl:choose>

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

O código acima irá adicionar uma cor de fundo dourada para a coluna "Artista" quando o preço do CD for maior que 10.

Page 34: eXtensible Markup Language (XML)

EXERCÍCIOS

Criar um documento XSL para cada um doselementos mostrados anteriormente evinculá-los ao documento XML de catálogode CDs

Criar um documento XSL aplicando oselementos cabíveis ao documento XML deCurriculo

Page 35: eXtensible Markup Language (XML)

É usado para navegar através de elementos eatributos em um documento XML.

XPath é um elemento importante em no padrãoXSLT da W3C.

XQuery e XPointer são ambos construídos emexpressões XPath.

Page 36: eXtensible Markup Language (XML)

O que é?

XPath é uma sintaxe para definir partes de um documento XML

XPath usa caminhos para definir elementos XML

XPath define uma biblioteca de funções padrão

XPath é o elemento principal em XSLT

XPath não é escrito em XML

XPath é um padrão W3C

XPath usa expressões de caminho para identificar nós em umdocumento XML. Essas expressões de caminho se parecem muito comas expressões que você vê quando você trabalha num sistema dearquivos de um computador.

Page 37: eXtensible Markup Language (XML)

Versões Xpath

XPath 1.0 - Recomendação da W3C em 16/11/1999.XPath 2.0 - Recomendação da W3C em 23/01/2007.

Funções XPath padrão

XPath inclui mais de 100 funções embutidas. Há funçõespara cadeia de valores, valores numéricos de data e hora,nós de comparação e manipulação QName, manipulaçãode seqüência, valores booleanos, e muito mais. Veja maisem: Funções XPath

Page 38: eXtensible Markup Language (XML)

Em XPath, existem 7 tipos de nós:

1. Elemento2. Atributo3. Texto4. Namespace5. Instrução de processamento6. Comentário7. Documentos

Documentos XML são tratados como árvores de nós. Oelemento mais alto da árvore é chamado de elemento raiz(root).

Page 39: eXtensible Markup Language (XML)

Valores atômicos - São os nós sem filhos ou pais.Exemplo:

ITENS

Os itens são valores atômicos ou nós.

Page 40: eXtensible Markup Language (XML)

RELAÇÃO DE NÓSPAI ou MÃE

Cada elemento e atributo tem um pai.

No exemplo a seguir, o elemento BOOK é o PAI dos elementos TITLE,AUTHOR, YEAR, e PRICE:

FILHOS ?????IRMÃOS ?????AVÓS ?????

DESCENDENTES ?????

Page 41: eXtensible Markup Language (XML)

XPath Sintaxe

XPath usa expressões de caminho para selecionar nós ouconjuntos de nós em um documento XML. O nó éselecionado através de um caminho ou etapas.

Page 42: eXtensible Markup Language (XML)

Expressão Descrição

nodename Seleciona todos os nós com o nome de " nodename "

/ Seleciona a partir do nó raiz

// Seleciona nós no documento a partir do nó atual que correspondam a seleção, não importa onde eles estão

. Seleciona o nó atual

.. Seleciona o pai do nó atual

@ Seleciona atributos

NÓS DE SELEÇÃO

As expressões de path (caminho) mais úteis estão listadas abaixo:

Page 43: eXtensible Markup Language (XML)

CAMINHO EXPRESSÃO RESULTADO

bookstore Seleciona todos os nós com o nome de “bookstore"

/bookstoreSeleciona a livraria elemento raiz.

Nota: Se o caminho começa com uma barra (/) ele representa sempre um caminho absoluto para um elemento!

bookstore/book Seleciona todos os elementos do livro que são filhos de livraria

//bookSeleciona todos os elementos do livro, não importa onde eles estão

no documento

Bookstore//bookSeleciona todos os elementos do livro que são descendentes de

elemento de livraria, não importa onde eles estão sob o elemento livraria

//@lang Seleciona todos os atributos que são nomeados lang

Na tabela abaixo listamos algumas expressões de caminho e seusresultados:

Page 44: eXtensible Markup Language (XML)

PREDICADOS

Predicados são usados para encontrar um nóespecífico ou um nó que contém um valorespecífico. Predicados são sempre incorporadosem colchetes.

TABELA

Page 45: eXtensible Markup Language (XML)

SELECIONANDO NÓS DESCONHECIDOS

XPath curingas podem ser usados para selecionar elementos XMLdesconhecidos.

CURINGA DESCRIÇÃO

* Corresponde a qualquer nó de elemento

@ * Corresponde a qualquer nó de atributo

node() Corresponde a qualquer nó de qualquer tipo

Na tabela abaixo listamos algumas expressões de caminho e seusresultados:

EXPRESSÃO RESULTADO

/bookstore/* Seleciona todos os nós filhos do elemento livraria

//* Seleciona todos os elementos no documento

//title[@*] Seleciona todos os elementos do título que possuem qualquer atributo

Page 46: eXtensible Markup Language (XML)

SELEÇÃO DE VÁRIOS CAMINHOS

Ao usar o operador | em uma expressão XPath você pode selecionar

vários caminhos.

Na tabela abaixo listamos algumas expressões de caminho eoresultado das expressões:

EXPRESSÃO RESULTADO

//book/title | //book/priceSeleciona todos os elementos title E price de todos os elementos do livro

//title | //priceSeleciona todos os elementos title E de price no documento

/bookstore/book/title | //priceSeleciona todos os elementos título do elemento livro, do elemento livraria. E todos os elementos de preço no documento

Page 47: eXtensible Markup Language (XML)

EIXOS XPATH

Um eixo define um conjunto de nós em relação ao nó actual.

NOME DO EIXO RESULTADO

ancestor Seleciona todos os ancentrais (avós, pais, etc) do nó atual

ancestor-or-self Seleciona todos os ancentrais (avós, pais, etc) do nó atual e o nó atual si

attribute Seleciona todos os atributos do nó atual

child Seleciona todos os filhos do nó atual

descendant Seleciona todos os descendentes (filhos, netos, etc) do nó atual

descendant-or-self Seleciona todos os descendentes (filhos, netos, etc) do nó atual e o nó atual si

following Seleciona tudo no documento depois da tag de fechamento do nó atual

following-sibling Seleciona todos os irmãos depois do nó atual

namespace Seleciona todos os nós namespace do nó atual

parent Seleciona o pai do nó atual

preceding Seleciona todos os nós que aparecem antes do nó atual no documento, exceto antepassados, nós de atributo e nós namespace

preceding-sibling Seleciona todos os irmãos antes do nó atual

self Seleciona o nó atual

Page 48: eXtensible Markup Language (XML)

EXPRESSÃO DE CAMINHO LOCAL

O caminho do local pode ser absoluto ou relativo. Um caminho localabsoluto começa com uma barra (/) e um caminho local relativonão. Em ambos os casos, o caminho do local consiste em uma ou maisetapas, cada um separado por uma barra:

Page 49: eXtensible Markup Language (XML)

Cada passo é avaliado contra os nós do atual conjunto de nós.

Um passo consiste em:

Um eixo (define a relação de árvore entre os nós selecionados e

o nó atual)

Um nó de teste (identifica um nó dentro de um eixo)

Zero ou mais predicados (para refinar ainda mais o selecionado

conjunto de nós)

A sintaxe para um nível de localização é:

Page 50: eXtensible Markup Language (XML)

EXEMPLO RESULTADO

child::bookSeleciona todos os nós de livros que são filhos do nó

atual

attribute::lang Seleciona o atributo lang do nó atual

child::* Seleciona todos os filhos do elemento do nó atual

attribute::* Seleciona todos os atributos do nó atual

child::text() Seleciona todas as crianças de texto nó do nó atual

child::node() Seleciona todos os filhos do nó atual

descendant::book Seleciona todos os descendentes de livros do nó atual

ancestor::book Seleciona todos os ancestrais do livro do nó atual

ancestor-or-self::bookSeleciona todos os ancestrais do livro do nó atual - e

os atuais, bem como se é um nó de livro

child::*/child::price Seleciona todos os preços netos do nó atual

Page 51: eXtensible Markup Language (XML)

OPERADORES XPATH

Uma expressão XPath retorna um conjunto de nós, uma string, umbooleano, ou um número.

Abaixo está uma lista dos operadores que podem ser utilizados nasexpressões XPath:

OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO

|Calcula dois

conjuntos de nós//book |

//cdRetorna um conjunto de nós com

todos os elementos livro e cd

+ Adição 6 + 4 10

- Subtração 6 - 4 2

* Multiplicação 6 * 4 24

div Divisão 8 div 4 2

= Igual price=9.80verdadeiro se o preço é 9,80

falso se o preço é 9,90

! = Não igual price!=9.80verdadeiro se o preço é 9,90

falso se o preço é 9,80

Page 52: eXtensible Markup Language (XML)

OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO

< Menor que price<9.80verdadeiro se o preço é

9,00falso se o preço é 9,80

<= Inferior ou igual a price<=9.80verdadeiro se o preço é

9,00falso se o preço é 9,90

> Maior do que price>9.80verdadeiro se o preço é

9,90falso se o preço é 9,80

> = Maior do que ou igual a price>=9.80verdadeiro se o preço é

9,90falso se o preço é 9,70

or Ouprice=9.80 or

price=9.70

verdadeiro se o preço é 9,80

falso se o preço é 9,50

and Eprice>9.00 and

price<9.90

verdadeiro se o preço é 9,80

falso se o preço é 8,50

mod Módulo (resto da divisão) 5 mod 2 1

Page 53: eXtensible Markup Language (XML)

Xquery nada mais é do que um SQL para XML, ou seja, foi

projetado para consultar dados XML e não apenas

arquivos XML, mas qualquer coisa que possa aparecer

como XML, incluindo bases de dados.

XQuery é A linguagem para consultar dados XML

XQuery para XML é como SQL para bancos de dados

XQuery é construído sobre expressões XPath

XQuery é suportado pelos principais bancos de dados

XQuery é uma recomendação da W3C

Page 54: eXtensible Markup Language (XML)

XQuery 1.0 e XPath 2.0 compartilham o mesmo modelo dedados e apoiam as mesmas funções e operadores. Se vocêjá estudou XPath você não terá problemas com acompreensão XQuery.

Page 55: eXtensible Markup Language (XML)

XQuery pode ser usado para:

Extrair informações para usar em um Web Service

Gerar relatórios resumidos

Transformar dados XML para XHTML

Pesquisar documentos da Web para obter informações relevantes

XQuery é uma recomendação da W3C

XQuery é compatível com diversos padrões W3C, tais como XML,

Namespaces, XSLT, XPath e XML Schema.

XQuery 1.0 tornou-se uma recomendação da W3C 23 janeiro de 2007.

Page 56: eXtensible Markup Language (XML)

COMO SELECIONAR NÓS DE "books.xml"?

FUNÇÕES

A função do doc() é usado para abrir o arquivo "books.xml":

doc("books.xml")

EXPRESSÕES DE CAMINHO (XPath)

XQuery usa Xpath para navegar através de elementos de umdocumento XML.

A expressão de caminho a seguir é usado para selecionar todos oselementos do título no arquivo "books.xml":

doc("books.xml")/bookstore/book/title

Page 57: eXtensible Markup Language (XML)

A Query acima irá extrair o seguinte:

<title lang="en">Everyday Italian</title><title lang="en">Harry Potter</title>

<title lang="en">XQuery Kick Start</title><title lang="en">Learning XML</title>

Predicados

doc("books.xml")/bookstore/book[price<30]

Resultado

<book category="CHILDREN"><title lang="en">Harry Potter</title>

<author>J K. Rowling</author><year>2005</year>

<price>29.99</price></book>

Page 58: eXtensible Markup Language (XML)

Expressões XQuery FLWORFLWOR é um acrônimo para "For, Let, Where, Order by, Return".

for $x in doc("books.xml")/bookstore/bookwhere $x/price>30

order by $x/titlereturn $x/title

A cláusula For seleciona todos os elementos do livro sob o elementolivraria em uma variável chamada $x.

A cláusula Where seleciona apenas os elementos do livro com umelemento de preço com um valor maior do que 30.

A cláusula Order by define a ordem de classificação. Vai ser tipo peloelemento título.

A cláusula Return especifica o que deve ser devolvido. Aqui ele retornaos elementos do título.

Page 59: eXtensible Markup Language (XML)

Como selecionar nós de "books.xml" Com FLWOR

Olhe para a seguinte expressão de caminho:

doc("books.xml")/bookstore/book[price>30]/title

A expressão acima irá selecionar todos os elementos do título sob oselementos do livro que estão sob o elemento livraria que tem umelemento preço com um valor que é maior do que 30.

A expressão FLWOR seguinte irá selecionar exatamente a mesmacoisa: for $x in

doc("books.xml")/bookstore/bookwhere $x/price>30

return $x/title

O resultado será:

<title lang="en">XQuery Kick Start</title><title lang="en">Learning XML</title>

Page 60: eXtensible Markup Language (XML)

Apresentar o resultado em uma lista HTML

Olhe para a seguinte expressão FLWOR XQuery:

for $x in doc("books.xml")/bookstore/book/titleorder by $xreturn $x

A expressão acima irá selecionar todos os elementos do título edevolve os elementos do título em ordem alfabética.

Agora queremos listar todos os livros-títulos em nossa livraria emuma lista HTML. Nós adicionamos as tags <ul> e <li> à expressãoFLWOR:

<ul>{

for $x in doc("books.xml")/bookstore/book/titleorder by $x

return <li>{$x}</li>}

</ul>

Page 61: eXtensible Markup Language (XML)

O resultado será:

<ul><li><title lang="en">Everyday Italian</title></li>

<li><title lang="en">Harry Potter</title></li><li><title lang="en">Learning XML</title></li>

<li><title lang="en">XQuery Kick Start</title></li></ul>

Agora, queremos eliminar o elemento título, e mostrar apenas osdados dentro do elemento de título:

<ul>{

for $x in doc("books.xml")/bookstore/book/title

order by $xreturn <li>{data($x)}</li>

}</ul>

Resultado:

<ul><li>Everyday Italian</li>

<li>Harry Potter</li><li>Learning XML</li>

<li>XQuery Kick Start</li></ul>

Page 62: eXtensible Markup Language (XML)

REGRAS BÁSICAS DE SINTAXE:

XQuery é Case-sensitive.

Elementos, atributos e variáveis devem ser nomes XML

válidos.

Uma string pode estar entre aspas simples ou duplas.

Uma variável é definida com um $ seguido por um nome.

Comentários são delimitados por (: Comentário XQuery :)

Page 63: eXtensible Markup Language (XML)

Expressões XQuery condicionais

"If-Then-Else" expressões são permitidos em XQuery.

Veja o exemplo a seguir:

for $x in doc("books.xml")/bookstore/bookreturn if ($x/@category="CHILDREN")then <child>{data($x/title)}</child>else <adult>{data($x/title)}</adult>

Notas sobre o "if-then-else" sintaxe: parênteses a expressão se sãonecessárias. mais é necessário, mas pode ser apenas mais ().

O resultado do exemplo acima será:

<adult>Everyday Italian</adult><child>Harry Potter</child>

<adult>Learning XML</adult><adult>XQuery Kick Start</adult>

Page 64: eXtensible Markup Language (XML)

COMPARAÇÕES XQUERY

No XQuery há duas formas de comparar valores.

1. Comparações gerais:! =, =, <, <=,>,> =

2. Comparações Valor: eq, ne, lt, le, gt, ge

A diferença entre os dois métodos de comparação são mostrados abaixo.

A expressão abaixo retorna true se todos os atributos q tiverem um valor superior a 10:

$bookstore//book/@q > 10

A expressão seguinte devolve verdadeiro se houver apenas um atributo q retornado pela expressão, e o seu valor for superior a 10. Se mais de um q é devolvido, ocorre um erro:

$bookstore//book/@q gt 10

Page 65: eXtensible Markup Language (XML)

Adicionando elementos e atributos para o Resultado

Como vimos no capítulo anterior, podemos incluir elementos eatributos do documento de entrada ("books.xml) no resultado:

for $x in doc("books.xml")/bookstore/book/titleorder by $xreturn $x

A expressão XQuery acima inclue tanto o elemento título e quanto oatributo lang no resultado:

<title lang="en">Everyday Italian</title><title lang="en">Harry Potter</title>

<title lang="en">Learning XML</title><title lang="en">XQuery Kick Start</title>

Page 66: eXtensible Markup Language (XML)

A expressão XQuery anterior retorna os elementos do título da mesmamaneira como são descritos no documento de entrada.

Agora, queremos adicionar alguns elementos HTML para oresultado. Vamos colocar o resultado em uma lista HTML - juntamentecom um texto:

<html><body>

<h1>Bookstore</h1><ul>

{for $x in doc("books.xml")/bookstore/book

order by $x/titlereturn <li>{data($x/title)}. Category: {data($x/@category)}</li>

}</ul>

</body></html>

Page 67: eXtensible Markup Language (XML)

<html><body>

<h1>Bookstore</h1>

<ul><li>Everyday Italian. Category: COOKING</li>

<li>Harry Potter. Category: CHILDREN</li><li>Learning XML. Category: WEB</li>

<li>XQuery Kick Start. Category: WEB</li></ul>

</body></html>

Page 68: eXtensible Markup Language (XML)

ADICIONAR ATRIBUTOS AOS ELEMENTOS HTML

Em seguida, nós queremos usar o atributo da categoria como umatributo de classe na lista HTML:

<html><body>

<h1>Bookstore</h1>

<ul>{

for $x in doc("books.xml")/bookstore/bookorder by $x/title

return <li class="{data($x/@category)}">{data($x/title)}</li>}

</ul>

</body></html>

Page 69: eXtensible Markup Language (XML)

<html><body>

<h1>Bookstore</h1>

<ul><li class="COOKING">Everyday Italian</li>

<li class="CHILDREN">Harry Potter</li><li class="WEB">Learning XML</li>

<li class="WEB">XQuery Kick Start</li></ul>

</body></html>

Page 70: eXtensible Markup Language (XML)

SELECIONANDO E FILTRANDO ELEMENTOS

Como vimos nos capítulos anteriores, estamos selecionando efiltrando elementos com um caminho de expressão ou com umaexpressão FLWOR.

Olhe para a expressão FLWOR seguinte:

for $x in doc("books.xml")/bookstore/bookwhere $x/price>30

order by $x/titlereturn $x/title

for - liga uma variável a cada item retornado pela expressão em letwhere - especifica um critério

Order by - especifica a ordem de classificação do resultadoreturn - especifica o que retornar o resultado

Opcionais

Page 71: eXtensible Markup Language (XML)

A CLÁUSULA FOR

A cláusula for liga uma variável para cada item retornado pela expressão in. A cláusula de resultados em iteração. Pode haver múltiplas cláusulas for na mesma expressão FLWOR.

Para loop de um número específico de vezes em uma cláusula for, você pode usar a palavra-chave to :

for $x in (1 to 5)return <test>{$x}</test>

Resultado:

<test>1</test><test>2</test><test>3</test><test>4</test><test>5</test>

Page 72: eXtensible Markup Language (XML)

A palavra-chave at pode ser utilizada para a contagem da iteração:

for $x at $i in doc("books.xml")/bookstore/book/titlereturn <book>{$i}. {data($x)}</book>

Resultado:

<book>1. Everyday Italian</book><book>2. Harry Potter</book>

<book>3. XQuery Kick Start</book><book>4. Learning XML</book>

Também é permitida mais de uma expressão in em cada cláusula for. Use vírgula para separar cada na expressão:

for $x in (10,20), $y in (100,200)return <test>x={$x} and y={$y}</test>

Resultado:

<test>x=10 and y=100</test><test>x=10 and y=200</test><test>x=20 and y=100</test><test>x=20 and y=200</test>

Page 73: eXtensible Markup Language (XML)

A CLÁUSULA LET

A cláusula let permite atribuições devariáveis e evita repetir a mesma expressãomuitas vezes. A cláusula let não resulta emiteração.

let $x := (1 to 5)return <test>{$x}</test>

Resultado:<test>1 2 3 4 5</test>

Page 74: eXtensible Markup Language (XML)

XQUERY FUNÇÕES INTERNAS

O URI do namespace XQuery é:

http://www.w3.org/2005/02/xpath-functions

O prefixo padrão para o namespace função é fn:.

Dica: As funções são muitas vezes chamada com o fn:prefixo, como fn: string (). No entanto, desde fn: é oprefixo padrão do namespace, os nomes das funções nãoprecisam ser prefixado quando chamado.

Page 75: eXtensible Markup Language (XML)

EXEMPLOS DE CHAMADAS DE FUNÇÃO

Uma chamada para uma função pode aparecer onde umaexpressão aparece. Veja os exemplos abaixo:

Exemplo 1: Em um elemento

<name>{upper-case($booktitle)}</name>

Exemplo 2: o predicado de um caminho de expressão

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']

Exemplo 3: Em uma cláusula let

let $name := (substring($booktitle,1,4))

Page 76: eXtensible Markup Language (XML)

FUNÇÕES XQUERY DEFINIDAS PELO USUÁRIO

Se você não consegue encontrar a função XQuery que você precisa, você pode escrever a sua própria.

Funções definidas pelo usuário podem ser definidas na consulta ou em uma biblioteca separada.

Sintaxe

declare function prefix:function_name($parameter AS datatype)AS returnDatatype{...function code here...

}

Page 77: eXtensible Markup Language (XML)

NOTAS SOBRE FUNÇÕES DEFINIDAS PELO USUÁRIO:

Use a palavra-chave declare function O nome da função deve ser prefixado O tipo de dados dos parâmetros são basicamente o mesmo que

os definidos em XML Schema O corpo da função deve estar entre chaves

Exemplo de uma função definida pelo usuário declarado na consulta

declare function local:minPrice($p as xs:decimal?,$d as xs:decimal?)AS xs:decimal?{let $disc := ($p * $d) div 100return ($p - $disc)}

Abaixo está um exemplo de como chamar a função acima:

<minPrice>{local:minPrice($book/price,$book/discount)}</minPrice>

Page 78: eXtensible Markup Language (XML)

Aqui está um exemplo de uma questão que poderia seresolver com XQuery:

"Selecione todos os registros de CD com um preço inferiora US$10 a partir da coleção de CDs armazenados nodocumento XML chamado cd_catalog.xml"

Page 79: eXtensible Markup Language (XML)

Document Type Definition - DTD

Uma definição de tipo de documento (DTD) define os blocos deconstrução legais de um documento XML. Ele define a estrutura dodocumento com uma lista de elementos jurídicos e atributos.

A DTD pode ser declarado embutido no documento XML, ou comouma referência externa.

Page 80: eXtensible Markup Language (XML)

Se o DTD é declarada dentro do arquivo XML, deve ser envolvido emuma definição DOCTYPE com a seguinte sintaxe:

<!DOCTYPE root-element [element-declarations]>

Exemplo de documento XML com um DTD interno:

<?xml version="1.0"?><!DOCTYPE note [

<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)>

<!ELEMENT body (#PCDATA)>]>

DTD Interno

Page 81: eXtensible Markup Language (XML)

Se o DTD é declarado em um arquivo externo, ele deve ser envolto em uma definição DOCTYPE com a seguinte sintaxe:

<!DOCTYPE root-element SYSTEM "filename">

Este é o mesmo documento XML anterior, mas com um DTD externo ( Abra-o e selecione ver código):

<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd">

<note><to>Tove</to>

<from>Jani</from><heading>Reminder</heading>

<body>Don't forget me this weekend!</body></note>

DTD Externo

Page 82: eXtensible Markup Language (XML)

Por Que Usar um DTD?

Com um DTD, cada um de seus arquivos XML pode transportar umadescrição do seu próprio formato.

Com um DTD, grupos independentes de pessoas podem concordar em usarum DTD padrão para troca de dados.

O aplicativo pode usar um DTD padrão para verificar se os dados que vocêrecebe do mundo exterior é válido.

Você também pode usar um DTD para verificar seus próprios dados.

Page 83: eXtensible Markup Language (XML)

Criando um DTD

Ao criar um DTD, você precisa definir todos os elementos e atributosque você terá nos documentos XML. Então vamos criar um DTD parao nosso documento XML.

Blocos de Construção XML

Do ponto de vista DTD, todos os documentos XML (e HTML) são compostos pelos seguintes blocos:

• Elementos• Atributos• Entidades• PCDATA• CDATA

Page 84: eXtensible Markup Language (XML)

Os elementos são declarados da seguinte forma:

<!ELEMENT elementName ( elementParts ) >

Atributos são declarados como esta:

<!ATTLIST elementName attributeName attributeType attributeDefault >

Então, quando criarmos um DTD para nosso arquivo XML, teríamos algo como isto:

<!ELEMENT message ( email | letter ) ><!ELEMENT letter ( letterhead, text ) >

<!ELEMENT email (header, subject?, text+) ><!ATTLIST letter reply ( yes | no ) "no" ><!ATTLIST email reply ( yes | no ) "no" >

<!ELEMENT header ( sender, recipient*, date?) ><!ELEMENT subject ( #PCDATA) >

<!ELEMENT letterhead ( sender, recipient*, date ) ><!ELEMENT sender ( #PCDATA ) >

<!ELEMENT recipient ( #PCDATA ) ><!ELEMENT date ( #PCDATA ) >

<!ELEMENT text ( #PCDATA | salutation )* ><!ELEMENT salutation ( #PCDATA ) >

Page 85: eXtensible Markup Language (XML)

Elementos DTDEm um DTD, elementos são declarados como !ELEMENT.

Declarando Elementos:

<!ELEMENT element-name category>or

<!ELEMENT element-name (element-content)>

Elementos vazios são declarados com a categoria chave EMPTY

<!ELEMENT element-name EMPTY>

Exemplo:

<!ELEMENT br EMPTY>

XML exemplo:

<br />

Page 86: eXtensible Markup Language (XML)

Elementos com dados de caracter apenas analisados são declarados com#PCDATA entre parênteses:

<!ELEMENT element-name (#PCDATA)>Exemplo:

<!ELEMENT from (#PCDATA)>

Elementos declarados com a palavra-chave ANY, pode conter qualquercombinação de dados analisáveis:

<!ELEMENT element-name ANY>Exemplo:

<!ELEMENT note ANY>

Elementos com Children (sequencias) são declarados dentro de parenteses:

<!ELEMENT element-name (child1,child2,...)>Exemplo:

<!ELEMENT note (to,from,heading,body)>

Elementos DTD

Page 87: eXtensible Markup Language (XML)

Elementos DTDDeclarando Apenas uma ocorrência de um elemento:

<!ELEMENT element-name (child-name)>

Exemplo:<!ELEMENT note (message)>

Declarando ocorrência mínima de um elemento

<!ELEMENT element-name (child-name+)>

Exemplo:<!ELEMENT note (message+)>

Declarando zero ou mais ocorrências de um elemento

<!ELEMENT element-name (child-name*)>

Exemplo:<!ELEMENT note (message*)>

Page 88: eXtensible Markup Language (XML)

Elementos DTD

Declarando um ou outro conteúdo

Exemplo:

<!ELEMENT note (to,from,header,(message|body))>

Declarando conteúdo misto

Exemplo:

<!ELEMENT note (#PCDATA|to|from|header|message)*>

Page 89: eXtensible Markup Language (XML)

Atributos DTD

Uma declaração de atributo tem a seguinte sintaxe:

<!ATTLIST element-name attribute-name attribute-type default-value>

Exemplo DTD:

<!ATTLIST payment type CDATA "check">

Exemplo XML:

<payment type="check" />

Page 90: eXtensible Markup Language (XML)

Atributos DTD

Tipo Descrição

CDATA O valor é de dados de carácter

( en1 | en2 | ..) O valor deve ser um de uma lista enumerada

ID O valor é um ID único

IDREF O valor é o ID de outro elemento

IDREFS O valor é uma lista de ids de outros

NMTOKEN O valor é um nome XML válido

NMTOKENS O valor é uma lista de nomes XML válidos

ENTITY O valor é uma entidade

ENTITIES O valor é uma lista de entidades

NOTATION O valor é um nome de uma notação

xml: O valor é um valor predefinido xml

Valor Explicação

valor O valor padrão do atributo

# REQUIRED O atributo é necessário

# IMPLIED O atributo não é necessário

# FIXED valor O valor do atributo é fixo

Tipos de Atributos:Valor Padrão de Atributos:

Page 91: eXtensible Markup Language (XML)

Elementos vs AtributosEm XML, não há regras sobre quando usar atributos e quando usar elementos filhos.

Atributos HTML e Elementos filhos XML

Deve-se evitar o uso de atributos?

Alguns dos problemas com atributos são:

• Atributos não podem conter múltiplos valores (elementos filhos podem)• Atributos não são facilmente expansível (para futuras mudanças)• Atributos não podem descrever estruturas (elementos filhos podem)• Atributos são mais difíceis de manipular por código de programa• Valores de atributos não são fáceis de testar contra um DTD

Exceção: Os metadados (dados sobre dados) devem ser armazenados como atributos, e que os próprios dados devem ser armazenados como elementos.

Page 92: eXtensible Markup Language (XML)

Entidades DTD

Entidades são variáveis utilizadas para definir atalhos para texto padrão ou caracteres especiais.

• Referências a entidades são referências a entidades• Entidades podem ser declaradas interno ou externo

Interna: <!ENTITY entity-name "entity-value">DTD:<!ENTITY writer "Donald Duck.">

XML:<author>&writer;</author>

Externa: <!ENTITY entity-name SYSTEM "URI/URL">DTD:<!ENTITY writer SYSTEM "www.w3schools.com/entities.dtd">

XML:<author>&writer;</author>

Page 93: eXtensible Markup Language (XML)

Exemplos DTD

Programação TV

Artigo de Jornal

Catálogo de Produtos

Page 94: eXtensible Markup Language (XML)

WSDLWSDL (Web Services Description Language) é uma linguagem baseadaem XML para descrever serviços Web e como acessá-los.

O que é o WSDL?

WSDL é escrito em XML WSDL é um documento XML WSDL é usado para descrever serviços Web WSDL também é usado para localizar serviços Web WSDL é uma recomendação da W3C desde 2007

WSDL descreve web services

O documento descreve um serviço web. Ele especifica a localização do serviço e as operações (ou

métodos) que o serviço expõe.

Page 95: eXtensible Markup Language (XML)

Um documento WSDL é apenas um documento XML simples. Elecontém um conjunto de definições para descrever um serviço web.

Um documento WSDL

A estrutura do documento WSDL

Elemento Descrição

<types> Um recipiente para definições de tipo de dados usados pelo web service

<message> Uma definição tipada dos dados a serem comunicados

<portType> Um conjunto de operações suportadas por um ou mais parâmetros

<binding> A especificação do formato de protocolo e de dados para um tipo de porta particular

Um documento WSDL descreve um serviço web usando esseselementos principais:

Page 96: eXtensible Markup Language (XML)

A estrutura principal de um documento WSDL parecido com esta:

<definitions>

<types>data type definitions........

</types>

<message>definition of the data being communicated....

</message>

<portType>set of operations......

</portType>

<binding>protocol and data format specification....

</binding>

</definitions>

Page 97: eXtensible Markup Language (XML)

Um documento WSDL pode também conter outros elementos, taiscomo elementos de extensão, e um elemento de serviço, que tornapossível agrupar as definições dos vários Web services num únicodocumento WSDL.

Portas WSDL

O elemento <portType> é o mais importante elemento WSDL.

Ele descreve um web service, as operações que podem ser realizadas, e as mensagens que estão envolvidas.

O elemento <portType> pode ser comparado com uma biblioteca de função (ou um módulo, ou uma classe) em uma linguagem de programação tradicional.

<portType>set of operations......

</portType>

Page 98: eXtensible Markup Language (XML)

Mensagens WSDL

O elemento <mesage> define os elementos de dados de umaoperação.

Cada mensagem pode consistir de uma ou mais partes. As partespodem ser comparadas com os parâmetros de uma chamada defunção em uma linguagem de programação tradicional.

<message>definition of the data being communicated....

</message>

Page 99: eXtensible Markup Language (XML)

Tipos WSDL

O elemento <types> define os tipos de dados que são utilizadospelo web service.

WSDL usa sintaxe XML Schema para definir tipos de dados.

<types>data type definitions........

</types>

Vinculações WSDL

O elemento <binding> define o formato dos dados e protocolo paracada tipo de porta.

<binding>protocol and data format specification....

</binding>

Page 100: eXtensible Markup Language (XML)

Exemplo WSDL<message name="getTermRequest"><part name="term" type="xs:string"/>

</message>

<message name="getTermResponse"><part name="value" type="xs:string"/>

</message>

<portType name="glossaryTerms"><operation name="getTerm">

<input message="getTermRequest"/><output message="getTermResponse"/>

</operation></portType>

Comparado a programação tradicional, glossaryTerms é uma biblioteca de função ", getTerm" é uma função de "getTermRequest" como o parâmetro de

entrada, e getTermResponse como o parâmetro de retorno.

Page 101: eXtensible Markup Language (XML)

WSDL - O Elemento <portType>

Tipos de operação

Type Definition

One-wayA operação pode receber uma mensagem, masnão vai retornar uma resposta

Request-responseA operação pode receber um pedido e retornaruma resposta

Solicit-responseA operação pode enviar um pedido e esperar poruma resposta

NotificationA operação pode enviar uma mensagem, mas nãovai esperar por uma resposta

Page 102: eXtensible Markup Language (XML)

Operação One-Way <message name="newTermValues"><part name="term" type="xs:string"/><part name="value" type="xs:string"/>

</message>

<portType name="glossaryTerms"><operation name="setTerm">

<input name="newTerm" message="newTermValues"/></operation>

</portType >

No exemplo acima, o "portType glossaryTerms" define uma operaçãounidirecional chamado "setTerm". A operação "setTerm" permite aentrada de novos termos do glossário mensagens usando umamensagem "newTermValues" com os parâmetros de entrada “term" e"value". No entanto, nenhuma saída é definida para a operação.

Page 103: eXtensible Markup Language (XML)

Operação Request-Response<message name="getTermRequest"><part name="term" type="xs:string"/>

</message>

<message name="getTermResponse"><part name="value" type="xs:string"/>

</message>

<portType name="glossaryTerms"><operation name="getTerm">

<input message="getTermRequest"/><output message="getTermResponse"/>

</operation></portType>

Page 104: eXtensible Markup Language (XML)

WSDL BindingsVinculando a SOAP

Um exemplo de operação de resquest-response:

<message name="getTermRequest"><part name="term" type="xs:string"/>

</message>

<message name="getTermResponse"><part name="value" type="xs:string"/>

</message>

<portType name="glossaryTerms"><operation name="getTerm">

<input message="getTermRequest"/><output message="getTermResponse"/>

</operation></portType>

<binding type="glossaryTerms" name="b1"><soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http" /><operation>

<soap:operation soapAction="http://example.com/getTerm"/><input><soap:body use="literal"/></input>

<output><soap:body use="literal"/></output></operation></binding>

Page 105: eXtensible Markup Language (XML)

O elemento binding tem dois atributos – type e name.

O atributo name (você pode usar qualquer nome que você quiser)define o nome da binding, e o atributo type pontos para a porta dobinding, neste caso, a porta "glossaryTerms“.

O SOAP: elemento binding tem dois atributos – style e transport.

O atributo style pode ser "rpc" ou "document". Neste caso, usamosdocument. O atributo transport define o protocolo SOAP a serusado. Neste caso, usar o HTTP.

O elemento operation define cada operação que o portType expõe.

Para cada operação uma ação SOAP correspondente tem de serdefinida. Você também deve especificar como a entrada e saída sãocodificados. Neste caso, usamos "literal".

Page 106: eXtensible Markup Language (XML)

WSDL e UDDI

Universal Description, Discovery and Integration (UDDI) é um serviçode diretório, onde as empresas podem se registrar e procurar serviçosweb.

O que é UDDI?

UDDI é um diretório de interfaces web service descrito pelo WSDLUDDI se comunica via SOAPUDDI é construído dentro da plataforma Microsoft. NET

Page 107: eXtensible Markup Language (XML)

O que é UDDI baseia?

UDDI utiliza World Wide Web Consortium (W3C) e Internet EngineeringTask Force (IETF) padrões de Internet, tais como XML, HTTP eprotocolos DNS.

UDDI usa WSDL para descrever as interfaces de serviços web.

Além disso, recursos de programação de plataforma cruzada sãosuperados adotando SOAP, conhecido como protocolo XML deespecificações de mensagens encontradas no site da W3C.

Benefícios UDDIComo pode ser UDDI Usado?Quem está apoiando UDDI?

Page 108: eXtensible Markup Language (XML)

SOAP (Simple Object Access Protocol)É um protocolo baseado em XML para permitir troca de informaçõesde aplicativos via HTTP.

SOAP fornece uma forma de comunicação entre aplicações rodandoem diferentes sistemas operacionais, com diferentes tecnologias elinguagens de programação.

Page 109: eXtensible Markup Language (XML)

Blocos de Construção de SOAPUma mensagem SOAP é um documento XML comum contendo osseguintes elementos:

Envelope - que identifica o XML como uma mensagem SOAP Header - que contém informações de cabeçalho Body - que contém informações de chamada e resposta Fault - contendo erros e informações de status

Todos os elementos acima são declarados no namespace padrão parao envelope SOAP: http://www.w3.org/2001/12/soap-envelope

E o namespace padrão para codificação SOAP e tipos de dados é:http://www.w3.org/2001/12/soap-encoding

Page 110: eXtensible Markup Language (XML)

Regras de sintaxe

Uma mensagem SOAP DEVE ser codificado usando XML

Uma mensagem SOAP DEVE usar o namespace envelope SOAP

Uma mensagem SOAP DEVE usar o namespace codificação SOAP

Uma mensagem SOAP NÃO DEVE conter uma referência DTD

Uma mensagem SOAP NÃO DEVE conter instruções deprocessamento XML

Page 111: eXtensible Markup Language (XML)

Esqueleto mensagem SOAP<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>...

</soap:Header>

<soap:Body>...

<soap:Fault>...

</soap:Fault></soap:Body>

</soap:Envelope>

Page 112: eXtensible Markup Language (XML)

O elemento Header<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header><m:Trans xmlns:m="http://www.w3schools.com/transaction/"

soap:mustUnderstand="1">234OU

soap:actor="http://www.w3schools.com/appml/">234OU

soap:encondingstyle=“URI”>234</m:Trans>

</soap:Header>...

</soap:Envelope>

Page 113: eXtensible Markup Language (XML)

O elemento Body<?xml version="1.0"?>

<soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body><m:GetPrice xmlns:m="http://www.w3schools.com/prices">

<m:Item>Apples</m:Item></m:GetPrice></soap:Body>

RESPOSTA

<soap:Body><m:GetPriceResponse

xmlns:m="http://www.w3schools.com/prices"><m:Price>1.90</m:Price></m:GetPriceResponse>

</soap:Body>...

Page 114: eXtensible Markup Language (XML)

O elemento FaultUsado para indicar as mensagens de erro.

SubElementos Descrição

<faultcode> Um código de identificação da falha

<faultstring> Uma explicação legível da falha

<faultactor> Informações sobre quem causou a falha

<detail> Contém informações de erro da aplicação específica relacionada ao elemento Body

<soap:Body><soap:Fault>

...</soap:Fault></soap:Body>

Page 115: eXtensible Markup Language (XML)

Erro Descrição

VersionMismatchEncontrou um namespace inválido para o elemento

envelope

MustUnderstandUm elemento filho imediato do elemento header, com o

atributo mustUnderstand definido para "1", não foi entendido

ClientA mensagem foi formada incorretamente ou continham

informações incorretas

ServerHouve um problema com o servidor para que a

mensagem não poderia proceder

Códigos de falha de SOAPOs valores a seguir devem ser usados no elemento faultcode aodescrever falhas:

Page 116: eXtensible Markup Language (XML)

<?xml version="1.0"?><soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>…

<soap:Fault><faultcode>soap:Client</faultcode>

<faultstring>Failed to locate method (ValidateCreditCard) in class

(examplesCreditCard) at /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.

</faultstring></soap:Fault>

</soap:Body></soap:Envelope>

Exemplo de Implementação

Page 117: eXtensible Markup Language (XML)

Comunicação HTTP SOAPO protocolo HTTP se comunica através de TCP/IP. Um cliente seconecta a um servidor HTTP usando TCP. Depois de estabelecer aconexão, o cliente pode enviar uma mensagem de solicitação HTTPpara o servidor:

POST /item HTTP/1.1Host: 189.123.255.239

Content-Type: text/plainContent-Length: 200

O servidor processa o pedido e envia uma resposta HTTP pro clientecom código de status:

200 OKContent-Type: text/plain

Content-Length: 200

Se o servidor não consegue processar o pedido, ele retornaria isto:

400 Bad RequestContent-Length: 0

Page 118: eXtensible Markup Language (XML)

HTTP + XML = SOAP

Uma solicitação SOAP pode ser um HTTP POST ou uma solicitação HTTP GET.

A solicitação HTTP POST especifica pelo menos dois cabeçalhos HTTP:Content-Type e Content-Length.

Content-Type

Define o tipo MIME para a mensagem e a codificação de caracteres (opcional)usado para o corpo XML do pedido ou

resposta.

POST /item HTTP/1.1Content-Type: application/soap+xml;

charset=utf-8

Content-Length

Especifica o número de bytes no corpo do pedido ou resposta.

POST /item HTTP/1.1Content-Type: application/soap+xml;

charset=utf-8Content-Length: 250

Page 119: eXtensible Markup Language (XML)

Um SOAP Request:

POST /InStock HTTP/1.1Host: www.example.org

Content-Type: application/soap+xml; charset=utf-8Content-Length: 100

<?xml version="1.0"?><soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock"><m:GetStockPrice>

<m:StockName>IBM</m:StockName></m:GetStockPrice>

</soap:Body>

</soap:Envelope>

Page 120: eXtensible Markup Language (XML)

Um SOAP Response:

HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8

Content-Length: nnn

<?xml version="1.0"?><soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock"><m:GetStockPriceResponse>

<m:Price>34.5</m:Price></m:GetStockPriceResponse>

</soap:Body>

</soap:Envelope>

Page 121: eXtensible Markup Language (XML)

Web ServicesWeb Services pode converter seu aplicativo em um aplicativo Web, quepode publicar sua função ou mensagem para o resto do mundo.

Web Services é simplesmente XML + HTTP

Page 122: eXtensible Markup Language (XML)

Por Web Services?

Alguns anos atrás, Web services não era rápido o suficiente para serinteressante.

A interoperabilidade tem mais alta prioridade

Quando todas as principais plataformas podem acessar a web usandonavegadores, plataformas diferentes não podem interagir. Para essasplataformas trabalharem em conjunto, foram desenvolvidas asaplicações web.

Web services usam XML para codificar e decodificar os dados, e SOAP para transportá-lo (usando protocolos abertos).

Page 123: eXtensible Markup Language (XML)

Web Services têm dois tipos de usos

Aplicação-componentes reutilizável

Web services podem oferecer aplicações-componentes como:conversão de moedas, previsão do tempo, ou mesmo tradutor delinguagens como serviços.

Conecção com software existente

Web services podem ajudar a resolver o problema deinteroperabilidade, dando a diferentes aplicações uma forma devincular seus dados.

Page 124: eXtensible Markup Language (XML)

Elementos Web Services

Page 125: eXtensible Markup Language (XML)

EXEMPLOQualquer aplicação pode ter um componente de Web Service.Web services podem ser criados independentemente da linguagem deprogramação.

No exemplo a seguir, vamos utilizar o Java para criar um Web Servicesimples.

Page 126: eXtensible Markup Language (XML)

Formado em Análise de Sistemas

Pós-Graduado em Auditoria em T.I.

Gerente de TI da CLIOC – Coleção de Leishmania do

Instituto Oswaldo Cruz – Fiocruz

Certificado em Gestão de Segurança da Informação e

Gerenciamento de T.I. pela Academia Latino-Americana

(Microsoft TechNet / Módulo Security)

Carlos Henrique M. da [email protected]