O documento discute XML (Extensible Markup Language), comparando-o com HTML e descrevendo suas características, aplicações e como inseri-lo em documentos HTML. Explica também XSLT (Extensible Stylesheet Language Transformations) e como formatar documentos XML.
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.
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>
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>
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>
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.
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
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:
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
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
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.