Você está na página 1de 162

UNIOESTE

XML
eXtensible Markup Language
Prof. Rmulo Silva

Fev/2010
Rmulo C. Silva

Ementa
Histrico Aspectos bsicos de XML DTD XSD XPath DOM e SAX

Rmulo C. Silva

Introduo

Rmulo C. Silva

XML (eXtensible Markup Language)


Linguagem usada para representar dados como uma string de textos que inclui uma marcao intercalada a fim de descrever as propriedades dos dados. No define vocabulrio de comandos No define gramtica, apenas regras mnimas

Rmulo C. Silva

XML - Histrico
1969: GML (Generalized Markup Language), 1a linguagem de marcao usada em aplicativos que processavam documentos 1974: SGML (Standard Generalized Markup Language) 1986: SGML padronizada pela ISO e aprimorada nos anos seguintes. HTML um tipo de SGML destinado apresentao com utilizao de hiperlinks
Rmulo C. Silva

Histrico
1995: HTML 2.0 1996: World Wide Web Consortium (W3C, www.w3.org) inicia o projeto de construo de uma linguagem de marcao que combinasse a flexibilidade da SGML com aceitao do HTML 1998: XML 1.0 torna-se uma recomendao do W3C. 1999: XHTML
Rmulo C. Silva

XML principais tecnologias relacionadas


DOM (Document Object Model):
Interface abstrata definida pelo W3C para navegao e manipulao de documentos XML (leitura, pesquisa, adicionar, alterar e excluir elementos de um documento) Cria uma representao em memria do documento no formato de uma rvore

SAX (Simple API for XML):


Interface para manipulao de documentos XML baseada em eventos

Rmulo C. Silva

XML principais tecnologias relacionadas


XPath
Forma de enderear um elemento especfico dentro do documento XML

XSLT (eXtensible Stylesheet Language Transformations)


Linguagem para criao de documentos que contm regras de transformao de documentos XML

XLink
especificao W3C que permite definir vnculos entre documentos XML
Rmulo C. Silva

XML principais tecnologias relacionadas


XPointer
Aponta para partes de um documento XML

XQuery
Linguagem para pesquisar documentos XML

XSL-FO (XSL Formatting Objects)


Linguagem de descrio de pgina com recursos semelhantes a PostScript ou PDF

XHTML (eXtensible HTML)


Linguagem de descrio de pgina Web Mesmos elementos que HTML 4.0 Strict

Rmulo C. Silva

XML - Ferramentas
Existem vrios editores
Alguns com validadores Edio de DTDs e XML Schemas Depurao de XSLT

EditiX
www.editix.com

Exchanger XML Editor


www.exchangerxml.com

Liquid XML Studio


www.liquid-technologies.com

Peters XML Editor


www.iol.ie/~pxe/
Rmulo C. Silva

HTML versus XML


HTML
Mostra como apresentar os dados Descreve o formato Conjunto de tags fixas

XML
Mostra o que dados significam Descreve o contedo O usurio define suas prprias tags

Rmulo C. Silva

Sintaxe XML
Um documento constitudo de 03 partes:
Prlogo (opcional): Informaes gerais sobre o documento Corpo Um ou mais elementos na forma de uma rvore hierquica Eplogo (opcional) Comentrios, instrues de processamento

Rmulo C. Silva

Prlogo

Corpo

Eplogo
Rmulo C. Silva

XML - Prlogo
Pode conter uma nica declarao XML
<?xml version = 1.0?>

Permite especificar informao de codificao de caracteres


<? xml version = 1.0 encoding = UTF-8 ?>

Exs de valores vlidos para o atributo encoding: UTF-8, UTF-16, ISO-10646UCS-2, ISO-8859-1

Rmulo C. Silva

XML - Prlogo
Parmetros:
version Verso da especificao da recomendao W3C Valores possveis: 1.0 ou 1.1 obrigatrio encoding opcional standalone opcional Indica se declaraes externas afetam a interpretao do contedo do documento Valores possveis: yes (sem declaraes externas que afetam a interpretao) e no (com declaraes externas que afetam a interpretao)
Rmulo C. Silva

Sintaxe XML
A estrutura de um elemento basicamente a mesma que no HTML
Marcaes iniciam-se com < e terminam com > As marcaes so case sensitive. Os caracteres so Unicode 2.1 (16 bits) Nomes de estruturas devem comear com letra, underscore (_) ou dois pontos (:)
Rmulo C. Silva

Sintaxe XML
Elementos so os blocos bsicos de construo de uma marcao XML
Podem conter outros elementos, dados de caractere, comentrios e sees de CDATA (contedo de elementos). So delimitados por tags Inicial: <nomeTag> Final: </nomeTag> Ex.:
<UmElemento> <PrimeiroElementoInterno> ... </PrimeiroElementoInterno> ... <UltimoElementoInterno> ... </UltimoElementoInterno> </UmElemento>

Rmulo C. Silva

Sintaxe XML
Ao contrrio de HTML, a tag final no pode ser omitida
Exceo: tag de elemento vazio

Elemento Vazio: elementos sem contedo


Ex.: <minhaTagVazia></minhaTagVazia> Sintaxe alternativa: <minhaTagVazia/> til em situaes onde sua presena suficiente para indicar informao relevante aplicao <pessoa> <nome>Jos da Silva</nome> <pesquisador/> </pessoa>
Rmulo C. Silva

Sintaxe XML - elementos


Elementos podem ter uma ou mais propriedades, denominadas de atributos Atributos so descritos por um par nome=valor Um atributo tem um dos formatos abaixo:
nomeAtributo=valor do atributo nomeAtributo=valor do atributo
<UmElemento AtributoUm=valor1 Aqui vem o contedo do elemento. </UmElemento> AtributoDois=valor2 >

Rmulo C. Silva

Sintaxe XML elementos com atributos


Ex.:
atributo

<livro categoria = romance > <autor> Machado de Assis </autor> <titulo> Dom Casmurro </titulo> </livro>

Rmulo C. Silva

Sintaxe XML elementos e atributos


Atributos tm algumas restries:
No descrevem estruturas hierrquicas No permitem mltiplos valores

Atributos em geral so usados para informaes secundrias.

Rmulo C. Silva

Sintaxe XML - Comentrios


Um comentrio deve iniciar com <!-- e ser finalizado com --> Comentrios podem aparecer em qualquer parte de um documento XML Ex.:
<!-- Este um exemplo de comentrio em XML -->

Rmulo C. Silva

Sintaxe XML caracteres reservados


Os principais caracteres reservados so: < , >, (aspas), (apstrofe), & Para us-los em um contedo, usam-se em seu lugar:
&lt; &gt; &amp; &quot; &apos;
< > &

Rmulo C. Silva

Sintaxe XML caracteres reservados


Ex.: <meuElemento> O smbolo &lt; significa menor que. J o smbolo &quot; representa as aspas. </meuElemento>

Rmulo C. Silva

Sintaxe XML sees CDATA


Uma seo CDATA um mtodo de incluso de texto que contm caracteres que de outra forma seriam reconhecidos como de marcao. til para autores que desejam incluir exemplos de marcao XML em seus documentos.

Rmulo C. Silva

Sintaxe XML sees CDATA


Sintaxe: <! [CDATA[] ]> Ex.: <![CDATA [ <Catalogo> <Legalese> &copy; 1999 Wrox Press, Ltd. </Legalese> ]]>

Rmulo C. Silva

Sintaxe XML elementos de contedo misto


Elemento de contedo misto:
Contm texto e subelementos misturados
texto

<paragrafo> O usurio <pessoa> Jose da Silva</pessoa> tem <idade> 45</idade> anos </paragrafo>

elemento

Rmulo C. Silva

Sintaxe XML - Namespaces


Em XML, os autores de documentos podem criar suas prprias tags:
Como fazer para que tags como o mesmo nome, porm com significados diferentes no sejam confundidas? Se uma aplicao usa dois documentos que tenham nomes de tags em comuns, porm de significados diferentes, o que fazer?

Soluo: usar namespaces

Rmulo C. Silva

Sintaxe XML - Namespaces


Associa nomes exclusivos a URIs Em geral usam-se URLs, por serem nicas (no porque realmente endeream uma localizao vlida) Sintaxe: uso do atributo xmlns no prefixo elemento
<unioeste:meuElemento xmlns:unioeste=http://www.unioeste.br > algum texto do elemento. </unioeste:meuElemento>
Rmulo C. Silva

Sintaxe XML - Namespaces


No precisam ser declarados com prefixos explicitamente O atributo xmlns define o namespace default para o elemento e seus filhos.

Rmulo C. Silva

Sintaxe XML - Namespaces


Ex. de uso de mltiplos namespaces: <?xml version = 1.0 ?> <publicacoes> <BOOK:livro xmlns:BOOK=http://www.minhaLivraria.com.br/livro categoria = romance <autor> Machado de Assis </autor> <titulo> Dom Casmurro </titulo> </BOOK:livro> <MAG:revista xmlns:MAG=http://www.minhaLivraria.com.br/revista <titulo> Veja </titulo> <editora> Abril </editora> </MAG:revista> </publicacoes>
Rmulo C. Silva

XML bem formado


Um XML bem formado aquele em que o documento obedece regras para definio de marcaes definidas na recomendao do W3C. rvrore hierrquica simples Um nico n raiz
Entidade do documento ou raiz do documento Dele descende todos os ns que compem o corpo do documento

Tags aninhadas fechadas adequadamente


Rmulo C. Silva

Exemplo de documento XML bem formado


<Livro ISBN = 0-201-77059-8 DataPublicacao=2002-12-30 Autor=N Bradley> <Titulo> The XML Saga </Titulo> ... <Capitulo> <Titulo>Schema Wars </Titulo> <Subsecao> <Titulo> Introducao </Titulo> <Para> Uma linguagem de schema ...</Para> </Subsecao> </Capitulo> ... </Livro>
Rmulo C. Silva

XML vlido
Um documento bem formado no necessariamente vlido. Documento vlido: um documento bem formado em que as marcaes seguem regras definidas em um DTD (Document Type Definition) ou XML Schema declarado na Raiz

Rmulo C. Silva

Exerccios

Rmulo C. Silva

Sintaxe XML tipo de documento


Sintaxes:
<!DOCTYPE nomeElementoRaiz SYSTEM identificador_sistema > <!DOCTYPE nomeElementoRaiz PUBLIC identificador_publico identificador_sistema>

Os valores dos identificadores SYSTEM e PUBLIC so URIs (Uniform Resource Identifiers) e servem para indicar DTDs. O mais comum usar URLs.
Rmulo C. Silva

Sintaxe XML tipo de documento


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

A palavra reservada SYSTEM indica que a URL deve apontar para um arquivo existente
O uso de endereos da Web podem criar problemas no caso de o arquivo ser removido

Se PUBLIC for usado, a localizao simplesmente passada para a aplicao que estiver usando o DTD

Rmulo C. Silva

Definio de estrutura de documentos XML


Semelhante ao que ocorre em banco de dados, pode-se definir uma estrutura prvia (schema) que um documento XML deve seguir.
Document Type Definition (DTD) XML Schema Definition (XSD)

Rmulo C. Silva

Document Type Definition - DTD


Serve para descrever a estrutura de um arquivo XML. No usa a sintaxe XML Atualmente (2010), d-se preferncia de uso para XML Schema em seu lugar. Pode ser convertido automaticamente para um XML Schema equivalente Notao semelhante a expresses regulares
Rmulo C. Silva

Document Type Definition - DTD


Pode ser definido diretamente no prprio documento ou externamente em um arquivo separado.
Internamente: <?xml version=1.0?> <!DOCTYPE endereco [ <!ELEMENT endereco (logradouro,cidade)> <!ELEMENT logradouro (#PCDATA)> <!ELEMENT cidade (#PCDATA)> ]> <endereco> <logradouro> Rua dos XMLs </logradouro> <cidade> XMLCity </cidade> </endereco>
Rmulo C. Silva

DTD - declaraes
DTDs so construdos usando um conjunto de declaraes. Declarao:
delimitada por <! e > usa palavras-chave em maisculo: ELEMENT, ATTLIST, ENTITY Subelementos separados por vrgula

Ex.:

elemento

<!ELEMENT Email (From, To, Title, Data, Message)>

elementos filhos
Rmulo C. Silva

DTD opcionalidade e repetio


Opcionalidade: ? Repetio de 0 ou mais vezes: * Repetio de 1 ou mais vezes: + Sequncia: indicada por vrgula Exs.: <!ELEMENT Email (From, To+, CarbonCopy*, Title?, Date, Message)>

Rmulo C. Silva

DTD ligao com a instncia XML


elemento raiz

<?xml version=1.0 > <!DOCTYPE Email SYSTEM Email.dtd> <Email> <From> jose@yahoo.com.br</From> <To> joao@yahoo.com.br </To> <To> maria@hotmail.com</To> <Title> Teste de e-mail</Title> <Date> 20-10-2008</Date> <Message> texto no corpo do e-mail. </Message> nome do arquivo DTD </Email>
Rmulo C. Silva

DTD Sequncia e Escolha


Sequncia: ordem em que os subelementos devem aparecer no elemento (indicado por vrgula)
<!ELEMENT endereco (rua,numero,bairro,cidade)>

Escolha: quando h mais de uma opo, mutuamente exclusivas (indicado por | )


<!ELEMENT tipoResidencia (casa | apartamento)>

Ao se combinar sequncia e escolha, usa-se parntesis para evitar ambiguidade


<!ELEMENT algumElemento (a, b,(c|d))> <!ELEMENT outroElemento ((a,b,c) | d)>
Rmulo C. Silva

DTD elementos vazios e ANY


Um elemento vazio declarado usando a palavra reservada EMPTY Um elemento que pode conter qualquer outro elemento definido no DTD declarado usando a palavra reservada ANY Exs.: <!ELEMENT MeuElementoVazio EMPTY> <!ELEMENT MeuElementoQualquer ANY>
Rmulo C. Silva

DTD - textos
Um elemento pode conter texto, indicado pela palavra reservada #PCDATA Ex.:
<!ELEMENT Paragrafo (#PCDATA)> <Paragrafo> Aqui vem o texto. </Paragrafo>

Rmulo C. Silva

DTD - atributos
So separados da declarao dos elementos Ordem de declarao: nome do elemento, nome do atributo, tipo e informao de opcionalidade/default Informao de opcionalidade/default:
#REQUIRED : obrigatrio #IMPLIED: opcional #FIXED: valor fixo
Rmulo C. Silva

DTD - atributos
Usam a palavra reservada !ATTLIST Ex.:
valor default obrigatrio

<!ATTLIST Paragrafo Seguranca (normal, secreto) normal Id ID #REQUIRED nome do atributo Autor CDATA #IMPLIED>

tipo do atributo

opcional
Rmulo C. Silva

DTD tipos de atributos


CDATA: texto
qualquer texto dentro do atributo

NMTOKEN: no aceita brancos.


nome_v37

NMTOKENS: vrios NMTOKEN separados por um branco


token1 token-texto2 outro_token

ID: identificador, deve ter valor nico no documento


ident1

IDREF: referncia a um identificador


ident1
Rmulo C. Silva

DTD - Entidades
Permitem separar um documento em vrios arquivos fsicos Permitem incluso de dados no-XML Permitem reutilizao de definies

Rmulo C. Silva

DTD - entidades
Declarao:
<!ENTITY nomeEntidade contedo entidade >

Referncia:
Uso dos caracteres & para incio e ; para fim &nomeEntidade;

Em geral, define-se entidades no documento XML e no no DTD


Entidades so tratadas como contedos e no estrutura
Rmulo C. Silva

DTD entidades externas


Uso de entidades para referenciar documentos externos Usada conjuntamente com a palavra reservada SYSTEM
<?xml version='1.0' ?> <!DOCTYPE catalogos [ <!ENTITY catalogoLivros SYSTEM "livros.xml"> <!ENTITY catalogoCDs SYSTEM "CDs.xml"> <!ENTITY catalogoDVDs SYSTEM "DVDS.xml"> <!ENTITY vendedor "Joao da Silva"> ]> <catalogos> <empresa> Minha Empresa Ltda</empresa> <contato> &vendedor; </contato> &catalogoLivros; &catalogoCDs; &catalogoDVDs; </catalogos>

Rmulo C. Silva

DTD - notation
Usada quando entidades querem se referir a arquivo externo cujo formato no XML.
O parser no valida os dados, e os dados so passados para outra aplicao validar Uso da palavra reservada NOTATION e NDATA NDATA indica que o arquivo de formato no XML.

<!DOCTYPE catalogo [ <!NOTATION jpeg SYSTEM "PictureManager.exe"> <!ENTITY capaCatalogo SYSTEM "capaCat.jpg" NDATA jpeg> <!ELEMENT catalogo (capaCatalogo, #PCDATA)> <!ELEMENT capaCatalogo EMPTY> <!ATTLIST capaCatalogo img ENTITY #REQUIRED> ]> <catalogo> <foto img="capaCatalogo"/> Aqui vem a descrio do catlogo. </catalogo>
jpeg est associado aplicao PictureManager
Rmulo C. Silva

DTD - Entidades
Entidade: cada unidade de informao que possui nome Entidade documento: a entidade que representa todo o documento. Declarao de entidade:
Deve vir no incio do documento

Referncia entidade: maneira de referenciar a entidade em diferentes locais do documento


Rmulo C. Silva

DTD - limitaes
No existe a noo de tipos de dados atmicos (int, float, etc.) No se pode especificar faixa de valores Tem sintaxe diferente de XML No manipula Namespaces

Rmulo C. Silva

Exerccios

Rmulo C. Silva

XML Schema Definition (XSD)


Define a estrutura de um documento XML Segue a sintaxe do prprio XML Recomendado pelo W3C, desenvolvido em 2001. Mais abrangente que os DTDs Autor pode definir novos tipos de dados
Rmulo C. Silva

XSD
Elemento raiz chamado schema <xs:schema ...> ... </xs:schema> 2 grupos de elementos:
1o grupo: gerenciam a definio do prprio esquema (aparecem uma nica vez) 2o grupo: declaraes de elementos, atributos, definies de tipos.

Rmulo C. Silva

XSD
<?xml version=1.0 ?> <xs:schema xmlns:xs=http://www.w3.org/2000/10/XMLSchema targetNamespace=http://meuslivros.com.br xmlns=http://meuslivros.com.br > <xs:element name=catalogo> <xs:complexType> <xs:sequence> <xs:element name=livro minOccurs=0 maxOccurs=unbouded> <xs:complexType> Prefixo que <xs:sequence> <xs:element name=titulo type=xs:string/> identifica <xs:element name=autor type=xs:string /> o Namespace </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> Os elementos definidos neste XSD </xs:complexType> pertencem ao Namespace </xs:element> http://meuslivro.com.br </xs:schema>

Rmulo C. Silva

XSD
<?xml version=1.0 ?> <xs:schema xmlns:xs=http://www.w3.org/2000/10/XMLSchema targetNamespace=http://meuslivros.com.br xmlns=http://meuslivros.com.br > <xs:element name=catalogo> <xs:complexType> <xs:sequence> <xs:element name=livro minOccurs=0 maxOccurs=unbounded> <xs:complexType> <xs:sequence> <xs:element name=titulo type=xs:string/> <xs:element name=autor type=xs:string /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> Namespace default. Usado quando </xs:complexType> no schema no h referncia de um </xs:element> Namespace especfico </xs:schema>

Rmulo C. Silva

Ligao entre XSD e uma instncia de documento XML


No elemento raiz da instncia, usar o atributo:
noNamespaceSchemaLocation quando targetNamespace no usado no XML Schema Valor: caminho do arquivo XSD schemaLocation quando targetNamespace usado Valor: nome do Namespace, espao em branco e caminho do arquivo XSD

Declarar o Namespace do XML Schema


xmlns:xsi=http://www.w3.org/2000/10/XMLSchemainstance
Rmulo C. Silva

Ligao entre XSD e uma instncia de documento XML


XSD: <xs:schema xmlns:xs=http://www.w3.org/2000/10/XMLSchema targetNamespace=http://meuslivros.com.br xmlns=http://meuslivros.com.br > <xs:element name=catalogo> ... Instncia XML: <?xml version=1.0 ?> <catalogo xmlns=http://meuslivros.com.br xmlns:xsi=http://www.w3.org/2000/10/XMLSchemainstance xsi:schemaLocation=http://meuslivros.com.br catalogoLivros.xsd > ...

Rmulo C. Silva

Ligao entre XSD e uma instncia de documento XML


XSD:
<xs:schema xmlns:xs=http://www.w3.org/2000/10/XMLSchema> <xs:element name=catalogo> ...

Instncia XML:
<?xml version=1.0 ?> <catalogo xmlns:xsi=http://www.w3.org/2000/10/XMLSchemainstance xsi:noNamespaceSchemaLocation=catalogoLivros.xsd> ...

Rmulo C. Silva

XSD - Namespace
O atributo xmlns declara um Namespace
Pode ser identificado por um prefixo ou no
<xs:schema xmlns:a1=http://www.a1.com.br xmlns:a2=http://www.a2.org > <!-- agora vem as declaraes dos elementos --> ... </xs:schema>

Rmulo C. Silva

XSD - elementFormDefault e attributeFormDefault


So atributos usados no elemento <schema> para indicar se os elementos e atributos da instncia devem ser qualificados, respectivamente. Valores possveis:
qualified unqualified

No obrigatrio coloc-los
O valor default para ambos unqualified
Rmulo C. Silva

XSD - elementFormDefault e attributeFormDefault


Ex. de XSD:
<?xml version="1.0" encoding="utf-8" ?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://meusLivros.com.br" xmlns:xs="http://www.w3.org/2001/XMLSchema> <xs:element name="livro> <xs:complexType> <xs:sequence> <xs:element name="titulo" type="xs:string" /> <xs:element name="autor" type="xs:string" /> atributo no </xs:sequence> qualificado <xs:attribute name="categoria" type="xs:string" /> </xs:complexType> </xs:element> </xs:schema>

Na instncia XML:
<?xml version="1.0" encoding="utf-8"?> <tns:livro xmlns:tns="http://meusLivros.com.br" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://meusLivros.com.br file:testeNamespace.xsd" categoria=romance> <tns:titulo>Dom Casmurro</tns:titulo> <tns:autor>Machado de Assis</tns:autor> </tns:livro>

elemento qualificado

Rmulo C. Silva

XSD - elementFormDefault e attributeFormDefault


Ex. de XSD:
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://meusLivros.com.br" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="livro"> <xs:complexType> <xs:sequence> <xs:element name="titulo" type="xs:string" /> <xs:element name="autor" type="xs:string" /> </xs:sequence> atributo <xs:attribute name="categoria" type="xs:string" /> qualificado </xs:complexType> </xs:element> </xs:schema>

Na instncia XML
<?xml version="1.0" encoding="utf-8"?> <tns:livro xmlns:tns="http://meusLivros.com.br" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://meusLivros.com.br file:testeNamespace.xsd" tns:categoria=romance> <tns:titulo>Dom Casmurro</tns:titulo> <tns:autor>Machado de Assis</tns:autor> </tns:livro>

Rmulo C. Silva

XSD - comentrios
Comentrios vlidos em XML:

<!-- Isto um comentrio no XML Schema -->

Rmulo C. Silva

XSD declaraes de elementos e atributos


Criao de elementos: atravs do elemento element e atributo name: <xs:element name=Livro /> Criao de atributos: atravs do elemento attribute e atributo name: <xs:attribute name=Autor.../> Declarao de atributos podem ser feitas diretamente no elemento schema ou dentro da definio de um elemento especfico
Rmulo C. Silva

XSD elementos e atributos


<xs:element name=Livro> ... <xs:attribute name=ISBN /> <xs:attribute name=Autor /> ... </xs:element>

Rmulo C. Silva

XSD Tipos de dados


Todos os elementos devem ter um tipo
<xs:element name=titulo type=xs:string />

Tipos:
Primitivos: tipos pr-definidos (built in) Simples: criados pelo usurio a partir dos tipos pr-definidos Complexos: tipos envolvendo estruturas complexas criadas usando complexType

Rmulo C. Silva

XSD elementos de tipo simples


Tipo Simples:
nico tipo de dado permitido para atributos No permite marcao XML (tipo estruturado) Exs:
<xs:element name=cliente type=xs:string /> <xs:element name=idade type=xs:integer/> <xs:element name=dataNascimento type=xs:date/> Elementos correspondentes: <cliente> Supermercardo Barato</cliente> <idade> 30</idade> <dataNascimento>1970-01-10</dataNascimento>
Rmulo C. Silva

XSD-elementos de tipo simples


Especificao de valor default:
Assume um valor quando nenhum valor especificado Ex.: <xs:element name=vinculoEmpregado type=xs:string default=CLT/>

Especificao de valor fixo:


Elemento s pode ter um nico valor Ex.: <xs:element name=copyright type=xs:string fixed=Minha Empresa Ltda. />
Rmulo C. Silva

XSD Hierarquia de tipos simples

Rmulo C. Silva

XSD atributos de elementos


Atributos s podem ser de tipo simples Atributos sempre esto includos em elementos de tipo complexo Ex.:
<xs:element name="preco"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:decimal"> <xs:attribute name="moeda" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> Ex. de elemento correspondente: <preco moeda=R$ > 45.78 </preco>

Podem ser declarados obrigatrios (required) ou opcionais (optional):


<xs:attribute name=moeda type=xs:string use=required/>
Rmulo C. Silva

XSD atributos de elementos


Exs:
<xs:attribute name=moeda type=xs:string use=fixed value=R$ /> <!-- atributo da carteira de motorista --> <xs:attribute name=CNH type=xs:string use=default value=B/>

A opo value usada apenas quando use default, fixed ou required

Rmulo C. Silva

XSD elementos de tipos complexos


Uso da tag complexType
<xs:element name=Email> <xs:complexType> <xs:sequence> <xs:element name=From type=xs:string/> <xs:element name=To type=xs:string/> <xs:element name=Title type=xs:string/> <xs:element name=Message type=xs:string/> </xs:sequence> </xs:complexType> </xs:element>

Rmulo C. Silva

XSD elementos de tipos complexos


Um tipo complexo pode ter um nome
<xs:element name=Email type=tipoEmail/> <xs:complexType name=tipoEmail> <xs:sequence> <xs:element name=From type=xs:string/> <xs:element name=To type=xs:string/> <xs:element name=Title type=xs:string/> <xs:element name=Message type=xs:string/> </xs:sequence> </xs:complexType>

Rmulo C. Silva

XSD elementos de tipos complexos


<Email> <From>remetente@hotmail.com</From> <To>destinatario@hotmail<To/> <Title>titulo do e-mail</Title> <Message>corpo do email.</Message> </Email>

Rmulo C. Silva

XSD tipos complexos


Indicadores de seqncia de Elementos
sequence: subelementos devem aparecer na ordem indicada choice: apenas um dos elementos deve aparecer all: os subelementos podem aparecer uma nica vez em qualquer ordem ou nenhuma vez

Rmulo C. Silva

XSD- sequence
<xs:element name=Email> <xs:complexType> <xs:sequence> <xs:element name=From type=xs:string/> <xs:element name=To type=xs:string/> <xs:element name=Title type=xs:string/> <xs:element name=Message type=xs:string/> </xs:sequence> </xs:complexType> </xs:element>

Rmulo C. Silva

XSD- choice
<xs:element name=publicacao> <xs:complexType> <xs:sequence> <xs:element name=ano type=xs:gYear /> <xs:choice> <xs:element name=livro type=xs:string /> <xs:element name=artigo type=xs:string /> </xs:choice> </xs:sequence> </xs:complexType> Ex. de XML correspondente: <publicacao> <ano> 1995</ano> <livro>Titulo do meu Livro</livro> </publicacao>
Rmulo C. Silva

XSD all
<xs:element name=instituicao> <xs:complexType> <xs:all> <xs:element name=universidade type=xs:string /> <xs:element name=departamento type=xs:string /> </xs:all> </xs:complexType> </xs:element> podem aparecer

em qualquer ordem Ex. de XML correspondente <insituicao> <departamento>CECE</departamento> <universidade>Unioeste</universidade> </instituicao>


Rmulo C. Silva

XSD indicadores de cardinalidade


Indicam quantas vezes um elemento pode ocorrer
minOccurs Quando seu valor 0 (zero), indica que o elemento pode no ocorrer maxOccurs Quando no existe limite mximo, indica-se pelo valor unbounded

Quando no usados tem valor igual a 1 Podem ser usados em elementos do tipo sequence e choice
Rmulo C. Silva

XSD - cardinalidade
<xs:element name=Email> <xs:complexType> <xs:sequence> <xs:element name=From type=xs:string/> <xs:element name=To type=xs:string minOccurs=1 maxOccurs=unbounded/> <xs:element name=Title type=xs:string/> <xs:element name=Message type=xs:string/> </xs:sequence> </xs:complexType> </xs:element>

Rmulo C. Silva

XSD - cardinalidade
<Email> <From>remetente@hotmail.com</From> <To>destinatario1@hotmail<To/> <To>destinatario2@hotmail<To/> <To>destinatario3@hotmail<To/> <To>destinatario4@hotmail<To/> <Title>titulo do e-mail</Title> <Message>corpo do email.</Message> </Email>

Rmulo C. Silva

XSD cardinalidade e all


Os filhos do indicador all devem ser todos elementos (no admite outros grupos) Os valores permitidos para minOccurs e maxOccurs 0 ou 1 para todos os filhos de all Indicadores all no podem ter subgrupos e nem ser subgrupo.

Rmulo C. Silva

XSD indicador de grupo


Permite criar uma estrutura reutilizvel quando dois ou mais elementos tm estrutura idntica Uso do elemento group Em seu interior deve haver um elemento do tipo sequence, choice ou all Um grupo pode ter um nome

Rmulo C. Silva

XSD - group
<xs:schema ...> <xs:group name=endereco> <xs:sequence> <xs:element name=rua type=xs:string /> <xs:element name=numero type=xs:integer /> <xs:element name=cidade type=xs:string /> </xs:sequence> </xs:group> ... <xs:element name=cliente> <xs:complexType> <xs:sequence> <xs:element name=nome type=xs:string /> <xs:group ref=endereco /> </xs:sequence> </xs:complexType> </elment> <xs:element name=fornecedor> <xs:complexType> <xs:sequence> <xs:element name=razaoSocial type=xs:string /> <xs:group ref=endereco /> </xs:sequence> </xs:complexType> </xs:element> ... </xs:schema>

Rmulo C. Silva

XSD contedo de elementos


Contedo simples:
Utilizao da palavra-chave type com o respectivo tipo do contedo <xs:element name=empresa type=xs:string> No XML: <empresa> Minha Empresa Ltda. </empresa>

Rmulo C. Silva

XSD contedo de elementos


Contedo simples com atributo:
Uso de complexType e simpleContent
<xs:element name=empresa> <xs:complexType> <xs:simpleContent> <xs:extension base=xs:string> <xs:attribute name=categoria type=xs:string /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>

No XML: <empresa categoria=Ltda> Minha Empresa </empresa>

Rmulo C. Silva

XSD contedo de elementos


Contedo misto: atributos, texto e subelementos
Fazer mixed=true no complexType <xs:element name=A> <xs:complexType mixed=true> <attribute name=atrib type= xs:integer /> <xs:sequence> <xs:element name=elem1 type=xs:string/> <xs:element name=elem2 type=xs:integer/> </xs:sequence> </xs:complexType> </xs:element> No XML: <A atrib=1234> algum texto <elem1> texto do elemento 1 </elem1> mais um pouco de texto <elem2> texto do elemento 2 </elem2> mais algum texto final </A>
Rmulo C. Silva

Exerccios

Rmulo C. Silva

XSD derivao de tipos


Uma forma de construir tipos a partir de outros j declarados Tipos simples:
Uso de simpleType e restriction Aplicao de restries chamadas facetas

Tipos complexos:
Uso de complexContent Derivao por restrio (restriction) Derivao por extenso (extension)
Rmulo C. Silva

XSD derivao de tipos simples


Facetas mais comuns:
enumeration Restringe a um conjunto fixo de valores possveis length Restringe o comprimento a um nmero fixo de caracteres minLength Indica um comprimento mnimo maxLength Indica um comprimento mximo pattern O valor deve atender um padro descrito na forma de expresso regular whiteSpace Indica se caracteres do tipo line-feed (nova linha), carriage return e carateres de tabulao devem ser tratados como espao em branco.
Rmulo C. Silva

XSD derivao de tipos simples


Nem todas as facetas podem ser aplicadas a todos os tipos simples
Ex.: as facetas length, minLength, maxLength no podem ser aplicada aos tipos gYear, gMonth, date, gYearMonth, gDay, gMonthDay

As facetas pattern, enumeration e whiteSpace podem ser aplicadas a todos os tipos simples Sugesto: consultar a especificao antes de usar !

Rmulo C. Silva

XSD Derivao de tipo simples - enumeration


<xs:simpleType name=tipoPublicacao> <xs:restriction base=xs:string> <xs:enumeration value = livro/> <xs:enumeration value = artigo/> <xs:enumeration value = tese/> </xs:restriction> </xs:simpleType> <xs:element name=publicacao type=tipoPublicacao/> No XML: <publicacao>artigo</publicacao>
Rmulo C. Silva

XSD restrio sobre faixa de valores


As facetas minInclusive, maxInclusive, minExclusive e maxExclusive podem ser aplicadas a nmeros para definir faixa de valores
<xs:simpleType name=porcentagem> <xs:restriction base=xs:decimal> <xs:minInclusive value=0 /> <xs:maxInclusive value=100 /> </xs:resctriction> </xs:simpleType>

Rmulo C. Silva

XSD derivao de tipo simples minLength e maxLength


<xs:element name=senha> <xs:simpleType> <xs:restriction base=xs:string > <xs:minLength value=5 /> <xs:maxLength value=8 /> </xs:restriction> </xs:simpleType> </xs:element> ex. de elemento vlido: <senha>abcdef</senha> ex. de elemento invlido: <senha> abcd </senha>
Rmulo C. Silva

XSD derivao de tipo simples - length


<xs:element name = CEP > <xs:simpleType> <xs:restriction base=xs:string> <xs:length value=8 /> </xs:restriction> </xs:simpleType> </xs:element> No XML: <CEP>85856000</CEP>

Rmulo C. Silva

XSD derivao de tipo simples totaldigits e fractionDigits


Facetas aplicadas a tipos numricos
totaldigits Especifica o nmero mximo de dgitos (incluindo a parte decimal) fractionDigits Expecifica o nmero mximo de dgitos na parte decimal

Ex.:
<xs:restriction base=decimal> <xs:totalDigits value=4/> <xs:fractionDigits value=2 /> </xs:restriction> Valores vlidos no XML:
1 12 1234 1.2 12.3 1.234 12.345
Rmulo C. Silva

12.34

Valores invlidos no XML:


123.45

XSD derivao de tipo simples - whiteSpace


Valores possveis:
preserve Respeita os espaos existentes replace Substitui as ocorrncias de tab (#x0), line-feed(#xA), cariage return (#xD) por um espao simples (#x20) collapse O mesmo que replace, porm mltiplas ocorrncias so substituidas por um nico espao simples.

Rmulo C. Silva

XSD- derivao de tipo simples whiteSpace


<xs:element name=paragrafo > <xs:simpleType> <xs:restriction base=xs:string > <xs:whiteSpace value=collapse /> </xs:restriction> </xs:simpleType> </xs:element> No XML: <paragrafo> aqui texto mais texto </paragrafo> ser interpretado como: <paragrafo> aqui texto mais texto </paragrafo>
Rmulo C. Silva

XSD derivao de tipo simples - pattern


<xs:element name = CEP > <xs:simpleType> <xs:restriction base=xs:string> <xs:pattern value=\d{5}-\d{3} /> </xs:restriction> </xs:simpleType> </xs:element> No XML: <CEP>85856-000</CEP>

Rmulo C. Silva

XSD- derivao de tipo complexo - restrio


Semelhante derivao de tipo simples, porm restringe elementos
<xs:complexType name=tipoArtigo> <xs:sequence> <xs:element name=titulo type=xs:string /> <xs:element name=autor type=xs:string/> </xs:sequence> </xs:complexType> <xs:complexType name=tipoArtigoModificado> <xs:complexContent> <xs:restriction base=tipoArtigo> <xs:sequence> <xs:element name=titulo type=xs:string/> <xs:element name=autor type=xs:string minOccurs=1 maxOccurs=unbounded /> </xs:sequence> </xs:restriction> <xs:/complexContext> </xs:complexType>

Rmulo C. Silva

XSD- derivao de tipo complexo - extenso


aumenta um tipo, incluindo algum elemento ou atributo
<xs:complexType name=tipoEndereco > <xs:sequence> <xs:element name=rua type=xs:string/> <xs:element name=numero type=xs:integer/> </xs:sequence> </xs:complexType> <xs:complexType name=tipoEnderecoExtendido > <complexContent> <extension base=tipoEndereco> <xs:sequence> <xs:element name= cidade type=xs:string/> </xs:sequence> </extension> </complexContent> </xs:complexType>
Rmulo C. Silva

XSD- tipos simples - list


Permite definir um tipo como sendo uma lista de tipos atmicos
Ex.: o tipo NMTOKENS e IDREFS so tipos lista pr-definidos.

Ex. de tipo lista:


<xs:simpleType name=CEP> <xs:restriction base=xs:integer > <xs:length value=8 /> </xs:restriction> </xs:simpleType> <xs:simpleType name=listaCEP > <xs:list itemType=CEP /> </xs:simpleType> <xs:element name=codigosCEPs type=listaCEP /> No XML: <codigosCEPs>85856630 85856200 70345000</codigosCEPs>

Rmulo C. Silva

XSD tipos simples - union


Permite a criao de um tipo em que o atributo ou elemento seja uma ou mais instncias de um tipo elaborado a partir da unio de vrios tipos de lista e atmicos Ex.:
<xs:simpleType name=estado > <xs:restriction base=xs:string> <xs:enumeration value=PR /> <xs:enumeration value=SP /> <xs:enumeration value=RJ /> ... </xs:restriction> </xs:simpleType> <xs:simpleType name=estado_CEP> <xs:union memberTypes=estado listaCEP /> </xs:simpleType> <xs:element name=regiao type=estado_CEP /> Elementos vlidos no XML: <regiao>RJ</regiao> <regiao>85856630 79356277 23476744 </regiao>
Rmulo C. Silva

XSD impedindo derivao de tipos


Um autor pode impedir que outros autores derivem tipos criados por ele Sintaxe para tipo simples:
<simpleType ... final=TipoImpedimento > ... </simpleType> onde TipoImpedimento pode ser:
restriction extension union list #all
Rmulo C. Silva

XSD impedindo derivao de tipos


Sintaxe para tipos complexos:
<complexType ... Final=TipoImpedimento> ... </complexType> onde TipoImpedimento pode ser:
restriction extension #all

Rmulo C. Silva

XSD derivao de tipos (resumo)

Rmulo C. Silva

XSD Unicidade
possvel indicar que o valor de um atributo ou elemento deve ser nico dentro de um certo escopo Uso de elemento unique
select Seleciona um conjunto de elementos field Identifica o campo que dever ser nico dentro do conjunto selecionado

Seletor e campos devem ser expresses XPath


Rmulo C. Silva

XSD - Unicidade
<xs:element name=produtos > <xs:complexType> <xs:sequence minOccurs=0 maxOccurs=unbounded > <xs:element name=produto> <xs:complexType> <xs:simpleContent> <xs:extension base=xs:string <xs:attribute name=cod type=xs:string/> </xs:extension> <xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:unique name=codProd > <xs:selector xpath=produto /> <xs:field xpath=cod /> </xs:unique> </xs:element>
Rmulo C. Silva

XSD- Unicidade
<?xml version="1.0" encoding="UTF-8"?> <produtos xsi:noNamespaceSchemaLocation="testeUnicidade.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> <produto cod="xxx"> algum texto aqui. </produto> <produto cod="yyy"> outro texto. </produto> <produto cod="zzz"> mais texto </produto> </produtos>
Rmulo C. Silva

XSD - Unicidade
A palavra-reservada key pode ser usada no lugar de unique
Permite que o valor da chave pode ser usado em outro ponto do documento atravs de keyref keyref Funcionamento similar chave estrangeira em banco de dados

Rmulo C. Silva

XSD- Unicidade
<xs:element name="BookStore"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Book"> <xs:complexType> <xs:sequence> <xs:element name="Title" type="xs:string" /> <xs:element name="Author" type="xs:string" /> <xs:element name="Date" type="xs:string" /> <xs:element name="ISBN" type="xs:string" /> <xs:element name="Publisher" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="PK"> <xs:selector xpath="Book" /> <xs:field xpath="ISBN" /> </xs:key> </xs:element>
Rmulo C. Silva

XSD tipos - Exerccios

Rmulo C. Silva

XPath
Permite referenciar um elemento especfico dentro de um documento Uso de expresses semelhantes a caminhos de arquivos e diretrios Usado nos elementos key e unique para indicar caminho especfico Usado em instrues XSLT para fazer a converso dos elementos para algum tipo de sada (HTML, PDF, etc.)
Rmulo C. Silva

XPath
<?xml version="1.0" encoding="utf-8"?> <catalogo> <Livro categoria="romance"> <titulo>Dom Casmurro</titulo> <autor>Machado de Assis</autor> </Livro> <Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro> </catalogo>
Rmulo C. Silva

XPath
raiz catalogo elemento raiz

livro

categoria=romance

livro

categoria=filosofia

titulo

autor

titulo

autor

Dom Casmurro

Machado de Assis

O Discurso do Mtodo

Rene Descartes

Rmulo C. Silva

XPath
/ catalogo /catalogo

livro

categoria=romance

/catalogo/livro/@categoria

titulo

autor

/catalago/livro/autor

Dom Casmurro

Machado de Assis

Rmulo C. Silva

XPath uso de //
<?xml version="1.0" encoding="utf8"?> <catalogo> <Livro categoria="romance"> <titulo>Dom Casmurro</titulo> <autor>Machado de Assis</autor> <dadosTecnicos> <paginas>280</paginas> <preco>50</preco> </dadosTecnicos> </Livro> <Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro> </catalogo>

//nomeElemento
Procura por nomeElemento no interessando os antecessores Exs.: //titulo <titulo> Dom Casmurro </titulo> <titulo>O Discurso do Mtodo </titulo> /catalogo//paginas <paginas>280</paginas>

Rmulo C. Silva

XPath funo text()


<?xml version="1.0" encoding="utf8"?> <catalogo> <Livro categoria="romance"> <titulo>Dom Casmurro</titulo> <autor>Machado de Assis</autor> <dadosTecnicos> <paginas>280</paginas> <preco>50</preco> </dadosTecnicos> </Livro> <Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro> </catalogo>

Funo text() retorna o texto do elemento


/catalago/livro/autor/text()

Machado de Assis Rene Descartes

Rmulo C. Silva

XPath - predicados
Podem ser usados para testar se um determinado elemento est presente ou tem um valor especfico Exs:
/catalogo/livro[dadosTecnicos]
<Livro categoria="romance"> <titulo>Dom Casmurro</titulo> <autor>Machado de Assis</autor> <dadosTecnicos> <paginas>280</paginas> <preco>50</preco> </dadosTecnicos> </Livro>

Rmulo C. Silva

XPath predicados
/catalogo/livro[autor=Rene Descartes]
<Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro>

/calalogo/livro[@categoria=romance]
<Livro categoria="romance"> <titulo>Dom Casmurro</titulo> <autor>Machado de Assis</autor> <dadosTecnicos> <paginas>280</paginas> <preco>50</preco> </dadosTecnicos> </Livro>
Rmulo C. Silva

XPath - predicados
Outras funes:
position() Retorna a localizacao do elemento testado Ex.: /catalogo/livro[position()=2]
<Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro>

last() Retorna o ltimo elemento Ex.: /catalogo/livro[last()]


<Livro categoria="filosofia"> <titulo>O Discurso do Mtodo</titulo> <autor>Rene Descartes</autor> </Livro>

Rmulo C. Silva

Comparao XSD DTD: opes


DTD
<!ELEMENT publicacao (artigo | livro | tese) >

XSD
<xs:element name=publicacao > <xs:complexType> <xs:choice> <xs:element name=artigo type=xs:string/> <xs:element name=livro type=xs:string/> <xs:element name=tese type=xs:string /> </xs:choice> </xs:complexType> </xs:element>
Rmulo C. Silva

Comparao XSD DTD: repetio


DTD:
<!ELEMENT publicacoes (artigo | livro)* >

XSD:
<xs:element name=publicacoes > <xs:complexType> <xs:choice minOccurs=0 maxOccurs=unbounded> <xs:element name=artigo type=xs:string/> <xs:element name=livro type=xs:string/> <xs:element name=tese type=xs:string /> </xs:choice> </xs:complexType> </xs:element>

Rmulo C. Silva

Comparao DTD XSD: elementos de contedo misto


DTD
<!ELEMENT paragrafo (#PCDATA | italico | negrito)* > <!ELEMENT italico (#PCDATA) > <!ELEMENT negrito (#PCDATA) >

XSD
<xs:element name="paragrafo"> <xs:complexType mixed="true"> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element minOccurs="0" maxOccurs="unbounded" name="italico" type="xs:string" /> <xs:element minOccurs="0" maxOccurs="unbounded" name="negrito" type="xs:string" /> </xs:choice> </xs:sequence> </xs:complexType> </xs:element>
Rmulo C. Silva

Linguagens e padres baseados em XML


XMI (XML Metada Interchage):
Padro OMG para troca de informaes de metadados, em geral modelos UML

WML (Wireless Markup Language)


Linguagem de marcao desenvolvida para dispositivos mveis.

SVG (Scalable Vector Graphics)


Linguagem para descrever grficos vetoriais em XML

MathML (Mathematics Markup Language)


Linguagem para descrio de objetos matemticos

CML (Chemical Markup Language)


Linguagem para descrio de molculas e reaes qumicas
Rmulo C. Silva

APIs para manipulao de XML


DOM (Document Object Model):
Conjunto de objetos e mtodos para representar documentos XML. Especificao mantida pelo consrcio W3C Baseado em rvore

SAX (Simple API for XML):


Interface padro para anlise de documentos XML baseado em eventos Utiliza mtodos de retorno (callbacks) para avisar que item especfico foi encontrado no documento
Rmulo C. Silva

DOM (Document Object Model)


Representa o documento XML como uma rvore de nodos que mapeia a sua ordem e estrutura com relao aos elementos do documento A especificao possui nveis (0, 1, 2, 3, ) que so mantidos pelo W3C. Permite ao programador criar um documento XML, navegar pela sua estrutura, acrecentar, modificar ou remover elementos.

Rmulo C. Silva

DOM estrutura bsica


Nodo

Documento

Elemento

Atributo

Dado tipo Caracter

Texto

CDATASection

Comentrio

Rmulo C. Silva

DOM
O elemento documentElement o nvel mais alto da rvore
Pode conter ramificaes (nodos)

Um nodo pode conter um filho (childNode) dependendo de sua definio Uma propriedade de nodo retornar um valor (ou lista de valores).
Ex.: childNodes retorna uma relao de nodos (NodeList) contendo todos os nodos-filhos.

Rmulo C. Silva

DOM
Propriedades tpicas dos nodos:
attributes: mapa de nomes de nodos contendo todos os atributos deste nodo childNodes: lista (NodeList) com todos nodosfilho firstChild: retorna o primeiro nodo-filho deste nodo lastChild: retorna o ltimo nodo-filho deste nodo nextSibling: retorna o prximo nodo-irmo. nodeName: retorna o nome do nodo (nodeName)

Rmulo C. Silva

DOM
Propriedades tpicas dos nodos (cont.)
nodeType: retorno o tipo do nodo (nodeType) soba a forma de um nmero nodeValue: retorna ou ajusta o valor deste nodo ownerDocument: retorno o nodo raiz do documento parentNode: retorno o nodo-pai deste nodo previousSibling: retorna o nodo-irmo anterior

Rmulo C. Silva

DOM
Mtodos para utilizao com nodos:
appendChild(novoFilho): acrescenta um novoFilho ao final dos nodos-filhos deste nodo cloneNode(booleano): retorna um clone exato deste nodo. Se o parmetro for true, o nodo clonado tambm ter todos os nodos-filhos hasChildNodes(): retorna true se o nodo tiver quisquer nodos-filhos

Rmulo C. Silva

DOM
Mtodos para utilizao com nodos (cont.)
insertBefore(novoNodo, NodoDeRef): insere um novoNodo antes do nodo NodoDeRef, j existente removeChild(nomeDoNodo): remove o nodo nomeDoNodo replaceChild(novoNodo,antigoNodo): substitui o antigoNodo pelo novoNodo.

Rmulo C. Silva

DOM
Tipos de nodo e os tipos de nodo que podem conter:
Document: Element (no mximo um), ProcessingInstruction, Comment e DocumentType DocumentFragment: Element, ProcessingInstruction, Comment, Text, CDATASection e EntityReference

Rmulo C. Silva

DOM
Tipos de nodo e os tipos de nodo que podem conter (cont.):
EntityReference: Element, ProcessingInstruction, Comment, Text, CDATASection e EntityReference Element: Element, ProcessingInstruction, Comment, Text, CDATASection e EntityReference

Rmulo C. Silva

DOM
Tipos de nodo com os respectivos tipos de nodo que podem conter (cont.):
Attr: Text e EntityReference Entity: Element, ProcessingInstruction, Comment, Text, CDATASection e EntityReference

Rmulo C. Silva

Manipulao de XML em Java


JAXP (Java API for XML Processing):
Conjunto de APIs para manipulao de XML DOM (nvel 3) org.w3c.dom SAX 2 org.xml.sax org.xml.sax.helpers org.xml.sax.ext XSLT 1.0 javax.xml.transform

Rmulo C. Silva

Utilizao da API DOM em Java

Rmulo C. Silva

API JDOM - Java

Rmulo C. Silva

API JDOM - Java


Node Attr CDATASection nodeName() Nome do atributo #cdata-section nodeValue() Valor do atributo Contedo da seo CDATA Contedo do comentrio null null null null null null null Contudo inteiro excluindo o destino Texto do nodo Attributes null null 2 4 nodeType()

Comment Document DocumentFragment DocumentType Element Entity EntityReference Notation ProcessingInstruction

#comment #document #document-fragment Nome do tipo do documento Nome da Tag Nome da Entidade Nome da entidade referenciada Nome da Notation Target (Destino)

null null null null NamedNode Map null null null null

8 9 11 10 1 6 5 12 7

Text

#text

null

Rmulo C. Silva

JDOM
Pacotes geralmente usados:
import import import import import java.io.*; java.util.*; javax.xml.parsers.*; org.xml.sax.*; org.w3c.dom.*;

Excees mais comuns:


ParserConfigurationException erro na criao do parser. SaxParseException parser encontrou um problema na formatao do arquivo XML. SaxException O erro mais genrico do parser. IOException erro de arquivo.
Rmulo C. Silva

JDOM - exemplo
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File; import org.w3c.dom.Document; ... File docFile = new File(NomeArquivo.xml"); Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); // efetua o parsing ...
Rmulo C. Silva

JDOM - exemplo
...
Element root = doc.getDocumentElement(); for (Node filho= root.getFirstChild(); filho != null; filho = filho.getNextSibling()) { System.out.println(filho.getNodeName()+" = "+filho.getNodeValue()); }

...

Rmulo C. Silva

SAX (Simple API for XML)


Baseada em eventos Invoca mtodos medida que processa o documento Principais eventos:
startDocument endDocument startElement endElement getEntity

Rmulo C. Silva

SAX - interfaces
Interfaces:
Attributes ContentHandler DTDHandler EntityResolver ErrorHandler XMLFilter XMLReader Locator

Rmulo C. Silva

SAX - classes
Classes:
InputSource AttributesImpl DefaultHandler LocatorImpl NamespaceSupport ParseAdapter XMLFilterImpl XMLReaderAdapter XMLReaderFactory

Rmulo C. Silva

SAX
Para utilizar SAX preciso criar uma instncia de um analisador. O analisador gera eventos em uma ordem equivalente a uma busca em profundidade (depth-first)

Rmulo C. Silva

SAX passos para utilizao


Obter um analisador SAX Providenciar um manipulador de documentos (normalmente uma classe Java) Personalizar a manipulao de erros para o software em uso (tambm em Java) Utilizar um analisador de validao para XML

Rmulo C. Silva

SAX exemplo Manipulador de documentos


public class XMLHandler extends DefaultHandler { public void startDocument() { System.out.print("iniciando"); } public void endDocument() { System.out.print("\nterminando"); } ...

Rmulo C. Silva

SAX exemplo Manipulador de documentos


... public void startElement(String namespaceURI, String localName,String qName,Attributes atts) throws SAXException { System.out.print(elemento: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" + attName + ": + atts.getValue(attName)); } } ...
Rmulo C. Silva

SAX exemplo Manipulador de erros


Deve estender DefaultHandler Pode ser a mesma classe usada como Manipulador de Documentos Principais mtodos:
void error(SAXParseException e) Recebe notificao de um erro recupervel void fatalError(SAXParseException e) Reporta um erro fatal de parse void warning(SAXParseException e) Recebe a notificao de um aviso de parse

Rmulo C. Silva

SAX exemplo Manipulador de Erros


public class XMLHandler extends DefaultHandler { ... public void error(SAXParseException e) { System.out.println("Erro durante parsing do arquivo: "+e.getMessage()); } public void warning (SAXParseException e) { System.out.println("Problema durante parsing: "+e.getMessage()); } public void fatalError (SAXParseException e) { System.out.println("Erro fatal:"+e.getMessage()); System.exit(1); } ...
Rmulo C. Silva

SAX - exemplo
XMLReader xmlReader = null; SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser(); // obtem um Parser xmlReader = saxParser.getXMLReader(); // configura o tratador de contedo xmlReader.setContentHandler(new XMLHandler()); // configura o tratador de erros xmlReader.setErrorHandler(new XMLHandler()); InputSource source = new InputSource(Arquivo.xml");

xmlReader.parse(source); // efetua o parsing ...


Rmulo C. Silva

DOM x SAX
DOM:
Usado quando se precisa fazer acessos aleatrios aos elementos Consome mais memria (representao da rvore) Usado quando necessita caminhar na rvore inteira Sugesto: procurar definir XMLs que usem mais atritutos e menos elementos

SAX:
Usado mais quando os dados so tratados como fluxo de dados
Rmulo C. Silva

Bibliografia
Graves, M. Projeto de Banco de Dados com XML. Ed. Makron Books, 2003. Bradley, N. The XML Schema Companion. Ed. Addison-Wesley, 2004. Rocha, H. XML na Gesto de Informaes. In: Integrao total de negcios usando XML, SUCESU-SP, 2002. Maurcio, C. R. M.; Peres, F.F.F. Linguagens de Estruturao e Apresentao de Contedo e Mecanismo de Transformao para Objetos. 2007
Rmulo C. Silva

Bibliografia
Tittel, E. Teoria e Problemas de XML. Bookman, 2003

Rmulo C. Silva

Sites
http://www.w3c.org Braganholo, V. P. Introduo ao XML. Disponvel em http://www.dcc.ufrj.br/~braganholo/ http://www.w3schools.com Baptista, Cludio. XML eXtensible Markup Language. Disponvel em http://www.lsi.dsc.ufcg.edu.br
Rmulo C. Silva