Namespaces e Esquemas XML
Namespaces - Motivação
M.L.M.Campos & Paulo Pires
„
Problema 1:
„
„
„
„
NCE
2003
Cada usuário ou grupo pode criar suas próprias etiquetas
(tags): mesmas tags podem ter sîgnificados diferentes
Problema 2:
„
„
Aplicações Baseadas em XML
quando se juntam dois documentos que usam a mesma
etiqueta (tag) com significados diferentes
Precisa-se, de alguma maneira, remover a
ambigüidade
Usam-se então Namespaces
URLs são usados não por apontarem para uma
dada localização mas por serem exclusivos
1
Namespaces
M.L.M.Campos & Paulo Pires
„
„
„
Aplicações Baseadas em XML
Permitem que seja usado um esquema
de atribuição de nomes ao longo de um
conjunto de documentos
Usa IP para associar nomes exclusivos a
URI
Usa o atributo “xmlns”
Declaração e uso de Namespace
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<x xmlns:edi='http://ecommerce.org/schema'>
<!-- the 'price' element's namespace is http://ecommerce.org/schema -->
<edi:price units='Euro'>32.18</edi:price>
</x>
NCE
2003
2
Múltiplos Namespaces
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version="1.0"?>
<!-- both namespace prefixes are available throughout -->
<bk:book xmlns:bk='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6'>
<bk:title>Cheaper by the Dozen</bk:title>
<isbn:number>1568491379</isbn:number>
</bk:book>
Outro Exemplo
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<aaa >
<bbb >
<ccc />
</bbb>
<BBB >
<CCC />
</BBB>
<x111 >
<x222 />
</x111>
</aaa>
NCE
2003
3
Exemplo
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<lower:aaa xmlns:lower = "http://zvon.org/lowercase" >
<lower:bbb >
<lower:ccc />
</lower:bbb>
<upper:BBB xmlns:upper = "http://zvon.org/uppercase" >
<upper:CCC />
</upper:BBB>
<xnumber:x111 xmlns:xnumber = "http://zvon.org/xnumber" >
<xnumber:x222 />
</xnumber:x111>
</lower:aaa>
Declararação de namespaces na raiz
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<lower:aaa xmlns:lower = "http://etc.org/lowercase”
xmlns:upper = "http://etc.org/uppercase"
xmlns:xnumber = "http://etc.org/xnumber" >
<lower:bbb >
<lower:ccc />
</lower:bbb>
<upper:BBB >
<upper:CCC />
</upper:BBB>
<xnumber:x111 >
<xnumber:x222 />
</xnumber:x111>
</lower:aaa>
NCE
2003
4
Namespace Default
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Namespaces não têm que ser declarados explicitamente com prefixos.
O atributo xmlns define o namespace default que é usado para o elemento
onde ele ocorre e para seus filhos e descendentes.
<aaa >
<bbb xmlns = "http://etc.org/lowercase" >
<ccc />
</bbb>
<BBB xmlns = "http://etc.org/uppercase" >
<CCC />
</BBB>
<x111 xmlns = "http://etc.org/xnumber" >
<x222 />
</x111>
</aaa>
Exemplo
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Elementos podem até pertencer a diferentes namespaces
embora eles tenham os mesmos prefixos!
<aaa >
<lower:bbb xmlns:lower = "http://etc.org/lowercase" >
<lower:ccc />
</lower:bbb>
<lower:BBB xmlns:lower = "http://etc.org/uppercase" >
<lower:CCC />
</lower:BBB>
<lower:x111 xmlns:lower = "http://etc.org/xnumber" >
<lower:x222 />
</lower:x111>
</aaa>
NCE
2003
5
Namespaces e seu uso
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
Namespaces são amplamente usados nas
diversas iniciativas associadas ao XML
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="pattern">
<template><value-of select="."/></template>
</xsl:template>
</xsl:stylesheet>
Esquemas XML
DTD
XML Schemas
NCE
2003
6
Uso de Esquema XML
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
Possibilita o processamento de
documentos identificando as limitações
de estrutura e conteúdo
„
Possibilita verificar se o documento é válido
„
Facilita a troca de informações.
Esquema XML
M.L.M.Campos & Paulo Pires
„
„
Esquema em XML significa uma definição
da estrutura de uma classe de
documentos XML
Formas de representar Esquema XML:
„
„
„
DTD
XML Schema
Outras propostas:
„
„
„
„
NCE
2003
Aplicações Baseadas em XML
XDR - XML Data Reduced - Microsoft
SOX - Schema for OO XML - Commerce One
Schematron, DSD: foco na validação de esquemas
e ainda DCD, DDML, Assertion Grammars, RELAX
7
DTD – Document Type Definition
M.L.M.Campos & Paulo Pires
„
Contém declarações que definem:
„
„
„
„
„
„
a seqüência e aninhamento de elementos exigida ou permitida
valores e tipos dos atributos exigidos ou permitidos
nomes de entidades internas e externas necessárias e
utilizadas
das notações
Tipos de DTDs
„
„
Aplicações Baseadas em XML
DTD Interno: declarações em DOCTYPE
DTD externos - SYSTEM e PUBLIC
DOCTYPE: associa declarações de DTD com um
documento
Declarações básicas ELEMENT, ATTLIST, ENTITY,
NOTATION
DTD (Document Type Definition)
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Exemplo de definição e uso do DTD no mesmo
documento:
livro.xml:
<?xml version="1.0"?>
<!DOCTYPE livroDTD[
<!ELEMENT livro (titulo, isbn)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
]>
<livro>
<titulo> XML Metadata </titulo>
<isbn> 1-861004-51-6 </isbn>
</livro>
NCE
2003
8
DTD - Tipos de conteúdo de um Elemento
M.L.M.Campos & Paulo Pires
„
„
„
„
„
Aplicações Baseadas em XML
conteúdo elemento: pode ter elementos filho.
conteúdo misto: pode conter caractere ou
outros elementos.
ANY: pode ter conteúdo de qualquer
estrutura. O parser não valida.
EMPTY: não tem elemento filho ou conteúdo
de dado do tipo caracter, somente atributos
são permitidos.
PCDATA: pode conter dado do tipo caracter
somente, pode ter atributos.
DTD - Exemplos usando categorias de conteúdo:
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
contéudo elemento: Lista Sequencial
<!ELEMENT publicacoes (publicacao1, publicacao2,
publicacao3)>
<!-- documento XML terá as três publicações, mesmo
que como elementos vazios -->
„
conteúdo elemento: Lista de escolha
<!ELEMENT publicacoes (publicacao1 | publicacao2 |
publicacao3)+>
<!-- documento XML poderá ter 1 ou mais publicações
apresentadas em qualquer ordem -->
NCE
2003
9
DTD - Exemplos usando categorias de conteúdo
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
conteúdo misto
<!ELEMENT autor (#PCDATA | primeiro_nome |
segundo_nome)*>
„
ANY
<!ELEMENT outra_informacao ANY>
<!-- o elemento outra_informacao poderá receber
conteúdo de qualquer tipo -->
„
EMPTY
<!ELEMENT marca EMPTY>
DTD - Exemplo de definição e uso do DTD (em arquivo separado)
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
livraria.dtd: (armazenado em c:\projeto\projetoXML)
<!ELEMENT livraria (livro*)>
<!ELEMENT livro (titulo, autor+, ano, editora)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT ano (#PCDATA)>
<!ELEMENT editora (#PCDATA)>
livraria.xml:
<?xml version="1.0"?>
<!DOCTYPE livraria SYSTEM "c:\projeto\projetoXML\livraria.dtd">
<livraria>
<livro>
<titulo> XML Metadata </titulo>
<autor> Kal Ahmed </autor>
<autor> Danny Ayers </autor>
<ano> 2001 </ano>
<editora> Wrox Press </editora>
</livro>
</livraria>
NCE
2003
10
DTD – Ocorrência de elementos
M.L.M.Campos & Paulo Pires
„
„
Aplicações Baseadas em XML
Tipos de ocorrência
( , ): elementos devem ocorrer na ordem
especificada;
| : apenas um dos elementos deve ocorrer;
Cardinalidade
sem operador: uma ocorrência do elemento é requerida.
? : zero ou uma ocorrência é permitida.
* : zero ou mais ocorrências de um elemento são
permitidas.
+ : uma ou mais ocorrências de um elemento são
permitidas.
Atributos – Tipos de Atributos
M.L.M.Campos & Paulo Pires
„
CDATA:
„
„
2003
um de um conj de nomes declarados no DTD
[Valor enumerado]:
„
NCE
um nome/lista de nomes delimitados por branco
NOTATION:
„
„
entidade(s) externa pré-def
NMTOKEN/NMTOKENS:
„
„
referencia(s) para um ID (existente)
ENTITY/ENTITIES:
„
„
ident único
IDREF/IDREFS:
„
„
string
ID:
„
„
Aplicações Baseadas em XML
um de um conj definido
11
ATTLIST: Valores default
M.L.M.Campos & Paulo Pires
„
#REQUIRED:
„
„
opcional
#FIXED:
„
„
obrigatório
#IMPLIED:
„
„
Aplicações Baseadas em XML
sempre fixo, aparece opcionalmente
apenas valor:
„
valor assumido qdo não especificado
Exemplo de declaração de lista de atributos
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
contatos.dtd: (armazenado em c:\projeto\projetoXML)
<!ELEMENT contatos (telefone*)>
<!ELEMENT telefone (#PCDATA)>
<!ATTLIST telefone tipo (residencia | escritorio | celular)
#REQUIRED>
contatos.xml:
<?xml version="1.0"?>
<!DOCTYPE contatos SYSTEM
"c:\projeto\projetoXML\contatos.dtd">
<contatos>
<telefone tipo="residencia"> 021 33907777 </telefone>
<telefone tipo="escritorio"> 021 22797178 </telefone>
<telefone tipo="celular"> 021 91020754 </telefone>
</contatos>
OBS: com o uso de #REQUIRED todo elemento telefone tem que identificar um
tipo da lista.
NCE
2003
12
Atributos – mais exemplos
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Atributos ID e IDREF
Estes tipos de atributos permitem criar uma referência a um documento
<!–- declaração do element secao -->
<!–- o atributo de identificação de secao -->
<!–- target é optional -->
<!ELEMENT secao (#PCDATA|xref)* >
<!ATTLIST secao target ID #IMPLIED >
<!–- declaracao do elemento xref -->
<!ELEMENT xref EMPTY >
<!ATTLIST xref ref IDREF #REQUIRED>
<secao target='X321'> conteúdo de uma seção </secao>
<secao> outra seção. Faz referência à seção X321 <xref
ref='X321'/> </secao>
Não referenciamos de fato uma seção, mas um elemento
do documento que possui um atributo do tipo ID e cujo valor
é X321.
Entidades: ENTITY
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
Entidades Internas
„
Entidades pré-definidas
„
„
certos caracteres, como < > & ' " não podem ser
utilizados dentro do texto de um documento
estes caracteres devem ser representados por seus
códigos pré-definidos, chamadas entidades pré-
definidas
<: &lt;
>: &gt;
&: &amp;
NCE
2003
13
Entidades: ENTITY
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
ENTIDADES INTERNAS (cont.)
„
Entidades definidas pelo usuário
„
„
é possível declarar as entidades dentro do DTD
esta declaração tem a forma
<!ENTITY nome-entidade "valor-entidade">
Exemplo
a declaração seguinte
<!DOCTYPE toto [
<!ENTITY copyright "&#x00A9; Editions titi">
]>
<toto> &copyright; </toto>
produzirá
© Editions titi
observação: 00A9 é o código Unicode do caracter ©
Entidades externas endereçadas por URL
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
Exemplo
<?xml version='1.0' ?>
<!DOCTYPE livro [
<!ENTITY capitulo1 SYSTEM "chap1.xml">
<!ENTITY capitulo2 SYSTEM "chap2.xml">
<!ENTITY autor "toto">
]>
<livro>
<titulo> XML para idiotas </titulo>
<autor> &autor; </autor>
<intro> Era uma vez uma Web… </intro>
&capitulo1;
&capitulo2;
</livro>
„
NCE
2003
Restrição: as entidades externas devem ser
documentos bem formados
14
Notações e entidades não XML
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Exemplo
„
<!DOCTYPE exemplo [
<!NOTATION jpeg SYSTEM "/usr/local/bin/xview">
<!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA
jpeg>
<!ELEMENT exemplo (foto)>
<!ELEMENT foto EMPTY>
<!ATTLIST foto img ENTITY #REQUIRED>
<exemplo>
<foto img='foto-ferias'/>
</exemplo>
]>
A declaração de notação associa ao formato jpeg a aplicação
xview que poderá ser utilizada em extensão da aplicação XML.
A declaração da entidade foto-ferias indica que o conteúdo
dos dados está situado no arquivo foto1.jpg
A palavra-chave NDATA indica que este arquivo é de um formato
não XML
„
„
„
DTD - Limitações
M.L.M.Campos & Paulo Pires
„
Um documento XML pode estar associado a somente uma 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)
„
„
„
2003
os valores para o elemento <sexo> devem ser F ou M.
Não garante integridade referencial
„
„
Não tem integer, float, etc.
Não permite declarar restrições de domínio
„
NCE
Aplicações Baseadas em XML
Não pode ser garantido que um autor de um livro só pode ser uma
referência a uma instância de elemento do tipo pessoa.
Não é escrito em linguagem XML, escrito em EBNF (Extended BackusNaur Form);
15
XML Schemas
XML Schema
M.L.M.Campos & Paulo Pires
„
„
As limitações do DTD levaram o W3C a desenvolver
XML Schema, também chamado de XSD Schema
Vantagens:
„
Escrito em linguagem XML
„
Provê integração com namespaces XML
„
2003
Provê integração de esquemas estruturais com tipos de
dados
„
Provê herança
„
Inclui os tipos primitivos inteiro, data e dado binário
„
NCE
Aplicações Baseadas em XML
XSD possui facilidade de documentação por meio dos
elementos <xsd:annotation> e <xsd:documentation>
que são específicos para documentação
16
XML Schema
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
Mais vantagens:
„
„
As mesmas ferramentas usadas para criação e edição de
documentos XML podem ser usadas para a criação do
esquema
Suporta os tipos dados usados na maioria das linguagens de
programação
XML Schema - Uso de namespace
M.L.M.Campos & Paulo Pires
„
No namespace xsd
(http://www.w3.org/2001/XMLSchema) estão os
elementos e tipos de dados padrões
usados para construir esquemas.
„
„
„
NCE
2003
Aplicações Baseadas em XML
Exemplos: schema, element, complexType,
sequence, string, etc.
"schema" é o elemento raiz.
Os elementos e tipos próprios do
esquema podem ser definidos em outro
namespace.
17
Exemplo XML Schema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- exemplo de XML Schema -->
Declara o namespace xsd
<xsd:complexType name="Endereco">
<xsd:sequence>
<xsd:element name="Nome" type="xsd:string"/>
<xsd:element name="Rua" type="xsd:string"/>
<xsd:element name="Cidade" type="xsd:string"/>
<xsd:element name="Estado" type="xsd:string"/>
<xsd:element name="Cep" type="xsd:string"/>
<xsd:element name="Pais" type="xsd:string">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Brasil"/>
<xsd:enumeration value="França"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
arquivo exemplo1.xsd
</xsd:complexType>
</xsd:schema>
Comparando um DTD com um XML Schema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
BookStore.dtd
<!ELEMENT BookStore (Book)+>
<!ELEMENT Book (Title, Author, Date, ISBN, Publisher)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Date (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
Copyright © [2001]. Roger L. Costello. All Rights Reserved.
NCE
2003
18
Copyright © [2001]. Roger L. Costello. All Rights Reserved.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.books.org"
M.L.M.Campos
& Paulo Pires
Aplicações Baseadas em XML
xmlns="http://www.books.org"
elementFormDefault="qualified">
<xsd:element name="BookStore">
<xsd:complexType>
<xsd:sequence>
<!ELEMENT BookStore (Book)+>
<xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Title" minOccurs="1" maxOccurs="1"/>
<!ELEMENT Book (Title, Author, Date,
<xsd:element ref="Author" minOccurs="1" maxOccurs="1"/>
ISBN, Publisher)>
<xsd:element ref="Date" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="Publisher" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Date" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string"/>
</xsd:schema>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Date (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<?xml version="1.0"?>
Os elementos e tipos de
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
dados são usados para
<xsd:element name="BookStore">
M.L.M.Campos
& Paulo Pires
Aplicações Baseadas em XML construir esquemas:
<xsd:complexType>
Schema é
- schema
<xsd:sequence>
sempre a
<xsd:element ref="Book" minOccurs="1"
- element
raiz do
maxOccurs="unbounded"/>
- complexType
documento
</xsd:sequence>
- sequence
</xsd:complexType>
- string
</xsd:element>
e
estão descritos no
<xsd:element name="Book">
namespace
<xsd:complexType>
http://…/XMLSchema
<xsd:sequence>
<xsd:element ref="Title" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="Author" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="Date" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="Publisher" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Date" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string"/>
</xsd:schema>
Copyright © [2001]. Roger L. Costello. All Rights Reserved.
NCE
2003
19
Exemplo: Um Poema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
"Soneto Já Antigo"
(Álvaro de Campos)
Olha, Daisy: quando eu morrer tu hás-de
dizer aos meus amigos aí de Londres,
embora não o sintas, que tu escondes
a grande dor da minha morte. Irás de
Londres p'ra Iorque, onde nasceste (dizes
que eu nada que tu digas acredito),
contar áquele pobre rapazito
que me deu horas tão felizes,
embora não o saibas, que morri...
Mesmo ele, a quem eu tanto julguei amar,
nada se importará... Depois vai dar
a notícia a essa estranha Cecily
que acreditava que eu seria grande...
Raios partam a vida e quem lá ande!
Elementos Estruturais:
Poema: título, autor, corpo, data
Corpo: quadra, quadra, terno,
terno.
Quadra: verso, verso, verso,
verso
Terno: verso, verso, verso
Verso: (texto | nome)+
Nome: texto
(extraído de http://www.di.uminho.pt/~jcr/
apresentação de Jósé Ramalho)
(1922)
Poema anotado
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<poema><titulo>Soneto Já Antigo</titulo>
<autor>Álvaro de Campos</autor>
<quadra>
<verso>Olha,<nome> Daisy</nome>: quando eu morrer tu hás-de</verso>
<verso>dizer aos meus amigos aí de <nome>Londres</nome>,</verso>
<verso>embora não o sintas, que tu escondes</verso>
<verso>a grande dor da minha morte. Irás de</verso>
</quadra><quadra>
<verso><nome>Londres</nome> p'ra <nome>Iorque</nome>, onde
nasceste (dizes</verso>
<verso>que eu nada que tu digas acredito),</verso>
<verso>contar àquele pobre rapazito</verso>
<verso>que me deu horas tão felizes,</verso>
</quadra><terno>
<verso>em bora não o saibas, que morri...</verso>
...</terno>
<data>1922</data></poema>
NCE
2003
20
Especificação do tipo poema usando DTD
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Poema: título, autor, corpo, data
Corpo: quadra, quadra, terno,
terno.
Quadra: verso, verso, verso,
verso
Terno: verso, verso, verso
Verso: (texto | nome)+
Nome: texto
<!ELEMENT
<!ELEMENT poema
poema (titulo,autor,corpo,data)
(titulo,autor,corpo,data) >>
<!ELEMENT
corpo
(quadra,quadra,terno,terno)
<!ELEMENT corpo (quadra,quadra,terno,terno) >>
<!ELEMENT
<!ELEMENT quadra
quadra (verso,verso,verso,verso)
(verso,verso,verso,verso) >>
<!ELEMENT
terno
(verso,verso,verso)
<!ELEMENT terno (verso,verso,verso) >>
<!ELEMENT
<!ELEMENT verso
verso (#PCDATA
(#PCDATA |nome)*
|nome)* >...
>...
DTD
Especificação do tipo poema usando XML Schema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml
<?xml version="1.0"
version="1.0" encoding="UTF-8"?>
encoding="UTF-8"?>
<xs:schema
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element
<xs:element name="poema">
name="poema">
<xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:sequence>
<xs:element
<xs:element name="titulo"
name="titulo" type="xs:string"/>
type="xs:string"/>
<xs:element
<xs:element name="autor"
name="autor" type="xs:string"/>
type="xs:string"/>
<xs:element
name="data"
type="xs:string"/>
<xs:element name="data" type="xs:string"/>
<xs:element
<xs:element name="corpo"
name="corpo" type="Tcorpo"/>
type="Tcorpo"/>
</xs:sequence>
</xs:sequence>
<xs:attribute
<xs:attribute name="tipo"
name="tipo" type="xs:string"
type="xs:string"
use="required"
use="required" default="soneto"/>
default="soneto"/>
</xs:complexType>
</xs:complexType>
</xs:element>
</xs:element>
<xs:complexType
<xs:complexType name="Tcorpo">
name="Tcorpo">
<xs:sequence>
<xs:sequence>
<xs:element
<xs:element name="quadra"
name="quadra" type="Tquadra"/>
type="Tquadra"/>
<xs:element
<xs:element name="quadra"
name="quadra" type="Tquadra"/>
type="Tquadra"/>
<xs:element
name="terno"
type="Tterno"/>
<xs:element name="terno" type="Tterno"/>
<xs:element
name="terno"
type="Tterno"/>
<xs:element name="terno" type="Tterno"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:complexType>
...
...
</xs:schema>
</xs:schema>
NCE
2003
21
Exemplo: O Poema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="poema">
<xs:complexType>
<xs:complexType name="Tquadra">
<xs:sequence>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element
name="verso" type="Tverso"/>
<xs:complexType
name="Tcorpo">
<xs:element
name="autor" type="xs:string"/>
<xs:element
name="verso" type="Tverso"/>
<xs:sequence>
<xs:element name="data" type="xs:string"/>
<xs:element
name="verso"
type="Tverso"/>
<xs:element
name="quadra"
type="Tquadra"/>
<xs:element
name="corpo"
type="Tcorpo"/>
<xs:element
name="verso"
type="Tverso"/>
<xs:element
name="quadra"
type="Tquadra"/>
</xs:sequence>
</xs:sequence>
<xs:element
name="terno" type="Tterno"/>
<xs:attribute
name="tipo"
</xs:complexType>
<xs:element
name="terno" type="Tterno"/>
type="xs:string"
<xs:complexType
name="Tterno">
</xs:sequence>
use=“optional"
<xs:sequence>
</xs:complexType>
default="soneto"/>
<xs:element name="verso" type="Tverso"/>
</xs:complexType>
<xs:element name="verso" type="Tverso"/>
</xs:element>
<xs:element name="verso" type="Tverso"/>
... </xs:schema>
</xs:sequence>
</xs:complexType>
Exemplo: O Poema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="poema">
<xs:complexType>
<xs:complexType name="Tquadra">
<xs:sequence>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element
name="verso"
type="Tverso"/>
<xs:complexType
<xs:complexType
name="Tverso"
name="Tcorpo">
mixed="true">
<xs:element
name="autor"
type="xs:string"/>
<xs:element
name="verso"maxOccurs="unbounded">
type="Tverso"/>
<xs:choice
<xs:sequence>
minOccurs="0"
<xs:element
name="data" type="xs:string"/>
<xs:element
name="verso"
type="Tverso"/>
<xs:element
<xs:element
name="nome"
name="quadra"
type="xs:string"/>
type="Tquadra"/>
<xs:element
name="corpo"
type="Tcorpo"/>
<xs:element
name="verso"
type="Tverso"/>
<xs:element
<xs:element
name="lugar"
name="quadra"
type="xs:string"/>
type="Tquadra"/>
</xs:sequence>
</xs:sequence>
</xs:choice>
<xs:element
name="terno" type="Tterno"/>
<xs:attribute
name="tipo"
</xs:complexType>
</xs:complexType>
<xs:element
name="terno" type="Tterno"/>
type="xs:string"
<xs:complexType
name="Tterno">
</xs:sequence>
use=“optional"
<xs:sequence>
</xs:complexType>
default="soneto"/>
<xs:element name="verso" type="Tverso"/>
</xs:complexType>
<xs:element name="verso" type="Tverso"/>
</xs:element>
<xs:element name="verso" type="Tverso"/>
... </xs:schema>
</xs:sequence>
</xs:complexType>
NCE
2003
22
XML Schema - Tipos Primitivos
Tipos
de &dados
M.L.M.Campos
Paulo Pires
primitivos
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
xsd:string
xsd:boolean
xsd:decimal
xsd:float
xsd:double
xsd:duration
xsd:datetime
xsd:time
xsd:date
xsd:gYearMonth
xsd:gYear
xsd:gMonthDay
xsd:gDay
xsd:gMonth
xsd:hexBinary
xsd:base64Binary
xsd:anyURI
xsd:Qname
xsd:NOTATION
Descrição
Aplicações Baseadas em XML
strings em XML
valores lógico (true, false)
números decimais
tipo ponto flutuante precisão simples
tipo ponto flutuante precisão dupla
uma duração de tempo
um instante de tempo específico
um instante de tempo que ocorre todo dia
uma data do calendário
mês e ano gregoriano específicos
ano gregoriano específico
uma data gregoriana que ocorre cada ano
um dia gregoriano que ocorre cada mês
um mês gregoriano que ocorre todo ano
dado binário em base hexa
dado binário em base 64
uma URI (Uniform Resource Identifier)
um nome XML qualificado
tipo de atributo NOTATION do XML 1.0
XML Schema - Tipos Primitivos
Tipos
de &dados
M.L.M.Campos
Paulo Pires
primitivos
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
NCE
2003
xsd:string
xsd:boolean
xsd:decimal
xsd:float
xsd:double
xsd:duration
xsd:datetime
xsd:time
xsd:date
xsd:gYearMonth
xsd:gYear
xsd:gMonthDay
xsd:gDay
xsd:gMonth
xsd:hexBinary
xsd:base64Binary
xsd:anyURI
xsd:Qname
xsd:NOTATION
Descrição
Aplicações Baseadas em XML
strings em XML
valores lógico (true, false)
números decimais
tipo ponto flutuante precisão simples
tipo ponto flutuante precisão dupla
uma duração de tempo
um instante de tempo específico
um instante de tempo que ocorre todo dia
uma data do calendário
mês e ano gregoriano específicos
ano gregoriano específico
uma data gregoriana que ocorre cada ano
um dia gregoriano que ocorre cada mês
um<xs:element
mês gregoriano
que ocorre type="xs:string"/>
todo ano
name="nome"
dado
binário em name="lugar"
base hexa
<xs:element
type="xs:string"/>
dado binário em base 64
uma URI (Uniform Resource Identifier)
um nome XML qualificado
tipo de atributo NOTATION do XML 1.0
23
XML Schema - Tipos Derivados
M.L.M.Campos & Paulo Pires
„
Derivam dos tipos primitivos
„
„
„
Aplicações Baseadas em XML
integer (decimal), long (integer), ...
Por restrição
Por extensão
XML Schema - Simple and Complex Types
M.L.M.Campos & Paulo Pires
„
Os tipos de dados em XML Schema:
„
„
„
NCE
2003
string, date, float, double, timeDuration, ...
Um tipo “simple” restringe o texto que pode
aparecer no valor de um atributo ou no
conteúdo de um elemento textual.
Tipo “complex”:
„
„
“simple” ou “complex”.
Tipo “simple” é um dos tipos básicos:
„
„
Aplicações Baseadas em XML
Um elemento que tenha atributos ou elementos
filho é do
Um tipo “complex” restringe o conteúdo de um
elemento relativamente aos atributos e
elementos filho que pode ter.
24
Exemplo: complex Type
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:complexType name="Tquadra">
<xs:sequence>
<xs:element name="verso" type="Tverso"/>
<xs:element name="verso" type="Tverso"/>
<xs:element name="verso" type="Tverso"/>
<xs:element name="verso" type="Tverso"/>
</xs:sequence>
</xs:complexType>
Tverso é uma referência a um “complex type” definido
em outro ponto no schema
Tquadra é um complex type com nome (em oposição a
um anônimo)
Possíveis compositores:
• sequence (todos em ordem),
• choice (apenas um) e
• all (todos em qualquer ordem)
XML Schema - Escopo dos elementos
M.L.M.Campos & Paulo Pires
„
„
„
„
NCE
2003
Aplicações Baseadas em XML
Um elemento pode ser declarado como
global ou como local.
Um elemento global é declarado como sendo
filho de <schema>.
Um elemento local é declarado em algum
ponto na estrutura do Schema.
Os elementos globais podem ser reutilizados
por referência.
25
Exemplo - Elementos globais
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:element name="poema">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element name="autor" type="xs:string"/>
<xs:element name="data" type="xs:string"/>
<xs:element name="corpo">
<xs:complexType>
<xs:sequence>
<xs:element ref = "Quadra"/>
<xs:element ref = "Quadra"/>
<xs:element ref = "Terno"/>
<xs:element ref = "Terno"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Exemplo - Elementos globais
M.L.M.Campos & Paulo Pires
Aplicações Baseadas
em XML
<xs:element
name=“quadra”>
<xs:complexType>
<xs:sequence>
<xs:element name="poema">
<xs:element ref="verso"/>
<xs:complexType>
<xs:element ref="verso"/>
<xs:sequence>
<xs:element ref="verso"/>
<xs:element name="titulo" type="xs:string"/>
<xs:element ref="verso"/>
<xs:element name="autor" type="xs:string"/>
</xs:sequence>
<xs:element name="data" type="xs:string"/>
</xs:complexType>
<xs:element name="corpo">
</xs:element>
<xs:complexType>
<xs:sequence>
<xs:element ref = "Quadra"/>
<xs:element ref = "Quadra"/>
<xs:element ref = "Terno"/>
<xs:element ref = "Terno"/>
<?xml version=“1.0” encoding=“iso-8859-1”?>
</xs:sequence>
<quadra>
</xs:complexType>
<verso>Olha,<nome>Daisy</nome>:
quando eu morrer tu hás-de</verso>
</xs:element>
<verso>dizer </xs:sequence>
aos meus amigos aí de <nome>Londres</nome>,</verso>
<verso>embora
não o sintas, que tu escondes</verso>
</xs:complexType>
<verso>a
grande dor da minha morte. Irás de</verso>
</xs:element>
</quadra>
Instância Válida
NCE
2003
26
XML Schema – Reutilização por Referência
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Outro exemplo referenciando elemento:
<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="PrimeiroNome" type="xsd:string"/>
<xsd:element name="NomeMeio" type="xsd:string"/>
<xsd:element name="UltimoNome" type="xsd:string"/>
...
<xsd:element name="Nome">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="PrimeiroNome"/>
<xsd:element ref="NomeMeio"/>
<xsd:element ref="UltimoNome"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
XML Schema - Cardinalidade
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:complexType name="Tquadra">
<xs:sequence>
<xs:element name="verso" type="Tverso“
minOccurs="4" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
A cardinalidade pode ser restringida recorrendo aos
atributos: minOccurs e maxOccurs
NCE
2003
27
XML Schema - Valores para elementos
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:element name=“email" type=“xs:string“
default=“[email protected]"/>
Valor por omissão
<xs:element name=“supervisor" type=“xs:string“
fixed=“José Carlos Ramalho"/>
Valor fixo
Valor
Valor fixo
fixo –– significa
significa que
que oo valor
valor informado
informado deve
deve ser
ser
igual
ao
valor
fixed
ou
não
deve
ser
informado.
igual ao valor fixed ou não deve ser informado.
Caso
Caso contrário,
contrário, oo documento
documento não
não será
será válido.
válido.
XML Schema - Atributos
M.L.M.Campos & Paulo Pires
„
„
Aplicações Baseadas em XML
Os atributos declaram-se recorrendo ao
elemento “<attribute>”
Um atributo é sempre do tipo “simple”
<xs:attribute name="tipo"
type="xs:string"
use=“optional"
default="soneto"/>
use: (optional | required)
Se não especificarmos, assume-se “optional”
NCE
2003
28
XML Schema - Restrição de tipos primitivos
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:simpleType
<xs:simpleType name=“dia“
name=“dia“ base
base == “xs:integer”>
“xs:integer”>
<xs:minInclusive
value=“1”/>
<xs:minInclusive value=“1”/>
<xs:maxInclusive
<xs:maxInclusive value=“31”/>
value=“31”/>
</xs:simpleType>
</xs:simpleType>
Restrição de domínio
<xs:simpleType
<xs:simpleType name=“telefone“
name=“telefone“ base
base == “xs:integer”>
“xs:integer”>
<xs:pattern
value=“\d{4}-\d{4}”/>
<xs:pattern value=“\d{4}-\d{4}”/>
</xs:simpleType>
</xs:simpleType>
Restrição de formato
Sumário de Declaração de Atributos (2 formas)
1
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>
xsd:string
xsd:integer
xsd:boolean
...
2
NCE
2003
required
default
fixed
optional
prohibited
This attribute is only
used with use="default"
and use="fixed"
<xsd:attribute name="nome" use=”como-usad" value="valor">
<xsd:simpleType>
<xsd:restriction base=”tipo-simples">
<xsd:facet value="valor"/>
…
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
29
XML Schema - Restrições ou facetas
M.L.M.Campos & Paulo Pires
„
„
„
„
„
„
„
minInclusive
maxInclusive
maxExclusive
Length
minLength
maxLength
Pattern
Aplicações Baseadas em XML
„
„
„
„
„
„
„
Enumeration
minExclusive
Precision
Scale
Encoding
Period
Duration
Exemplo - Restrição por enumeração
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:simpleType name=“diaSemana“ base = “xs:string”>
<xs:enumeration value=“Domingo”/>
<xs:enumeration value=“Segunda”/>
<xs:enumeration value=“Terça”/>
<xs:enumeration value=“Quarta”/>
<xs:enumeration value=“Quinta”/>
<xs:enumeration value=“Sexta”/>
<xs:enumeration value=“Sábado”/>
</xs:simpleType>
NCE
2003
30
Exemplo - Referenciando atributo que representa restrição
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:attribute name="Controle"> O atributo controle foi declarado
globalmente.
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DRH"/>
<xsd:enumeration value="DP"/>
</xsd:restriction>
</xsd:simpleType>
Referencia a declaração do atributo
</xsd:attribute>
Controle feita anteriormente.
...
<xsd:element name="InfoSalario">
<xsd:complexType>
<xsd:attribute ref="Controle"/>
</xsd:complexType>
</xsd:element>
...
XML Schema - Outros exemplos de restrição
Restringe o elemento CreditoMaximo a ter o valor
máximo de 1000
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
...
<xsd:element name="CreditoMaximo">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxInclusive value="1000"/>
</xsd:restriction>
Máximo permitido. E <minInclusive>
poderia ter sido usado para mínimo.
</xsd:simpleType>
</xsd:element>
...
„
Restringe o tipo Num a ter uma expressão regular
...
<xsd:simpleType name="Num">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z] {2}-\d{3}"/>
</xsd:restriction>
2 letras, um traço e 3 números.
</xsd:simpleType>
...
NCE
2003
31
Observação sobre Atributos
M.L.M.Campos & Paulo Pires
„
Aplicações Baseadas em XML
A declaração de atributos sempre
vem após as declarações de
elementos.
”aa e ab são
atributos de A"
<xsd:element name=”A">
<xsd:complexType>
<xsd:sequence>
…
</xsd:sequence>
<xsd:attribute name=”aa" …/>
<xsd:attribute name=”ab" …/>
</xsd:complexType>
</xsd:element>
Elementos vazios
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xs:element name="ref">
<xs:complexType>
<xs:attribute name="destino"
type="xs:string"
use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="imagem">
<xs:complexType>
<xs:attribute name="path" type="xs:string"
use="required"/>
<xs:attribute name="formato" type="xs:string"
use="optional"/>
</xs:complexType>
</xs:element>
NCE
2003
32
Comentários no XML Schema
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
O elemento <annotation> é usado para comentar o
esquema
„
„
Use <documentation> para comentários para usuários humanos
Use <appinfo> para comentários para programas
„
O conteúdo pode ser qualquer texto XML bem formado.
„
Os comentários não têm efeito sobre a validação do
esquema
„
<xsd:annotation>
<xsd:documentation>
The following constraint is not expressible with XML Schema:
The value of element A should be greater than the value of element B. So,
we need to use a separate tool (e.g., Schematron) to check this constraint.
We will express this constraint in the appinfo section (below).
</xsd:documentation>
<xsd:appinfo>
<assert test="A &gt; B">A should be greater than B</assert>
</xsd:appinfo>
<xsd:/annotation>
Comentários no DTD
M.L.M.Campos & Paulo Pires
„
DTD também permite comentários
„
„
Aplicações Baseadas em XML
<!-- comment goes here -->
Vantagens do comentário do XML Schema
„
„
Os comentários podem ser estruturados
Aplicando um style sheet, o esquema se torna auto-descrito
<xs:group
<xs:group name="CreditOrDebitGroup">
name="CreditOrDebitGroup">
<xs:annotation>
<xs:annotation>
<xs:appinfo>
<xs:appinfo>
if
if (currentNode.firstChild
(currentNode.firstChild !="Credit")
!="Credit")
docParser.load(debitURL);
docParser.load(debitURL);
else
else
document.write("Your
document.write("Your account
account will
will be
be credited
credited ...");
...");
</xs:appinfo>
</xs:appinfo>
</xs:annotation>
</xs:annotation>
...
...
</xs:group>
</xs:group>
NCE
2003
33
Exemplo:
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Conversão do DTD CatalogoLivros.dtd para XML
Schema
<!ELEMENT CatalogoLivros(livro)*>
<!ELEMENT livro(titulo, autor, data, isbn, editora)
<!ELEMENT titulo (#PCDATA)
<!ELEMENT autor (#PCDATA)
<!ELEMENT data (#PCDATA)
<!ELEMENT isbn (#PCDATA)
<!ELEMENT editora (#PCDATA)
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org"
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name=“editora" type="xsd:string"/>
</xsd:schema>
NCE
2003
34
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org"
M.L.M.Campos
& Paulo Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<!ELEMENT CatalogoLivros (Book)*>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<!ELEMENT livro (titulo, autor, data,
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
ISBN, editora)>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name=”editora" type="xsd:string"/>
</xsd:schema>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT editora (#PCDATA)>
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org"
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:schema>
NCE
2003
Todos XML Schemas
têm "schema" como
elemento raiz..
35
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org"
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:schema>
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org”
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:schema>
NCE
2003
Os elementos que
são usados para
criar um XML
Schema vêm do
XMLSchema
namespace
indica que os
elementos declarados
neste schema
(CatalogoLivros,
livro, titulo,
autor, data,
ISBN, editora)
vão para este
namespace
36
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org”
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:schema>
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
M.L.M.Campos & PaulotargetNamespace="http://www.publishing.org”
Pires
Aplicações Baseadas em XML
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”livro">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:schema>
NCE
2003
O namespace default é
http://www.publishing.org
que é o
targetNamespace!
Este está referenciando
uma declaração de um
elemento livro.
livro em qual
namespace? Uma vez que
não há um qualificador de
namespace, é uma
referência ao elemento livro
no namespace default, que
é o targetNamespace!
Esta é uma diretiva para
instâncias de documentos
que usam este schema:
Quaisquer elementos usados
pela instância de documento
que foi declarada por este
schema deve ser qualificada
pelo namespace especificado
pelo targetNamespace.
37
Esquema alternativo ...
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org"
elementFormDefault="qualified">
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”livro" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name=”editora" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Atributos
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
Seja o DTD
<!ELEMENT CatalogoLivros (Book)*>
<!ELEMENT livro (titulo, autor+, data, ISBN, editora)>
<!ATTLIST livro
Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED
EmEstoque (true | false) "false"
Revisor CDATA " ">
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Date (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<!ELEMENT Month (#PCDATA)>
<!ELEMENT Year (#PCDATA)>
NCE
2003
38
<xsd:element name="CatalogoLivros">
<xsd:complexType>
<xsd:sequence>
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xsd:element name=”livro" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name=”editora" type="xsd:string"/>
</xsd:sequence>
<xsd:attributeGroup ref="AtributosLivro"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="AtributosLivro">
<xsd:attribute name="Categoria" use="required">
Categoria (autobiography | non-fiction | fiction) #REQUIRED
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="autobiografia"/>
<xsd:enumeration value="nao-ficcao"/>
<xsd:enumeration value="ficcao"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
EmEstoque (true | false) "false"
<xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/>
<xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/>
Revisor CDATA " "
</xsd:attributeGroup>
Alternativamente ...
M.L.M.Campos & Paulo Pires
Aplicações Baseadas em XML
<xsd:element name=”livro" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”titulo" type="xsd:string"/>
<xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/>
<xsd:element name=”data" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="editora" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="Categoria" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="autobiografia"/>
<xsd:enumeration value="nao-ficcao"/>
<xsd:enumeration value="ficcao"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/>
<xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/>
</xsd:complexType>
</xsd:element>
NCE
2003
39
Outras propostas para esquemas XML
M.L.M.Campos & Paulo Pires
„
RELAX NG
„
Aplicações Baseadas em XML
Sendo desenvolvido na OASIS (Organization for Advancement in
Structured Information Standards);
„
Resultado da junção de 2 propostas anteriores:
„
„
„
Tutorial disponível:
„
„
„
„
2003
http://www.oasis-open.org/committees/relax-ng/tutorial.html
XML-Data Reduced (XDR)
„
NCE
TREX (Tree Regular Expressions), proposta por James Clark - líder
técnico das recomendações XML 1.0 e editor do XSLT e Xpath.
RELAX, proposta por Murata Makoto.
Iniciativa BizTalk promovida pela Microsoft;
É uma modificação da proposta XML-Data submetida ao W3C em
1998
Site: http://www.microsoft.com.
40
Download

Namespaces e Esquemas XML Namespaces