Você está na página 1de 38

Curso C#

XML
Conteúdo programático

1 Introdução
2 XML
2.1 Componentes do XML
2.2 Elementos
2.3 Atributos
2.4 Caracteres Reservados
2.5 Seções CDATA
2.6 Processamento de um XML
3 DTD
3.1 Elementos
Conteúdo programático (continuação)

4 XSD
5 DTD X XSD
6 APIs de Processamento de XML
6.1 SAX
6.1.1 XMLReader
6.1.2 XMLTextReader
6.1.3 XMLWriter
6.1.4 XMLTextWriter
6.2 DOM
6.2.1 XMLDocument
Introdução

• SGML - Standard Generalized Markup Language;


– metalinguagem através da qual se pode definir linguagens de
marcação para documentos;
• HTML e XML são derivadas do SGML;
• A XML é utilizada em:
– XHTML: eXtensible HTML;
– RSS: Rich Site Summary (forma simplificada de exibir o
conteúdo de um site);
– XML-RPC (protocolo de RPC - Remote Procedure Call -
codificado em XML);
– SOAP: Simple Object Access Protocol - protocolo para troca
de informações estruturadas em uma plataforma
descentralizada.
Introdução (continuação)

• XML (eXtensible Markup Language) foi criada pela W3C - World


Wide Web Consortium - consórcio de empresas de tecnologia;
• Outras criações da W3C:
– Cascading Style Sheets (CSS);
– Document Object Model (DOM);
– Simple Object Access Protocol (SOAP);
– Web Services Description Language;
– eXtensible Hypertext Markup Language (XHTML);
– XML Path (XPath);
– XML Query (XQuery);
– eXtensible Stylesheet Language (XSLT) - Linguagem de folhas
de estilos extensível.
XML

• eXtensible Markup Language;


• Combinação de SGML com HTML;
• O principio do projeto era criar uma linguagem que
pudesse ser lida por software e integrar-se com as
demais linguagens.
• O que motivou a criação do XML foi a insatisfação com
os formatos existentes;
XML (continuação)

• Características:
– Linguagem de marcação;
– As marcações não são fixas como em HTML. Elas podem ser
criadas conforme a necessidade da sua aplicabilidade;
– As marcações XML são utilizadas para dar significado às
informações;
– A possibilidade de criar marcações permite que as
informações contidas em um documento XML possam ser
identificadas, interpretadas e processadas por software;
– A versão atual é a 1.0;
– Especificação mantida pela W3C, sua criadora;
XML (continuação)

• Documentos XML são processados por softwares chamados


Parser XML, que realizam as seguintes operações:
– Interpretar o documento;
– Verificar a sintaxe;
– Relatar erros.
• As principais verificações do XML são:
– Documento bem-formado: verificar se o documento está
sintaticamente correto, ou seja, se as marcas estão aninhadas
corretamente e se a distinção entre maiúscula e minúscula
invalida o documento;
– Elemento raiz: Exige um único elemento raiz;
XML (continuação)

• Os elementos são as marcações que formam um documento


XML. Exemplo:
XML (continuação)

• Os atributos são as informações associadas a um elemento.


Exemplo:
XML (continuação)
Entidade Símbolo
• Caracteres Reservados: & &
&lt; <
&gt; >
&apos; ‘
&quot; “
XML (continuação)

• Seções CDATA podem conter texto que possuam caracteres


reservados sem comprometer o processamento do documento
XML. O conteúdo de uma seção CDATA não é processado pelo
Parser XML. Exemplo:
XML (continuação)

• Um arquivo XML pode ser processado segundo duas APIs:


– Document Object Model – DOM;
– Simple API for XML – SAX;

• Exemplos de APIs proprietárias:


– Microsoft Internet Explorer – msxml : Microsoft
– Xerces : Apache
– Java API for XML – JAXP : Sun
– XML for Java - XML4J : IBM
– Oracle XML Parser for Java : Oracle
DTD

• As Instruções que especificam a estrutura de um documento XML são


chamadas Document Type Definition (Definição do tipo de documento).
Características do DTD:
– Define quais marcações podem ser utilizadas dentro do documento
XML;
– Ordem de ocorrência das marcações;
– Número de ocorrências das marcações;
– Não é obrigatório;
– Pode ser incluído dentro do documento XML (declaração interna) ou
em um outro documento (declaração externa) em um arquivo .dtd;
– Deve ser declarado no prólogo (cabeçalho) do documento XML;
– O documento é chamado Válido quando está de acordo com o DTD;
DTD (continuação)

• Exemplo:

• Exemplo da declaração do DTD no XML:


DTD (continuação)

• Os elementos do DTD representam os principais componentes de um


documento XML.
• Sintaxe: <!ELEMENT nome_do_elemento (conteúdo)>
• Onde:
– nome_do_elemento: nome da marcação;
– conteúdo: o conteúdo que pode ser inserido dentro da marcação
• Texto: Indica que o conteúdo do elemento deve ser um conjunto
de caracteres.
– <!ELEMENT nome_do_elemento(#PCDATA)>
• Outros elementos: O elemento2 obrigatoriamente deve ocorrer
uma e somente única vez dentro do elemento1.
– <!ELEMENT elemento1 (elemento2)>
• Seção CDATA: São atributos que admitem um conjunto de
caracteres.
– <!ELEMENT nome_do_elemento atributo CDATA>
DTD (continuação)

• ocorrência: Freqüência de ocorrência dos Elementos:


– Sem indicador: deve ocorrer uma e apenas uma vez;
– +: O elemento deve ocorrer uma ou várias vezes (1..N);
– *: O elemento pode ocorrer uma ou várias vezes (0..N);
– ?: O elemento pode aparecer apenas uma vez (0..1).
• Exemplo:
XDS

• XML Schema Definition é uma linguagem baseada no formato XML para


definição de regras de validação "esquemas" em documentos no formato
XML.
• Um esquema XML, assim como um DTD, define como determinado
conjunto de um ou mais documentos XML devem ser construídos.
• Exemplo:
XDS

• Para fazer a referência, basta declarar a referência no cabeçalho do


arquivo XML.
• Exemplo:
DTD X XSD

• DTD – Limitações:

– Um documento XML pode estar associado a somente 1 DTD;


– DTD não é extensível;
– Não tem integração com namespaces XML;
– Não provê herança;
– Usa um único tipo atômico (PCDATA) - Não tem integer, float,
etc.;
– Não permite declarar restrições de domínio – os valores para o
elemento <sexo> devem ser F ou M;
– Não garante integridade referencial;
– Não é escrito em linguagem XML, escrito em EBNF (Extended
Backus-Naur Form);
DTD X XSD (continuação)
• XML Schema:

– Escrito em linguagem XML;


– Provê integração com namespaces XML;
– Provê integração de esquemas estruturais com tipos de dados;
– Provê herança;
– Inclui os tipos primitivos inteiro, data e dado binário;
– XSD é escrito em XML e DTD não;
– XSD possui facilidade de documentação por meio dos elementos
<xsd:annotation> e <xsd:documentation> que são específicos para
documentação – Se for usado XSLT (eXtensible Stylesheet Language
for Transformation) será fácil de descobrir o que existe de
documentação do esquema;
– XSD possui outros tipos além do PCDATA (existente no DTD) e
permite que sejam criados novos tipos;
– XSD Manipula namespaces XML e DTD não.
APIs de Processamento de XML

• O Framework .NET fornece duas formas para analisar dados


XML:
– SAX - Simple API for XML: XmlReader e classes relacionadas;
– DOM - Document Object Model: XmlDocument e classes
relacionadas.
APIs de Processamento de XML (cont.)

• SAX: proporciona acesso seqüencial, somente de leitura ou de


escrita e sem cache, aos dados XML.
• SAX não está implementada no Framework .NET, apesar de
poder ser criada utilizando a classe XmlReader ou XMLWriter.
– XMLReader:
• classe base abstrata e contém métodos e propriedades
para ler um documento XML;
• contém métodos para navegar pelo documento. Exemplos:
MoveToAttribute, MoveToFirstAttribute, MoveToContent,
MoveToFirstContent, MoveToElement e MoveToNextAttribute
– XMLWriter:
• classe base abstrata usada através das classes de
XmlTextWriter e de XmlNodeWriter. Contem métodos e
propriedades para escrever documentos XML.
APIs de Processamento de XML (cont.)

• XMLTextReader: classe que implementa a leitura seqüencial de


um documento XML.
• A propriedade NodeType do XmlTextReader é importante quando
você quer saber o tipo do elemento de um documento. A
enumeração de XmlNodeType tem um membro para cada tipo de
item XML tais como atributo, CDATA, elemento, comentário,
entidade, espaços em branco etc.
APIs de Processamento de XML (cont.)

• Exemplo de leitura utilizando o XMLTextReader:


APIs de Processamento de XML (cont.)

• XMLTextWriter: classe que implementa a escrita de um


documento XML
• Exemplo:
APIs de Processamento de XML (cont.)

• DOM: provê buscas indexadas aos nós através dos métodos


SelectSingleNode e SelectNodes. O primeiro seleciona um único
nó (XMLNode). Já o segundo, retorna um conjunto de nós
(XMLNodeList).
– XmlNode classe que representa um único nó de XML. Porém
este nó pode ser o nó da raiz de um documento XML e pode
representar todo o arquivo;
– XMLDocument: Classe que provê leitura e escrita de
documentos XML. O grande diferencial desta classe é a
consulta por XPath, que filtra as pesquisas de forma a obter os
elementos específicos que se deseja trabalhar.
APIs de Processamento de XML (cont.)

• Exemplo de leitura:
APIs de Processamento de XML (cont.)

• Exemplo de escrita:
Exercícios

• Fazer os exercícios localizados na pasta 07-XML


XPath

• XPath é uma linguagem em strings de expressões usadas pelo


XML. O XPath (XML Path Languagem – Linguagem de caminhos
XML) fornece uma sintaxe para localizar de forma eficaz nós
específicos em documentos XML. A plataforma .NET disponibiliza
no namespace System.Xml.Xpath classes que implementam os
recursos do XPath.
XPathNavigator

• A classe XPathNavigator percorre listas de nós que correspondem


a critérios de pesquisas, gravados como expressões xpath.
Seguem alguns métodos de navegação:
Método Descrição

MoveToFirst() Move ao primeiro elemento/atributo do nó atual

Move ao primeiro atributo do nó atual. Verifique se o nó atual tem


MoveToFirstAttribute()
algum atributo antes.

Move ao primeiro elemento filho do nó atual. Verifique se o nó atual


MoveToFirstChild()
tem algum elemento filho antes.

MoveToNext() Move ao próximo elemento/atributo/valor do nó atual

MoveToNextAttribute() Move ao atributo seguinte.

MoveToNextChild() Nao disponível! Use MoveToNext() preferivelmente.

Move ao pai do nó atual. Chame este método para retornar o cursor à


MoveToParent() posição original após ter processado seus atributos ou para percorrer
elementos filhos.

MoveToPrevious() Move ao elemento/atributo/valor precedente do nó atual.


MoveToRoot() Move ao nó raiz.
XPathNavigator

• O método XPathNavigator.Select() faz uma seleção de nós com


base em XPathExpressions que definem critérios de pesquisas e
filtros. O retorno deste método é um XPathNodeIterator. Com ele
pode-se percorrer o resultado do filtro de forma seqüencial (nó a
nó).

Expressão Descrição
Nome do nó Seleciona todos os nós filhos do nó informado.
/ Seleciona a partir do nó raiz
// Seleciona os nós do nó corrente que combinam com a expressão,
não importando onde eles estão.
. Seleciona o nó corrente.
.. Seleciona o nó pai do nó corrente.
@ Filtra por atributos.
XPathNavigator

• Os caracteres coringa podem ser utilizados para selecionar


elementos desconhecidos:
Coringa Descrição
* Filtra qualquer elemento
@* Filtra qualquer atributo
XPathNavigator

• Operadores: Operador Descrição Exemplo Retorno


| Computes two node-sets //book | //cd Returns a node-set with
all book and cd
elements
+ Addition 6+4 10
- Subtraction 6-4 2
* Multiplication 6*4 24
div Division 8 div 4 2
= Equal price=9.80 true if price is 9.80
false if price is 9.90
!= Not equal price!=9.80 true if price is 9.90
false if price is 9.80
< Less than price<9.80 true if price is 9.00
false if price is 9.80
<= Less than or equal to price<=9.80 true if price is 9.00
false if price is 9.90
> Greater than price>9.80 true if price is 9.90
false if price is 9.80
>= Greater than or equal to price>=9.80 true if price is 9.90
false if price is 9.70
or or price=9.80 or price=9.70 true if price is 9.80
false if price is 9.50
and and price>9.00 and price<9.90 true if price is 9.80
false if price is 8.50
mod Modulus (division remainder) 5 mod 2 1
XPathNavigator

• Exemplos:
XPathNavigator
Expressão Path Resultado
• Exemplos: bookstore Seleciona os filhos do elemento bookstore
/bookstore Seleciona o elemento bookstore
bookstore/book Seleciona todos os elementos book que são filhos
de bookstore
//book Seleciona todos os elementos Book, não
importando onde eles estão.
bookstore//book Seleciona todos os elementos book que são
descendentes do elemento bookstore, não
importando onde eles estão.
//@lang Seleciona todos os attributos com nome lang
/bookstore/* Seleciona todos os filhos do elemento bookstore
//* Seleciona todos os elementos do documento
//title[@*] Seleciona os elementos title que possuem atributos
//book/title | //book/price Seleciona todos os elementos title E elementos
price de todos os elementos book
//title | //price Seleciona todos os elementos title E elemtnos price
do documento
/bookstore/book[0] Seleciona somente o primeiro livro
/bookstore/book/price/text() Seleciona o texto de todos os nós Price
/bookstore/book[price>35]/title Seleciona todos os nós Title com preço maior que
35.
Exercício

• Fazer os exercícios relacionados a XPath na pasta 07-XML.

Você também pode gostar