Namespaces e Esquemas XML
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Namespaces - Motivação
Problema 1:
Cada usuário ou grupo pode criar suas próprias etiquetas
(tags): mesmas tags podem ter sîgnificados diferentes
Problema 2:
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Namespaces
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”
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Declaração e uso de Namespace
<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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Múltiplos Namespaces
<?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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Outro Exemplo
<aaa >
<bbb >
<ccc />
</bbb>
<BBB >
<CCC />
</BBB>
<x111 >
<x222 />
</x111>
</aaa>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo
<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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Declararação de namespaces na raiz
<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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Namespace Default
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>
Aplicações Baseadas em XMLM.L.M.Campos & Paulo Pires
Exemplo
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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Namespaces e seu uso
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Uso de Esquema 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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Esquema XML
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:
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
DTD – Document Type Definition
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 das notações
utilizadas
Tipos de DTDs
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
DTD (
Document Type Definition
)
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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
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 - Tipos de conteúdo de um Elemento
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
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 -->
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
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 - Exemplos usando categorias de conteúdo
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
DTD -
Exemplo de definição e uso do DTD (em arquivo separado)
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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
DTD – Ocorrência de elementos
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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
CDATA:
string
ID:
ident único
IDREF/IDREFS:
referencia(s) para um ID (existente)
ENTITY/ENTITIES:
entidade(s) externa pré-def
NMTOKEN/NMTOKENS:
um nome/lista de nomes delimitados por branco
NOTATION:
um de um conj de nomes declarados no DTD
[Valor enumerado]:
um de um conj definido
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
ATTLIST: Valores default
#REQUIRED:
obrigatório
#IMPLIED:
opcional
#FIXED:
sempre fixo, aparece opcionalmente
apenas valor:
valor assumido qdo não especificado
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo de declaração de lista de atributos
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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Atributos – mais exemplos
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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Entidades: ENTITY
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
<: <
>: >
&: &
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Entidades: ENTITY
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 "© Editions titi">
]>
<toto> ©right; </toto>
produzirá
© Editions titi
observação: 00A9 é o código Unicode do caracter ©
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Entidades externas endereçadas por URL
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>
Restrição: as entidades externas devem ser
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Notações e entidades não 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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
DTD - Limitações
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)
Não tem integer, float, etc.
Não permite declarar restrições de domínio
os valores para o elemento <sexo> devem ser F ou M.
Não garante integridade referencial
Não 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
XML Schemas
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema
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
Provê integração de esquemas estruturais com tipos de
dados
Provê herança
Inclui os tipos primitivos inteiro, data e dado binário
XSD possui facilidade de documentação por meio dos
elementos <xsd:annotation> e <xsd:documentation>
que são específicos para documentação
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Uso de
namespace
No
namespace
xsd
(
http://www.w3.org/2001/XMLSchema)
estão os
elementos e tipos de dados padrões
usados para construir esquemas.
Exemplos: schema, element, complexType,
sequence, string, etc.
"schema" é o elemento raiz.
Os elementos e tipos próprios do
esquema podem ser definidos em outro
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- exemplo de XML Schema -->
<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> </xsd:complexType> </xsd:schema>
Declara o namespace xsd
arquivo exemplo1.xsd
Exemplo XML Schema
Aplicações Baseadas em XMLM.L.M.Campos & Paulo Pires
Comparando um DTD com um XML Schema
<!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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.books.org" xmlns="http://www.books.org" elementFormDefault="qualified"> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence>
<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"/> <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>
<!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> <!ELEMENT Book (Title, Author, Date,
ISBN, Publisher)> <!ELEMENT BookStore (Book)+>
Copyright © [2001]. Roger L. Costello. All Rights Reserved.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="BookStore">
<xsd:complexType> <xsd:sequence>
<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"/> <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>
Schema é
sempre a
raiz do
documento
Copyright © [2001]. Roger L. Costello. All Rights Reserved.
Os elementos e tipos de
dados são usados para
construir esquemas:
- schema
- element
- complexType
- sequence
- string
e estão descritos no
namespace
http://…/XMLSchema
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo: Um Poema
"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! (1922)
(extraído de http://www.di.uminho.pt/~jcr/
apresentação de Jósé Ramalho)
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
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
DTD
<!ELEMENT poema (titulo,autor,corpo,data) >
<!ELEMENT corpo (quadra,quadra,terno,terno) >
<!ELEMENT quadra (verso,verso,verso,verso) >
<!ELEMENT terno (verso,verso,verso) >
<!ELEMENT verso (#PCDATA |nome)* >...
<!ELEMENT poema (titulo,autor,corpo,data) >
<!ELEMENT corpo (quadra,quadra,terno,terno) >
<!ELEMENT quadra (verso,verso,verso,verso) >
<!ELEMENT terno (verso,verso,verso) >
<!ELEMENT verso (#PCDATA |nome)* >...
Especificação do tipo poema usando DTD
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Especificação do tipo poema usando XML Schema
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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" type="Tcorpo"/> </xs:sequence>
<xs:attribute name="tipo" type="xs:string" use="required" default="soneto"/> </xs:complexType>
</xs:element>
<xs:complexType name="Tcorpo"> <xs:sequence>
<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence> </xs:complexType> ... </xs:schema> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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" type="Tcorpo"/>
</xs:sequence>
<xs:attribute name="tipo" type="xs:string" use="required" default="soneto"/>
</xs:complexType> </xs:element>
<xs:complexType name="Tcorpo">
<xs:sequence>
<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>
</xs:complexType> ...
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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" type="Tcorpo"/> </xs:sequence> <xs:attribute name="tipo" type="xs:string" use=“optional" default="soneto"/> </xs:complexType> </xs:element> ... </xs:schema>
Exemplo: O Poema
<xs:complexType name="Tcorpo"> <xs:sequence><xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>
</xs:complexType>
<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>
<xs:complexType name="Tterno"> <xs:sequence>
<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>
</xs:complexType>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <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" type="Tcorpo"/> </xs:sequence> <xs:attribute name="tipo" type="xs:string" use=“optional" default="soneto"/> </xs:complexType> </xs:element> ... </xs:schema>
Exemplo: O Poema
<xs:complexType name="Tcorpo"> <xs:sequence><xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>
</xs:complexType>
<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>
<xs:complexType name="Tterno"> <xs:sequence>
<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>
</xs:complexType>
<xs:complexType name="Tverso" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="nome" type="xs:string"/> <xs:element name="lugar" type="xs:string"/> </xs:choice>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Tipos Primitivos
Tipos de dados
Descrição
primitivos
xsd:string
strings em XML
xsd:boolean
valores lógico (true, false)
xsd:decimal
números decimais
xsd:float
tipo ponto flutuante precisão simples
xsd:double
tipo ponto flutuante precisão dupla
xsd:duration
uma duração de tempo
xsd:datetime
um instante de tempo específico
xsd:time
um instante de tempo que ocorre todo dia
xsd:date
uma data do calendário
xsd:gYearMonth
mês e ano gregoriano específicos
xsd:gYear
ano gregoriano específico
xsd:gMonthDay
uma data gregoriana que ocorre cada ano
xsd:gDay
um dia gregoriano que ocorre cada mês
xsd:gMonth
um mês gregoriano que ocorre todo ano
xsd:hexBinary
dado binário em base hexa
xsd:base64Binary
dado binário em base 64
xsd:anyURI
uma URI (
Uniform Resource Identifier
)
xsd:Qname
um nome XML qualificado
xsd:NOTATION
tipo de atributo NOTATION do XML 1.0
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Tipos Primitivos
Tipos de dados
Descrição
primitivos
xsd:string
strings em XML
xsd:boolean
valores lógico (true, false)
xsd:decimal
números decimais
xsd:float
tipo ponto flutuante precisão simples
xsd:double
tipo ponto flutuante precisão dupla
xsd:duration
uma duração de tempo
xsd:datetime
um instante de tempo específico
xsd:time
um instante de tempo que ocorre todo dia
xsd:date
uma data do calendário
xsd:gYearMonth
mês e ano gregoriano específicos
xsd:gYear
ano gregoriano específico
xsd:gMonthDay
uma data gregoriana que ocorre cada ano
xsd:gDay
um dia gregoriano que ocorre cada mês
xsd:gMonth
um mês gregoriano que ocorre todo ano
xsd:hexBinary
dado binário em base hexa
xsd:base64Binary
dado binário em base 64
xsd:anyURI
uma URI (
Uniform Resource Identifier
)
xsd:Qname
um nome XML qualificado
xsd:NOTATION
tipo de atributo NOTATION do XML 1.0
<xs:element name="nome" type="xs:string"/> <xs:element name="lugar" type="xs:string"/>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Tipos Derivados
Derivam dos tipos primitivos
integer (decimal), long (integer), ...
Por restrição
Por extensão
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Simple and Complex Types
Os tipos de dados em XML Schema:
“simple” ou “complex”.
Tipo “simple” é um dos tipos básicos:
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”:
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.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo: complex Type
<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)
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Escopo dos elementos
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo - Elementos globais
<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> Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo - Elementos globais
<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> <xs:element name=“quadra”> <xs:complexType> <xs:sequence> <xs:element ref="verso"/> <xs:element ref="verso"/> <xs:element ref="verso"/> <xs:element ref="verso"/> </xs:sequence> </xs:complexType> </xs:element> <?xml version=“1.0” encoding=“iso-8859-1”?> <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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema – Reutilização por Referência
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>
...
Aplicações Baseadas em XMLM.L.M.Campos & Paulo Pires
XML Schema - Cardinalidade
<
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Valores para elementos
<
xs:element
name
=“
"
type
=“
xs:string
“
default
=“
jcr@di.uminho.pt
"/>
Valor por omissão
<
xs:element
name
=“
supervisor
"
type
=“
xs:string
“
fixed
=“
José Carlos Ramalho
"/>
Valor fixo
Valor fixo – significa que o valor informado deve ser
igual ao valor fixed ou não deve ser informado.
Caso contrário, o documento não será válido.
Valor fixo – significa que o valor informado deve ser
igual ao valor fixed ou não deve ser informado.
Caso contrário, o documento não será válido.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Atributos
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)
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Restrição de tipos primitivos
<xs:simpleType name=“dia“ base = “xs:integer”>
<xs:minInclusive value=“1”/>
<xs:maxInclusive value=“31”/>
</xs:simpleType>
<
xs:simpleType
name
=“
dia
“ base = “xs:integer”>
<
xs:minInclusive value=“1”/
>
<
xs:maxInclusive value=“31”/
>
</
xs:simpleType
>
<xs:simpleType name=“telefone“ base = “xs:integer”>
<xs:pattern value=“\d{4}-\d{4}”/>
</xs:simpleType>
<
xs:simpleType
name
=“
telefone
“ base = “xs:integer”>
<
xs:pattern value=“\d{4}-\d{4}”/
>
</
xs:simpleType
>
Restrição de domínio
Restrição de formato
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Sumário de Declaração de Atributos (2 formas)
<xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>
required default fixed optional prohibited
This attribute is only used with use="default" and use="fixed" xsd:string xsd:integer xsd:boolean ...
1
2
<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>Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Restrições ou facetas
minInclusive
maxInclusive
maxExclusive
Length
minLength
maxLength
Pattern
Enumeration
minExclusive
Precision
Scale
Encoding
Period
Duration
Aplicações Baseadas em XMLM.L.M.Campos & Paulo Pires
Exemplo - Restrição por enumeração
<
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
>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo - Referenciando atributo que representa restrição
<?xml version='1.0'?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:attribute name="Controle">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DRH"/>
<xsd:enumeration value="DP"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
...
<xsd:element name="InfoSalario">
<xsd:complexType>
<xsd:attribute ref="Controle"/>
</xsd:complexType>
</xsd:element>
...
Referencia a declaração do atributo
Controle feita anteriormente.
O atributo controle foi declarado globalmente.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
XML Schema - Outros exemplos de restrição
Restringe o elemento CreditoMaximo a ter o valor
máximo de 1000
...
<xsd:element name="CreditoMaximo">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxInclusive value="1000"/>
</xsd:restriction>
</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>
</xsd:simpleType>
...Máximo permitido. E <minInclusive> poderia ter sido usado para mínimo.
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Observação sobre Atributos
A declaração de atributos sempre
vem após as declarações de
elementos.
<xsd:element name=”A">
<xsd:complexType>
<xsd:sequence>
…
</xsd:sequence>
<xsd:attribute name=”aa" …/>
<xsd:attribute name=”ab" …/>
</xsd:complexType>
</xsd:element>
”aa e ab são
atributos de A"
Aplicações Baseadas em XMLM.L.M.Campos & Paulo Pires
Elementos vazios
<
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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Comentários no XML Schema
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 > B">A should be greater than B</assert>
</xsd:appinfo>
<xsd:/annotation>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Comentários no DTD
DTD também permite comentários
<!-- 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 name="CreditOrDebitGroup"> <xs:annotation> <xs:appinfo> if (currentNode.firstChild !="Credit") docParser.load(debitURL); else
document.write("Your account will be credited ..."); </xs:appinfo> </xs:annotation> ... </xs:group> <xs:group name="CreditOrDebitGroup"> <xs:annotation> <xs:appinfo> if (currentNode.firstChild !="Credit") docParser.load(debitURL); else
document.write("Your account will be credited ..."); </xs:appinfo>
</xs:annotation> ...
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Exemplo:
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)
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
<!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT editora (#PCDATA)> <!ELEMENT livro (titulo, autor, data,
ISBN, editora)> <!ELEMENT CatalogoLivros (Book)*>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
Todos XML Schemas têm "schema" como elemento raiz..
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
Os elementos que são usados para criar um XML Schema vêm do XMLSchema namespace
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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> indica que os elementos declarados neste schema (CatalogoLivros, livro, titulo, autor, data, ISBN, editora) vão para este namespace
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
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! O namespace default é http://www.publishing.org que é o targetNamespace! Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<?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 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>
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
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Esquema alternativo ...
<?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> Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
Atributos
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)>
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<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" 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">
<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:attributeGroup>
EmEstoque (true | false) "false"
Revisor CDATA " " Categoria (autobiography | non-fiction | fiction) #REQUIRED
Aplicações Baseadas em XML
M.L.M.Campos & Paulo Pires
<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>