SlideShare uma empresa Scribd logo
1 de 126
Carlos Henrique M. da Silva
carloshenrique.85@globo.com
 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
Extensible Markup Language (XML) é linguagem de marcação de
dados (meta-markup language) que provê um formato para
descrever dados estruturados.
O XML permite a definição de um número infinito de tags. Enquanto
no HTML, se as tags podem ser usadas para definir a formatação de
caracteres e parágrafos, o XML provê um sistema para criar tags
para dados estruturados.
Um elemento XML pode ter dados declarados como sendo preços de
venda, taxas de preço, um título de livro, a quantidade de chuva, ou
qualquer outro tipo de elemento de dado.
O Que é 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 utilizam
sintaxes similares. Se você é familiar com HTML, também o será com
o XML. A grande diferença entre HTML e XML é que o HTML descreve
a aparência e a ações em uma página na rede enquanto o XML não
descreve nem aparência nem ações, mas sim o que cada trecho de
dados é ou representa! Em outras palavras, o XML descreve o
conteúdo do documento!
Características do XML
Representação estruturada dos dados
O XML provê um padrão que pode codificar o conteúdo, as
semânticas e as esquematizações para uma grande variedade de
aplicaçõ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 controles
ActiveX.
 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.
Características do XML
Separação entre dados e apresentação
A mais importante característica do XML se resume em separar a
interface com o usuário (apresentação) dos dados estruturados. O
HTML especifica como o documento deve ser apresentado na tela por
um navegador. Já o XML define o conteúdo do documento. Por
exemplo, em HTML são utilizadas tags para definir tamanho e cor de
fonte, assim como formatação de parágrafo. No XML você utiliza as
tags 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 definidas
com Extensible Style Language (XSL) e Cascading Style Sheets (CSS)
para a apresentação de dados em um navegador.
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).
Definição conceitual do XML
Estrutura do documento
Um documento XML é uma árvore rotulada onde um nó externo
consiste de:
 Dados de caracteres (uma sequência de texto)
 Instruções de processamento (anotações para os
processadores), 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 consistindo
de um nome e um valor.
Normalmente, comentários, declarações de entidades e informações
DTD não são explicitamente representadas na árvore.
<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>
Padrões da Estrutura do XML
O XML é baseado em padrões de tecnologia comprovadamente
otimizados para a Web.
Os padrões que compõem o XML são definidos pelo W3C (World Wide
Web Consortium) e são os seguintes:
 Extensible Markup Language (XML)
 XML Namespaces - é também uma Recomendação, a qual descreve
a sintaxe de namespace, ou espaço de nomes, e que serve para criar
prefixos para os nomes de tags.
 Document Object Model (DOM) Level 1 - é uma Recomendação que
provê formas de acesso aos dados estruturados utilizando scripts,
permitindo aos desenvolvedores interagir e computar tais dados
consistentemente.
 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).
Principais Benefícios da Linguagem XML
O XML tem por objetivo trazer flexibilidade e poder às aplicações
Web.
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, de
mú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 e
escalável.
 Padrões abertos.
Inserindo XML em Documentos HTML
Um documento XML não indica por si só como a informação deve ser
visualizada. Já o HTML é uma linguagem ótima para a apresentação de
dados para o usuário final.
Os mecanismos de ligação de dados e folhas de estilos podem ser
usados para organizar os dados XML em uma apresentação visual, e
para adicionar interatividade.
O XSL (Extensible Stylesheet Language) pode adicionar poderes ainda
maiores à esse processo. Uma folha de estilos XSL contém instruções
de como retirar informação de um documento XML e transformá-la
para outro formato, como o HTML. Essa transformação é feita de
forma declarativa, e não via scripts.
Os Cascade Style Sheets (CSSs) também podem ser usados para
dados XML, só que de estrutura mais simplificada, e são usuais em
tais situações. Entretanto, os CSSs não provém uma estrutura de
apresentação que se difere da estrutura da fonte de dados. Com o
XSL, é possível gerar estruturas de apresentação (em HTML, por
exemplo) que são bem diferentes das estruturas de dados originais
dos documentos XML, como mostrado a seguir.
Inserindo XML em Documentos HTML
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 Markup
Language)
 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 encontrada
em www.oasis-open.org/cover/xml.html#applications
Regras para Boa Formação de um Arquivo XML
 Todo documento XML, além da tag introdutória, deve ter um único
elemento (tag) que sirva como raiz para todos os demais elementos
do documento;
 XML é case sensitive, portanto difere letras maiúsculas e
minúsculas, devendo tomar cuidado com o uso de CamelCases.
 Todo elemento XML deve ser iniciado e fechado, exceto o que
define 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-->).
O Objeto XMLHttpRequest
Todos os browsers modernos (IE7+, Firefox, Chrome, Safari, and
Opera) 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 um
objeto ActiveX:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
Analisador XML
Um Analisador XML converte um documento XML em um objeto
DOM 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;
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" ?>
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>carloshenrique.85@globo.com</email>
.
.
.
</curriculo>
XSL - consiste em três partes:
1. XSLT - uma linguagem para transformar documentos XML
2. XPath - uma linguagem para navegar em documentos XML
3. XSL-FO - uma linguagem para formatar documentos XML
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).
Esquematizando temos:
 XML - Informação (dados)
 XSL , CSS - Apresentação ( XML + XSL = HTML )
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:
<?xml-stylesheet type="text/xsl" href="arquivo.xsl"?>
A primeira coisa a fazer para formatar um documento XML é incluir
uma linha no documento XML a ser formatado que indique o arquivo
XSL que irá formatar os dados que serão exibidos no Navegador. A
sintaxe 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>
<?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.
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".
Elemento <xsl:template>
Uma folha de estilo XSL consiste em um ou mais conjunto de regras
que 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 um
elemento XML. O atributo de partida também pode ser usado para
definir um modelo para todo o documento XML. O valor do atributo
de correspondência é uma expressão XPath (ex.: match = "/" define o
documento 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="/">
Elemento <xsl:value-of>
O elemento <xsl:value-of> pode ser usado para extrair o valor de um
elemento 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-of
select="catalog/cd/artist"/></td>
</tr>
O atributo select no exemplo acima, contém uma expressão
XPath. Uma expressão XPath funciona como navegar em um sistema
de arquivos; uma barra (/) seleciona subdiretórios.
Elemento <xsl:for-each>
O elemento <xsl:for-each> pode ser usado para selecionar todos os
elementos 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>
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)
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> dentro
do 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>
Elemento <xsl:if>
É usado para colocar um teste condicional contra o conteúdo do
arquivo 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 os
elementos do título e artista dos CDs que tem
um preço que é superior a 10.
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.
EXERCÍCIOS
Criar um documento XSL para cada um dos
elementos mostrados anteriormente e
vinculá-los ao documento XML de catálogo
de CDs
Criar um documento XSL aplicando os
elementos cabíveis ao documento XML de
Curriculo
É usado para navegar através de elementos e
atributos em um documento XML.
XPath é um elemento importante em no padrão
XSLT da W3C.
XQuery e XPointer são ambos construídos em
expressões XPath.
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 um
documento XML. Essas expressões de caminho se parecem muito com
as expressões que você vê quando você trabalha num sistema de
arquivos de um computador.
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ções
para cadeia de valores, valores numéricos de data e hora,
nós de comparação e manipulação QName, manipulação
de seqüência, valores booleanos, e muito mais. Veja mais
em: Funções XPath
Em XPath, existem 7 tipos de nós:
1. Elemento
2. Atributo
3. Texto
4. Namespace
5. Instrução de processamento
6. Comentário
7. Documentos
Documentos XML são tratados como árvores de nós. O
elemento mais alto da árvore é chamado de elemento raiz
(root).
Valores atômicos - São os nós sem filhos ou pais.
Exemplo:
ITENS
Os itens são valores atômicos ou nós.
RELAÇÃO DE NÓS
PAI 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 ?????
XPath Sintaxe
XPath usa expressões de caminho para selecionar nós ou
conjuntos de nós em um documento XML. O nó é
selecionado através de um caminho ou etapas.
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:
CAMINHO EXPRESSÃO RESULTADO
bookstore Seleciona todos os nós com o nome de “bookstore"
/bookstore
Seleciona 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
//book
Seleciona todos os elementos do livro, não importa onde eles estão
no documento
Bookstore//book
Seleciona 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 seus
resultados:
PREDICADOS
Predicados são usados ​​para encontrar um nó
específico ou um nó que contém um valor
específico. Predicados são sempre incorporados
em colchetes.
TABELA
SELECIONANDO NÓS DESCONHECIDOS
XPath curingas podem ser usados ​​para selecionar elementos XML
desconhecidos.
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 seus
resultados:
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
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 eo
resultado das expressões:
EXPRESSÃO RESULTADO
//book/title | //book/price
Seleciona todos os elementos title E price de
todos os elementos do livro
//title | //price
Seleciona todos os elementos title E de price no
documento
/bookstore/book/title | //price
Seleciona todos os elementos título do elemento
livro, do elemento livraria. E todos os elementos
de preço no documento
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
EXPRESSÃO DE CAMINHO LOCAL
O caminho do local pode ser absoluto ou relativo. Um caminho local
absoluto começa com uma barra (/) e um caminho local relativo
não. Em ambos os casos, o caminho do local consiste em uma ou mais
etapas, cada um separado por uma barra:
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 é:
EXEMPLO RESULTADO
child::book
Seleciona 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::book
Seleciona 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
OPERADORES XPATH
Uma expressão XPath retorna um conjunto de nós, uma string, um
booleano, ou um número.
Abaixo está uma lista dos operadores que podem ser utilizados nas
expressões XPath:
OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO
|
Calcula dois
conjuntos de nós
//book |
//cd
Retorna 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.80
verdadeiro se o preço é 9,80
falso se o preço é 9,90
! = Não igual price!=9.80
verdadeiro se o preço é 9,90
falso se o preço é 9,80
OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO
< Menor que price<9.80
verdadeiro se o preço é
9,00
falso se o preço é 9,80
<= Inferior ou igual a price<=9.80
verdadeiro se o preço é
9,00
falso se o preço é 9,90
> Maior do que price>9.80
verdadeiro se o preço é
9,90
falso se o preço é 9,80
> = Maior do que ou igual a price>=9.80
verdadeiro se o preço é
9,90
falso se o preço é 9,70
or Ou
price=9.80 or
price=9.70
verdadeiro se o preço é
9,80
falso se o preço é 9,50
and E
price>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
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
XQuery 1.0 e XPath 2.0 compartilham o mesmo modelo de
dados e apoiam as mesmas funções e operadores. Se você
já estudou XPath você não terá problemas com a
compreensão XQuery.
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.
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 um
documento XML.
A expressão de caminho a seguir é usado para selecionar todos os
elementos do título no arquivo "books.xml":
doc("books.xml")/bookstore/book/title
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>
Expressões XQuery FLWOR
FLWOR é um acrônimo para "For, Let, Where, Order by, Return".
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
A cláusula For seleciona todos os elementos do livro sob o elemento
livraria em uma variável chamada $x.
A cláusula Where seleciona apenas os elementos do livro com um
elemento de preço com um valor maior do que 30.
A cláusula Order by define a ordem de classificação. Vai ser tipo pelo
elemento título.
A cláusula Return especifica o que deve ser devolvido. Aqui ele retorna
os elementos do título.
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 os
elementos do livro que estão sob o elemento livraria que tem um
elemento preço com um valor que é maior do que 30.
A expressão FLWOR seguinte irá selecionar exatamente a mesma
coisa: for $x in
doc("books.xml")/bookstore/book
where $x/price>30
return $x/title
O resultado será:
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
Apresentar o resultado em uma lista HTML
Olhe para a seguinte expressão FLWOR XQuery:
for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x
A expressão acima irá selecionar todos os elementos do título e
devolve os elementos do título em ordem alfabética.
Agora queremos listar todos os livros-títulos em nossa livraria em
uma lista HTML. Nós adicionamos as tags <ul> e <li> à expressão
FLWOR:
<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{$x}</li>
}
</ul>
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 os
dados dentro do elemento de título:
<ul>
{
for $x in
doc("books.xml")/bookstore/book/title
order by $x
return <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>
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 :)
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/book
return 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ão
necessá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>
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
Adicionando elementos e atributos para o Resultado
Como vimos no capítulo anterior, podemos incluir elementos e
atributos do documento de entrada ("books.xml) no resultado:
for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x
A expressão XQuery acima inclue tanto o elemento título e quanto o
atributo 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>
A expressão XQuery anterior retorna os elementos do título da mesma
maneira como são descritos no documento de entrada.
Agora, queremos adicionar alguns elementos HTML para o
resultado. Vamos colocar o resultado em uma lista HTML - juntamente
com um texto:
<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Category: {data($x/@category)}</li>
}
</ul>
</body>
</html>
<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>
ADICIONAR ATRIBUTOS AOS ELEMENTOS HTML
Em seguida, nós queremos usar o atributo da categoria como um
atributo de classe na lista HTML:
<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li class="{data($x/@category)}">{data($x/title)}</li>
}
</ul>
</body>
</html>
<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>
SELECIONANDO E FILTRANDO ELEMENTOS
Como vimos nos capítulos anteriores, estamos selecionando e
filtrando elementos com um caminho de expressão ou com uma
expressão FLWOR.
Olhe para a expressão FLWOR seguinte:
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
for - liga uma variável a cada item retornado pela expressão em let
where - especifica um critério
Order by - especifica a ordem de classificação do resultado
return - especifica o que retornar o resultado
Opcionais
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>
A palavra-chave at pode ser utilizada para a contagem da iteração:
for $x at $i in doc("books.xml")/bookstore/book/title
return <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>
A CLÁUSULA LET
A cláusula let permite atribuições de
variáveis ​​e evita repetir a mesma expressão
muitas vezes. A cláusula let não resulta em
iteração.
let $x := (1 to 5)
return <test>{$x}</test>
Resultado:
<test>1 2 3 4 5</test>
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: é o
prefixo padrão do namespace, os nomes das funções não
precisam ser prefixado quando chamado.
EXEMPLOS DE CHAMADAS DE FUNÇÃO
Uma chamada para uma função pode aparecer onde uma
expressã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)='H
arry']
Exemplo 3: Em uma cláusula let
let $name := (substring($booktitle,1,4))
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...
}
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 100
return ($p - $disc)
}
Abaixo está um exemplo de como chamar a função acima:
<minPrice>{local:minPrice($book/price,$book/discount)}</minPrice>
Aqui está um exemplo de uma questão que poderia se
resolver com XQuery:
"Selecione todos os registros de CD com um preço inferior
a US$10 a partir da coleção de CDs armazenados no
documento XML chamado cd_catalog.xml"
Document Type Definition - DTD
Uma definição de tipo de documento (DTD) define os blocos de
construção legais de um documento XML. Ele define a estrutura do
documento com uma lista de elementos jurídicos e atributos.
A DTD pode ser declarado embutido no documento XML, ou como
uma referência externa.
Se o DTD é declarada dentro do arquivo XML, deve ser envolvido em
uma 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
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
Por Que Usar um DTD?
Com um DTD, cada um de seus arquivos XML pode transportar uma
descrição do seu próprio formato.
Com um DTD, grupos independentes de pessoas podem concordar em usar
um 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.
Criando um DTD
Ao criar um DTD, você precisa definir todos os elementos e atributos
que você terá nos documentos XML. Então vamos criar um DTD para
o 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
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 ) >
Elementos DTD
Em 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 />
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 qualquer
combinaçã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
Elementos DTD
Declarando 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*)>
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)*>
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" />
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:
Elementos vs Atributos
Em 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.
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>
Exemplos DTD
Programação TV
Artigo de Jornal
Catálogo de Produtos
WSDL
WSDL (Web Services Description Language) é uma linguagem baseada
em 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.
Um documento WSDL é apenas um documento XML simples. Ele
conté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 esses
elementos principais:
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>
Um documento WSDL pode também conter outros elementos, tais
como elementos de extensão, e um elemento de serviço, que torna
possível agrupar as definições dos vários Web services num único
documento 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>
Mensagens WSDL
O elemento <mesage> define os elementos de dados de uma
operação.
Cada mensagem pode consistir de uma ou mais partes. As partes
podem ser comparadas com os parâmetros de uma chamada de
função em uma linguagem de programação tradicional.
<message>
definition of the data being communicated....
</message>
Tipos WSDL
O elemento <types> define os tipos de dados que são utilizados
pelo 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 para
cada tipo de porta.
<binding>
protocol and data format specification....
</binding>
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.
WSDL - O Elemento <portType>
Tipos de operação
Type Definition
One-way
A operação pode receber uma mensagem, mas
não vai retornar uma resposta
Request-response
A operação pode receber um pedido e retornar
uma resposta
Solicit-response
A operação pode enviar um pedido e esperar por
uma resposta
Notification
A operação pode enviar uma mensagem, mas não
vai esperar por uma resposta
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ção
unidirecional chamado "setTerm". A operação "setTerm" permite a
entrada de novos termos do glossário mensagens usando uma
mensagem "newTermValues" com os parâmetros de entrada “term" e
"value". No entanto, nenhuma saída é definida para a operação.
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>
WSDL Bindings
Vinculando 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>
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 do
binding, 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, usamos
document. O atributo transport define o protocolo SOAP a ser
usado. 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 ser
definida. Você também deve especificar como a entrada e saída são
codificados. Neste caso, usamos "literal".
WSDL e UDDI
Universal Description, Discovery and Integration (UDDI) é um serviço
de diretório, onde as empresas podem se registrar e procurar serviços
web.
O que é UDDI?
UDDI é um diretório de interfaces web service descrito pelo WSDL
UDDI se comunica via SOAP
UDDI é construído dentro da plataforma Microsoft. NET
O que é UDDI baseia?
UDDI utiliza World Wide Web Consortium (W3C) e Internet Engineering
Task Force (IETF) padrões de Internet, tais como XML, HTTP e
protocolos DNS.
UDDI usa WSDL para descrever as interfaces de serviços web.
Além disso, recursos de programação de plataforma cruzada são
superados adotando SOAP, conhecido como protocolo XML de
especificações de mensagens encontradas no site da W3C.
Benefícios UDDI
Como pode ser UDDI Usado?
Quem está apoiando UDDI?
SOAP (Simple Object Access Protocol)
É um protocolo baseado em XML para permitir troca de informações
de aplicativos via HTTP.
SOAP fornece uma forma de comunicação entre aplicações rodando
em diferentes sistemas operacionais, com diferentes tecnologias e
linguagens de programação.
Blocos de Construção de SOAP
Uma mensagem SOAP é um documento XML comum contendo os
seguintes 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 para
o 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
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 de
processamento XML
Esqueleto mensagem SOAP
<?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:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
O elemento Header
<?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:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
OU
soap:actor="http://www.w3schools.com/appml/">234
OU
soap:encondingstyle=“URI”>234
</m:Trans>
</soap:Header>
...
</soap:Envelope>
O elemento Body
<?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>
<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>
...
O elemento Fault
Usado 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>
Erro Descrição
VersionMismatch
Encontrou um namespace inválido para o elemento
envelope
MustUnderstand
Um elemento filho imediato do elemento header, com o
atributo mustUnderstand definido para "1", não foi
entendido
Client
A mensagem foi formada incorretamente ou continham
informações incorretas
Server
Houve um problema com o servidor para que a
mensagem não poderia proceder
Códigos de falha de SOAP
Os valores a seguir devem ser usados no elemento faultcode ao
descrever falhas:
<?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
Comunicação HTTP SOAP
O protocolo HTTP se comunica através de TCP/IP. Um cliente se
conecta a um servidor HTTP usando TCP. Depois de estabelecer a
conexão, o cliente pode enviar uma mensagem de solicitação HTTP
para o servidor:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
O servidor processa o pedido e envia uma resposta HTTP pro cliente
com código de status:
200 OK
Content-Type: text/plain
Content-Length: 200
Se o servidor não consegue processar o pedido, ele retornaria isto:
400 Bad Request
Content-Length: 0
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.1
Content-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.1
Content-Type: application/soap+xml;
charset=utf-8
Content-Length: 250
Um SOAP Request:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-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>
Um SOAP Response:
HTTP/1.1 200 OK
Content-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>
Web Services
Web Services pode converter seu aplicativo em um aplicativo Web, que
pode publicar sua função ou mensagem para o resto do mundo.
Web Services é simplesmente XML + HTTP
Por Web Services?
Alguns anos atrás, Web services não era rápido o suficiente para ser
interessante.
A interoperabilidade tem mais alta prioridade
Quando todas as principais plataformas podem acessar a web usando
navegadores, plataformas diferentes não podem interagir. Para essas
plataformas trabalharem em conjunto, foram desenvolvidas as
aplicações web.
Web services usam XML para codificar e decodificar os dados, e SOAP
para transportá-lo (usando protocolos abertos).
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 de
linguagens como serviços.
Conecção com software existente
Web services podem ajudar a resolver o problema de
interoperabilidade, dando a diferentes aplicações uma forma de
vincular seus dados.
Elementos Web Services
EXEMPLO
Qualquer aplicação pode ter um componente de Web Service.
Web services podem ser criados independentemente da linguagem de
programação.
No exemplo a seguir, vamos utilizar o Java para criar um Web Service
simples.
 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 Silva
carloshenrique.85@globo.com

Mais conteúdo relacionado

Mais procurados

UDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaUDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaAnder Martinez
 
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Sylvain Maret
 
UDA-Componentes RUP. Combo (v2.1.1 deprecado)
UDA-Componentes RUP. Combo (v2.1.1 deprecado)UDA-Componentes RUP. Combo (v2.1.1 deprecado)
UDA-Componentes RUP. Combo (v2.1.1 deprecado)Ander Martinez
 
критерии оценивания видеороликов
критерии оценивания видеороликовкритерии оценивания видеороликов
критерии оценивания видеороликовArfenia Sarkissian
 
comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web Nazih Heni
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareDaniel Cukier
 
Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6AIMDek Technologies
 
Estatutos 2016 da Família Andaluz
Estatutos 2016 da Família AndaluzEstatutos 2016 da Família Andaluz
Estatutos 2016 da Família AndaluzStephanie Martinho
 
Angular 10 course_content
Angular 10 course_contentAngular 10 course_content
Angular 10 course_contentNAVEENSAGGAM1
 
AEM Meetup Sydney - Content Migration with CRX2Oak
AEM Meetup Sydney - Content Migration with CRX2OakAEM Meetup Sydney - Content Migration with CRX2Oak
AEM Meetup Sydney - Content Migration with CRX2OakMichael Henderson
 
Valor Monetário Esperado - VME (Série Gerência de Projetos)
Valor Monetário Esperado - VME (Série Gerência de Projetos)Valor Monetário Esperado - VME (Série Gerência de Projetos)
Valor Monetário Esperado - VME (Série Gerência de Projetos)Marcello Thiry
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Ido Flatow
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsIdo Flatow
 

Mais procurados (20)

UDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla AvanzadaUDA-Componentes RUP. Tabla Avanzada
UDA-Componentes RUP. Tabla Avanzada
 
Fases de um compilador
Fases de um compiladorFases de um compilador
Fases de um compilador
 
Fetch API Talk
Fetch API TalkFetch API Talk
Fetch API Talk
 
Modelagem de Sistemas de Informação 10 Diagrama de Sequência
Modelagem de Sistemas de Informação 10 Diagrama de SequênciaModelagem de Sistemas de Informação 10 Diagrama de Sequência
Modelagem de Sistemas de Informação 10 Diagrama de Sequência
 
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
Securite des Web Services (SOAP vs REST) / OWASP Geneva dec. 2012
 
UDA-Componentes RUP. Combo (v2.1.1 deprecado)
UDA-Componentes RUP. Combo (v2.1.1 deprecado)UDA-Componentes RUP. Combo (v2.1.1 deprecado)
UDA-Componentes RUP. Combo (v2.1.1 deprecado)
 
критерии оценивания видеороликов
критерии оценивания видеороликовкритерии оценивания видеороликов
критерии оценивания видеороликов
 
comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web
 
FDD
FDDFDD
FDD
 
7 rest
7 rest7 rest
7 rest
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
 
Introdução a HTML5
Introdução a HTML5Introdução a HTML5
Introdução a HTML5
 
Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6
 
Estatutos 2016 da Família Andaluz
Estatutos 2016 da Família AndaluzEstatutos 2016 da Família Andaluz
Estatutos 2016 da Família Andaluz
 
Angular 10 course_content
Angular 10 course_contentAngular 10 course_content
Angular 10 course_content
 
AEM Meetup Sydney - Content Migration with CRX2Oak
AEM Meetup Sydney - Content Migration with CRX2OakAEM Meetup Sydney - Content Migration with CRX2Oak
AEM Meetup Sydney - Content Migration with CRX2Oak
 
Slides Css3
Slides Css3 Slides Css3
Slides Css3
 
Valor Monetário Esperado - VME (Série Gerência de Projetos)
Valor Monetário Esperado - VME (Série Gerência de Projetos)Valor Monetário Esperado - VME (Série Gerência de Projetos)
Valor Monetário Esperado - VME (Série Gerência de Projetos)
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP Fundamentals
 

Destaque

XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Languageelliando dias
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaSergio Crespo
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTRicardo Terra
 
XML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoXML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoGPrimola
 
Curso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CCurso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CMaurício Linhares
 
Introdução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPIntrodução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPUniversidade de São Paulo
 
Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisDiego Lusa
 

Destaque (14)

Web Service - XML
Web Service - XMLWeb Service - XML
Web Service - XML
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemantica
 
Xml100 1
Xml100 1Xml100 1
Xml100 1
 
XML & HTML
XML & HTMLXML & HTML
XML & HTML
 
Banco de Dados XML
Banco de Dados XMLBanco de Dados XML
Banco de Dados XML
 
Aula Introdução a Linguagem XML
Aula Introdução a Linguagem XMLAula Introdução a Linguagem XML
Aula Introdução a Linguagem XML
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
XML e Banco de Dados XML Nativo
XML e Banco de Dados XML NativoXML e Banco de Dados XML Nativo
XML e Banco de Dados XML Nativo
 
Curso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CCurso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-C
 
Surgimento da Internet
Surgimento da InternetSurgimento da Internet
Surgimento da Internet
 
Algumas notas sobre pascal
Algumas notas sobre pascalAlgumas notas sobre pascal
Algumas notas sobre pascal
 
Introdução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPIntrodução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USP
 
Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciais
 

Semelhante a Introdução à Linguagem XML (20)

Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
Java e XML
Java e XMLJava e XML
Java e XML
 
Tp 4 xml
Tp 4   xmlTp 4   xml
Tp 4 xml
 
Xml Ws
Xml WsXml Ws
Xml Ws
 
Conceitos de xml
Conceitos de xmlConceitos de xml
Conceitos de xml
 
Curso de xml
Curso de xmlCurso de xml
Curso de xml
 
XML
XMLXML
XML
 
XML - Parte 1
XML - Parte 1XML - Parte 1
XML - Parte 1
 
Apostila xml
Apostila xmlApostila xml
Apostila xml
 
A e xtensible markup language (xml)
A e xtensible markup language (xml)A e xtensible markup language (xml)
A e xtensible markup language (xml)
 
15
1515
15
 
Webservices e Xml
Webservices e XmlWebservices e Xml
Webservices e Xml
 
XML_WS.pdf
XML_WS.pdfXML_WS.pdf
XML_WS.pdf
 
HTML HardCore Parte 2 - XHTML
HTML HardCore Parte 2 - XHTMLHTML HardCore Parte 2 - XHTML
HTML HardCore Parte 2 - XHTML
 
Xml
XmlXml
Xml
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
XML, Webservice e RSS
XML, Webservice e RSSXML, Webservice e RSS
XML, Webservice e RSS
 
Metadados com XML
Metadados com XMLMetadados com XML
Metadados com XML
 
01- Introdução ao XML
01- Introdução ao XML01- Introdução ao XML
01- Introdução ao XML
 
Curso XML - IBM Academic Initiative
Curso XML - IBM Academic InitiativeCurso XML - IBM Academic Initiative
Curso XML - IBM Academic Initiative
 

Mais de Carlos Henrique Martins da Silva

Segurança Através de Controles Biométricos - Carlos Henrique Martins da Silva
Segurança Através de Controles Biométricos - Carlos Henrique Martins da SilvaSegurança Através de Controles Biométricos - Carlos Henrique Martins da Silva
Segurança Através de Controles Biométricos - Carlos Henrique Martins da SilvaCarlos Henrique Martins da Silva
 

Mais de Carlos Henrique Martins da Silva (16)

Segurança da Informação Aplicada a Negócios
Segurança da Informação Aplicada a NegóciosSegurança da Informação Aplicada a Negócios
Segurança da Informação Aplicada a Negócios
 
eXtreme Programming (XP)
eXtreme Programming (XP)eXtreme Programming (XP)
eXtreme Programming (XP)
 
Rational Unified Process (RUP)
Rational Unified Process (RUP)Rational Unified Process (RUP)
Rational Unified Process (RUP)
 
Aula 9 - Backdoor
Aula 9 - BackdoorAula 9 - Backdoor
Aula 9 - Backdoor
 
Aula 8 - SQL Injection
Aula 8 - SQL InjectionAula 8 - SQL Injection
Aula 8 - SQL Injection
 
Aula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força BrutaAula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força Bruta
 
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
Aula 6 - Ataques de Negação de Serviço (DoS e D-DoS)
 
Aula 5 - Assinatura e Certificado Digital
Aula 5 - Assinatura e Certificado DigitalAula 5 - Assinatura e Certificado Digital
Aula 5 - Assinatura e Certificado Digital
 
Aula 4 - Plano de Continuidade de Negócios (PCN)
Aula 4 - Plano de Continuidade de Negócios (PCN)Aula 4 - Plano de Continuidade de Negócios (PCN)
Aula 4 - Plano de Continuidade de Negócios (PCN)
 
Aula 3 - Política de Segurança da Informação (PSI)
Aula 3 - Política de Segurança da Informação (PSI)Aula 3 - Política de Segurança da Informação (PSI)
Aula 3 - Política de Segurança da Informação (PSI)
 
Aula 2 - Gestão de Riscos
Aula 2 - Gestão de RiscosAula 2 - Gestão de Riscos
Aula 2 - Gestão de Riscos
 
Aula 10 - Cross Site Scripting (XSS)
Aula 10 - Cross Site Scripting (XSS)Aula 10 - Cross Site Scripting (XSS)
Aula 10 - Cross Site Scripting (XSS)
 
Aula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da InformaçãoAula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da Informação
 
Deep web
Deep webDeep web
Deep web
 
Segurança Através de Controles Biométricos - Carlos Henrique Martins da Silva
Segurança Através de Controles Biométricos - Carlos Henrique Martins da SilvaSegurança Através de Controles Biométricos - Carlos Henrique Martins da Silva
Segurança Através de Controles Biométricos - Carlos Henrique Martins da Silva
 
Invasão e Segurança
Invasão e SegurançaInvasão e Segurança
Invasão e Segurança
 

Introdução à Linguagem XML

  • 1. Carlos Henrique M. da Silva carloshenrique.85@globo.com
  • 2.  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
  • 3. Extensible Markup Language (XML) é linguagem de marcação de dados (meta-markup language) que provê um formato para descrever dados estruturados. O XML permite a definição de um número infinito de tags. Enquanto no HTML, se as tags podem ser usadas para definir a formatação de caracteres e parágrafos, o XML provê um sistema para criar tags para dados estruturados. Um elemento XML pode ter dados declarados como sendo preços de venda, taxas de preço, um título de livro, a quantidade de chuva, ou qualquer outro tipo de elemento de dado. O Que é XML
  • 4. 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 utilizam sintaxes similares. Se você é familiar com HTML, também o será com o XML. A grande diferença entre HTML e XML é que o HTML descreve a aparência e a ações em uma página na rede enquanto o XML não descreve nem aparência nem ações, mas sim o que cada trecho de dados é ou representa! Em outras palavras, o XML descreve o conteúdo do documento!
  • 5. Características do XML Representação estruturada dos dados O XML provê um padrão que pode codificar o conteúdo, as semânticas e as esquematizações para uma grande variedade de aplicaçõ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 controles ActiveX.  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.
  • 6. Características do XML Separação entre dados e apresentação A mais importante característica do XML se resume em separar a interface com o usuário (apresentação) dos dados estruturados. O HTML especifica como o documento deve ser apresentado na tela por um navegador. Já o XML define o conteúdo do documento. Por exemplo, em HTML são utilizadas tags para definir tamanho e cor de fonte, assim como formatação de parágrafo. No XML você utiliza as tags 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 definidas com Extensible Style Language (XSL) e Cascading Style Sheets (CSS) para a apresentação de dados em um navegador.
  • 7. 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).
  • 8. Definição conceitual do XML Estrutura do documento Um documento XML é uma árvore rotulada onde um nó externo consiste de:  Dados de caracteres (uma sequência de texto)  Instruções de processamento (anotações para os processadores), 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 consistindo de um nome e um valor. Normalmente, comentários, declarações de entidades e informações DTD não são explicitamente representadas na árvore.
  • 9. <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>
  • 10. Padrões da Estrutura do XML O XML é baseado em padrões de tecnologia comprovadamente otimizados para a Web. Os padrões que compõem o XML são definidos pelo W3C (World Wide Web Consortium) e são os seguintes:  Extensible Markup Language (XML)  XML Namespaces - é também uma Recomendação, a qual descreve a sintaxe de namespace, ou espaço de nomes, e que serve para criar prefixos para os nomes de tags.  Document Object Model (DOM) Level 1 - é uma Recomendação que provê formas de acesso aos dados estruturados utilizando scripts, permitindo aos desenvolvedores interagir e computar tais dados consistentemente.
  • 11.  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).
  • 12. Principais Benefícios da Linguagem XML O XML tem por objetivo trazer flexibilidade e poder às aplicações Web. 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, de mú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 e escalável.  Padrões abertos.
  • 13. Inserindo XML em Documentos HTML Um documento XML não indica por si só como a informação deve ser visualizada. Já o HTML é uma linguagem ótima para a apresentação de dados para o usuário final. Os mecanismos de ligação de dados e folhas de estilos podem ser usados para organizar os dados XML em uma apresentação visual, e para adicionar interatividade. O XSL (Extensible Stylesheet Language) pode adicionar poderes ainda maiores à esse processo. Uma folha de estilos XSL contém instruções de como retirar informação de um documento XML e transformá-la para outro formato, como o HTML. Essa transformação é feita de forma declarativa, e não via scripts.
  • 14. Os Cascade Style Sheets (CSSs) também podem ser usados para dados XML, só que de estrutura mais simplificada, e são usuais em tais situações. Entretanto, os CSSs não provém uma estrutura de apresentação que se difere da estrutura da fonte de dados. Com o XSL, é possível gerar estruturas de apresentação (em HTML, por exemplo) que são bem diferentes das estruturas de dados originais dos documentos XML, como mostrado a seguir. Inserindo XML em Documentos HTML
  • 15. 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 Markup Language)  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 encontrada em www.oasis-open.org/cover/xml.html#applications
  • 16. Regras para Boa Formação de um Arquivo XML  Todo documento XML, além da tag introdutória, deve ter um único elemento (tag) que sirva como raiz para todos os demais elementos do documento;  XML é case sensitive, portanto difere letras maiúsculas e minúsculas, devendo tomar cuidado com o uso de CamelCases.  Todo elemento XML deve ser iniciado e fechado, exceto o que define 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-->).
  • 17. O Objeto XMLHttpRequest Todos os browsers modernos (IE7+, Firefox, Chrome, Safari, and Opera) 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 um objeto ActiveX: xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  • 18. Analisador XML Um Analisador XML converte um documento XML em um objeto DOM 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;
  • 19. 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" ?>
  • 20. 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>carloshenrique.85@globo.com</email> . . . </curriculo>
  • 21. XSL - consiste em três partes: 1. XSLT - uma linguagem para transformar documentos XML 2. XPath - uma linguagem para navegar em documentos XML 3. XSL-FO - uma linguagem para formatar documentos XML 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). Esquematizando temos:  XML - Informação (dados)  XSL , CSS - Apresentação ( XML + XSL = HTML )
  • 22. 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:
  • 23. <?xml-stylesheet type="text/xsl" href="arquivo.xsl"?> A primeira coisa a fazer para formatar um documento XML é incluir uma linha no documento XML a ser formatado que indique o arquivo XSL que irá formatar os dados que serão exibidos no Navegador. A sintaxe 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>
  • 24. <?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.
  • 25. 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".
  • 26.
  • 27. Elemento <xsl:template> Uma folha de estilo XSL consiste em um ou mais conjunto de regras que 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 um elemento XML. O atributo de partida também pode ser usado para definir um modelo para todo o documento XML. O valor do atributo de correspondência é uma expressão XPath (ex.: match = "/" define o documento 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="/">
  • 28. Elemento <xsl:value-of> O elemento <xsl:value-of> pode ser usado para extrair o valor de um elemento 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-of select="catalog/cd/artist"/></td> </tr> O atributo select no exemplo acima, contém uma expressão XPath. Uma expressão XPath funciona como navegar em um sistema de arquivos; uma barra (/) seleciona subdiretórios.
  • 29. Elemento <xsl:for-each> O elemento <xsl:for-each> pode ser usado para selecionar todos os elementos 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>
  • 30. 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)
  • 31. 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> dentro do 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>
  • 32. Elemento <xsl:if> É usado para colocar um teste condicional contra o conteúdo do arquivo 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 os elementos do título e artista dos CDs que tem um preço que é superior a 10.
  • 33. 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.
  • 34. EXERCÍCIOS Criar um documento XSL para cada um dos elementos mostrados anteriormente e vinculá-los ao documento XML de catálogo de CDs Criar um documento XSL aplicando os elementos cabíveis ao documento XML de Curriculo
  • 35. É usado para navegar através de elementos e atributos em um documento XML. XPath é um elemento importante em no padrão XSLT da W3C. XQuery e XPointer são ambos construídos em expressões XPath.
  • 36. 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 um documento XML. Essas expressões de caminho se parecem muito com as expressões que você vê quando você trabalha num sistema de arquivos de um computador.
  • 37. 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ções para cadeia de valores, valores numéricos de data e hora, nós de comparação e manipulação QName, manipulação de seqüência, valores booleanos, e muito mais. Veja mais em: Funções XPath
  • 38. Em XPath, existem 7 tipos de nós: 1. Elemento 2. Atributo 3. Texto 4. Namespace 5. Instrução de processamento 6. Comentário 7. Documentos Documentos XML são tratados como árvores de nós. O elemento mais alto da árvore é chamado de elemento raiz (root).
  • 39. Valores atômicos - São os nós sem filhos ou pais. Exemplo: ITENS Os itens são valores atômicos ou nós.
  • 40. RELAÇÃO DE NÓS PAI 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 ?????
  • 41. XPath Sintaxe XPath usa expressões de caminho para selecionar nós ou conjuntos de nós em um documento XML. O nó é selecionado através de um caminho ou etapas.
  • 42. 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:
  • 43. CAMINHO EXPRESSÃO RESULTADO bookstore Seleciona todos os nós com o nome de “bookstore" /bookstore Seleciona 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 //book Seleciona todos os elementos do livro, não importa onde eles estão no documento Bookstore//book Seleciona 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 seus resultados:
  • 44. PREDICADOS Predicados são usados ​​para encontrar um nó específico ou um nó que contém um valor específico. Predicados são sempre incorporados em colchetes. TABELA
  • 45. SELECIONANDO NÓS DESCONHECIDOS XPath curingas podem ser usados ​​para selecionar elementos XML desconhecidos. 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 seus resultados: 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
  • 46. 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 eo resultado das expressões: EXPRESSÃO RESULTADO //book/title | //book/price Seleciona todos os elementos title E price de todos os elementos do livro //title | //price Seleciona todos os elementos title E de price no documento /bookstore/book/title | //price Seleciona todos os elementos título do elemento livro, do elemento livraria. E todos os elementos de preço no documento
  • 47. 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
  • 48. EXPRESSÃO DE CAMINHO LOCAL O caminho do local pode ser absoluto ou relativo. Um caminho local absoluto começa com uma barra (/) e um caminho local relativo não. Em ambos os casos, o caminho do local consiste em uma ou mais etapas, cada um separado por uma barra:
  • 49. 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 é:
  • 50. EXEMPLO RESULTADO child::book Seleciona 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::book Seleciona 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
  • 51. OPERADORES XPATH Uma expressão XPath retorna um conjunto de nós, uma string, um booleano, ou um número. Abaixo está uma lista dos operadores que podem ser utilizados nas expressões XPath: OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO | Calcula dois conjuntos de nós //book | //cd Retorna 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.80 verdadeiro se o preço é 9,80 falso se o preço é 9,90 ! = Não igual price!=9.80 verdadeiro se o preço é 9,90 falso se o preço é 9,80
  • 52. OPERADOR DESCRIÇÃO EXEMPLO VALOR DE RETORNO < Menor que price<9.80 verdadeiro se o preço é 9,00 falso se o preço é 9,80 <= Inferior ou igual a price<=9.80 verdadeiro se o preço é 9,00 falso se o preço é 9,90 > Maior do que price>9.80 verdadeiro se o preço é 9,90 falso se o preço é 9,80 > = Maior do que ou igual a price>=9.80 verdadeiro se o preço é 9,90 falso se o preço é 9,70 or Ou price=9.80 or price=9.70 verdadeiro se o preço é 9,80 falso se o preço é 9,50 and E price>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
  • 53. 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
  • 54. XQuery 1.0 e XPath 2.0 compartilham o mesmo modelo de dados e apoiam as mesmas funções e operadores. Se você já estudou XPath você não terá problemas com a compreensão XQuery.
  • 55. 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.
  • 56. 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 um documento XML. A expressão de caminho a seguir é usado para selecionar todos os elementos do título no arquivo "books.xml": doc("books.xml")/bookstore/book/title
  • 57. 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>
  • 58. Expressões XQuery FLWOR FLWOR é um acrônimo para "For, Let, Where, Order by, Return". for $x in doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/title A cláusula For seleciona todos os elementos do livro sob o elemento livraria em uma variável chamada $x. A cláusula Where seleciona apenas os elementos do livro com um elemento de preço com um valor maior do que 30. A cláusula Order by define a ordem de classificação. Vai ser tipo pelo elemento título. A cláusula Return especifica o que deve ser devolvido. Aqui ele retorna os elementos do título.
  • 59. 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 os elementos do livro que estão sob o elemento livraria que tem um elemento preço com um valor que é maior do que 30. A expressão FLWOR seguinte irá selecionar exatamente a mesma coisa: for $x in doc("books.xml")/bookstore/book where $x/price>30 return $x/title O resultado será: <title lang="en">XQuery Kick Start</title> <title lang="en">Learning XML</title>
  • 60. Apresentar o resultado em uma lista HTML Olhe para a seguinte expressão FLWOR XQuery: for $x in doc("books.xml")/bookstore/book/title order by $x return $x A expressão acima irá selecionar todos os elementos do título e devolve os elementos do título em ordem alfabética. Agora queremos listar todos os livros-títulos em nossa livraria em uma lista HTML. Nós adicionamos as tags <ul> e <li> à expressão FLWOR: <ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{$x}</li> } </ul>
  • 61. 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 os dados dentro do elemento de título: <ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <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>
  • 62. 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 :)
  • 63. 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/book return 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ão necessá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>
  • 64. 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
  • 65. Adicionando elementos e atributos para o Resultado Como vimos no capítulo anterior, podemos incluir elementos e atributos do documento de entrada ("books.xml) no resultado: for $x in doc("books.xml")/bookstore/book/title order by $x return $x A expressão XQuery acima inclue tanto o elemento título e quanto o atributo 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>
  • 66. A expressão XQuery anterior retorna os elementos do título da mesma maneira como são descritos no documento de entrada. Agora, queremos adicionar alguns elementos HTML para o resultado. Vamos colocar o resultado em uma lista HTML - juntamente com um texto: <html> <body> <h1>Bookstore</h1> <ul> { for $x in doc("books.xml")/bookstore/book order by $x/title return <li>{data($x/title)}. Category: {data($x/@category)}</li> } </ul> </body> </html>
  • 67. <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>
  • 68. ADICIONAR ATRIBUTOS AOS ELEMENTOS HTML Em seguida, nós queremos usar o atributo da categoria como um atributo de classe na lista HTML: <html> <body> <h1>Bookstore</h1> <ul> { for $x in doc("books.xml")/bookstore/book order by $x/title return <li class="{data($x/@category)}">{data($x/title)}</li> } </ul> </body> </html>
  • 69. <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>
  • 70. SELECIONANDO E FILTRANDO ELEMENTOS Como vimos nos capítulos anteriores, estamos selecionando e filtrando elementos com um caminho de expressão ou com uma expressão FLWOR. Olhe para a expressão FLWOR seguinte: for $x in doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/title for - liga uma variável a cada item retornado pela expressão em let where - especifica um critério Order by - especifica a ordem de classificação do resultado return - especifica o que retornar o resultado Opcionais
  • 71. 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>
  • 72. A palavra-chave at pode ser utilizada para a contagem da iteração: for $x at $i in doc("books.xml")/bookstore/book/title return <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>
  • 73. A CLÁUSULA LET A cláusula let permite atribuições de variáveis ​​e evita repetir a mesma expressão muitas vezes. A cláusula let não resulta em iteração. let $x := (1 to 5) return <test>{$x}</test> Resultado: <test>1 2 3 4 5</test>
  • 74. 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: é o prefixo padrão do namespace, os nomes das funções não precisam ser prefixado quando chamado.
  • 75. EXEMPLOS DE CHAMADAS DE FUNÇÃO Uma chamada para uma função pode aparecer onde uma expressã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)='H arry'] Exemplo 3: Em uma cláusula let let $name := (substring($booktitle,1,4))
  • 76. 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... }
  • 77. 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 100 return ($p - $disc) } Abaixo está um exemplo de como chamar a função acima: <minPrice>{local:minPrice($book/price,$book/discount)}</minPrice>
  • 78. Aqui está um exemplo de uma questão que poderia se resolver com XQuery: "Selecione todos os registros de CD com um preço inferior a US$10 a partir da coleção de CDs armazenados no documento XML chamado cd_catalog.xml"
  • 79. Document Type Definition - DTD Uma definição de tipo de documento (DTD) define os blocos de construção legais de um documento XML. Ele define a estrutura do documento com uma lista de elementos jurídicos e atributos. A DTD pode ser declarado embutido no documento XML, ou como uma referência externa.
  • 80. Se o DTD é declarada dentro do arquivo XML, deve ser envolvido em uma 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
  • 81. 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
  • 82. Por Que Usar um DTD? Com um DTD, cada um de seus arquivos XML pode transportar uma descrição do seu próprio formato. Com um DTD, grupos independentes de pessoas podem concordar em usar um 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.
  • 83. Criando um DTD Ao criar um DTD, você precisa definir todos os elementos e atributos que você terá nos documentos XML. Então vamos criar um DTD para o 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
  • 84. 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 ) >
  • 85. Elementos DTD Em 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 />
  • 86. 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 qualquer combinaçã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
  • 87. Elementos DTD Declarando 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*)>
  • 88. 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)*>
  • 89. 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" />
  • 90. 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:
  • 91. Elementos vs Atributos Em 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.
  • 92. 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>
  • 93. Exemplos DTD Programação TV Artigo de Jornal Catálogo de Produtos
  • 94. WSDL WSDL (Web Services Description Language) é uma linguagem baseada em 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.
  • 95. Um documento WSDL é apenas um documento XML simples. Ele conté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 esses elementos principais:
  • 96. 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>
  • 97. Um documento WSDL pode também conter outros elementos, tais como elementos de extensão, e um elemento de serviço, que torna possível agrupar as definições dos vários Web services num único documento 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>
  • 98. Mensagens WSDL O elemento <mesage> define os elementos de dados de uma operação. Cada mensagem pode consistir de uma ou mais partes. As partes podem ser comparadas com os parâmetros de uma chamada de função em uma linguagem de programação tradicional. <message> definition of the data being communicated.... </message>
  • 99. Tipos WSDL O elemento <types> define os tipos de dados que são utilizados pelo 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 para cada tipo de porta. <binding> protocol and data format specification.... </binding>
  • 100. 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.
  • 101. WSDL - O Elemento <portType> Tipos de operação Type Definition One-way A operação pode receber uma mensagem, mas não vai retornar uma resposta Request-response A operação pode receber um pedido e retornar uma resposta Solicit-response A operação pode enviar um pedido e esperar por uma resposta Notification A operação pode enviar uma mensagem, mas não vai esperar por uma resposta
  • 102. 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ção unidirecional chamado "setTerm". A operação "setTerm" permite a entrada de novos termos do glossário mensagens usando uma mensagem "newTermValues" com os parâmetros de entrada “term" e "value". No entanto, nenhuma saída é definida para a operação.
  • 103. 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>
  • 104. WSDL Bindings Vinculando 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>
  • 105. 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 do binding, 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, usamos document. O atributo transport define o protocolo SOAP a ser usado. 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 ser definida. Você também deve especificar como a entrada e saída são codificados. Neste caso, usamos "literal".
  • 106. WSDL e UDDI Universal Description, Discovery and Integration (UDDI) é um serviço de diretório, onde as empresas podem se registrar e procurar serviços web. O que é UDDI? UDDI é um diretório de interfaces web service descrito pelo WSDL UDDI se comunica via SOAP UDDI é construído dentro da plataforma Microsoft. NET
  • 107. O que é UDDI baseia? UDDI utiliza World Wide Web Consortium (W3C) e Internet Engineering Task Force (IETF) padrões de Internet, tais como XML, HTTP e protocolos DNS. UDDI usa WSDL para descrever as interfaces de serviços web. Além disso, recursos de programação de plataforma cruzada são superados adotando SOAP, conhecido como protocolo XML de especificações de mensagens encontradas no site da W3C. Benefícios UDDI Como pode ser UDDI Usado? Quem está apoiando UDDI?
  • 108. SOAP (Simple Object Access Protocol) É um protocolo baseado em XML para permitir troca de informações de aplicativos via HTTP. SOAP fornece uma forma de comunicação entre aplicações rodando em diferentes sistemas operacionais, com diferentes tecnologias e linguagens de programação.
  • 109. Blocos de Construção de SOAP Uma mensagem SOAP é um documento XML comum contendo os seguintes 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 para o 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
  • 110. 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 de processamento XML
  • 111. Esqueleto mensagem SOAP <?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:Header> ... </soap:Header> <soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body> </soap:Envelope>
  • 112. O elemento Header <?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:Header> <m:Trans xmlns:m="http://www.w3schools.com/transaction/" soap:mustUnderstand="1">234 OU soap:actor="http://www.w3schools.com/appml/">234 OU soap:encondingstyle=“URI”>234 </m:Trans> </soap:Header> ... </soap:Envelope>
  • 113. O elemento Body <?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> <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> ...
  • 114. O elemento Fault Usado 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>
  • 115. Erro Descrição VersionMismatch Encontrou um namespace inválido para o elemento envelope MustUnderstand Um elemento filho imediato do elemento header, com o atributo mustUnderstand definido para "1", não foi entendido Client A mensagem foi formada incorretamente ou continham informações incorretas Server Houve um problema com o servidor para que a mensagem não poderia proceder Códigos de falha de SOAP Os valores a seguir devem ser usados no elemento faultcode ao descrever falhas:
  • 116. <?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
  • 117. Comunicação HTTP SOAP O protocolo HTTP se comunica através de TCP/IP. Um cliente se conecta a um servidor HTTP usando TCP. Depois de estabelecer a conexão, o cliente pode enviar uma mensagem de solicitação HTTP para o servidor: POST /item HTTP/1.1 Host: 189.123.255.239 Content-Type: text/plain Content-Length: 200 O servidor processa o pedido e envia uma resposta HTTP pro cliente com código de status: 200 OK Content-Type: text/plain Content-Length: 200 Se o servidor não consegue processar o pedido, ele retornaria isto: 400 Bad Request Content-Length: 0
  • 118. 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.1 Content-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.1 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 250
  • 119. Um SOAP Request: POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-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>
  • 120. Um SOAP Response: HTTP/1.1 200 OK Content-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>
  • 121. Web Services Web Services pode converter seu aplicativo em um aplicativo Web, que pode publicar sua função ou mensagem para o resto do mundo. Web Services é simplesmente XML + HTTP
  • 122. Por Web Services? Alguns anos atrás, Web services não era rápido o suficiente para ser interessante. A interoperabilidade tem mais alta prioridade Quando todas as principais plataformas podem acessar a web usando navegadores, plataformas diferentes não podem interagir. Para essas plataformas trabalharem em conjunto, foram desenvolvidas as aplicações web. Web services usam XML para codificar e decodificar os dados, e SOAP para transportá-lo (usando protocolos abertos).
  • 123. 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 de linguagens como serviços. Conecção com software existente Web services podem ajudar a resolver o problema de interoperabilidade, dando a diferentes aplicações uma forma de vincular seus dados.
  • 125. EXEMPLO Qualquer aplicação pode ter um componente de Web Service. Web services podem ser criados independentemente da linguagem de programação. No exemplo a seguir, vamos utilizar o Java para criar um Web Service simples.
  • 126.  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 Silva carloshenrique.85@globo.com

Notas do Editor

  1. <?xml-stylesheet type="text/css" href="cd_catalog.css"?>
  2. No exemplo acima, um pedido GetStockPrice é enviado para um servidor. O pedido tem um parâmetro StockName, e um parâmetro de preço que será devolvido na resposta.