SlideShare una empresa de Scribd logo
1 de 114
Descargar para leer sin conexión
1
www.argonavis.com.br
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Objetivos
●  Este curso prático tem como finalidade
explorar o XML Schema para especificar
aplicações do XML e validar documentos XML
que serão usados pelas aplicações
●  São abordados a maior parte dos recursos do
XML Schema
3
www.argonavis.com.br
Programa
DIA 1
●  1 Introdução
●  2 Composição e instâncias
●  3 Declaração de elementos e atributos
DIA 2
●  4 Tipos simples, uniões e listas
●  5 Tipos complexos e grupos
●  6 Extensão, restrição, substituição
●  7 Chaves e referências cruzadas
DIA 3*
●  8 Programação com XML (opcional)
* verifique se está incluso no seu programa
4
www.argonavis.com.br
Ferramentas
●  É necessário ter uma ferramenta que possa ser usada
para editar XML Schema e validar instâncias
●  Há várias opções
●  Eclipse 3.1 e Netbeans 4 (multiplataforma, gratuitos)
●  JEdit 4.2 com plugins (multiplataforma, gratuito)
●  oXygen XML Editor 6 (multiplataforma, ~50USD, 30 dias)
●  Um editor de texto qualquer pode ser suficiente para
editar esquemas, mas não para este curso
●  É fundamental ter uma ferramenta capaz de validar XML contra
um esquema
●  Não será possível saber se um exercício foi ou não resolvido se
não for possível validar
5
www.argonavis.com.br
Formato do curso
●  Material didático (ZIP disponibilizado na rede)
●  Slides
●  Apostila com material de referência (30 páginas)
●  Material sobre expressões regulares
●  Material extra com revisão de XML básico
●  Exemplos e exercícios para resolver
●  Mais de 50% deste curso é dedicado a exercícios
práticos
●  É essencial que os exercícios sejam feitos em sala de
aula ao longo do curso (não deixe tudo para o final)
●  Haverá uma avaliação no final com testes de múltipla
escolha (similares aos da certificação da IBM)
6
www.argonavis.com.br
Módulo opcional
●  O módulo 8 trata de mapeamento Java-XML
●  Trata-se de um módulo prático que tem como pré-
requisito a linguagem Java
●  Pacotes utilizados
●  JAXB 2.0 EA2 (da distribuição Java, julho/2005)
●  Apache XML Beans 2.0
●  Através dos pacotes acima, pode-se construir aplicações
onde classes são mapeadas a esquemas, e objetos são
mapeados a documentos XML
●  A criação de um XML causa a criação de um objeto e vice-versa
●  Ferramentas usadas: Eclipse / NetBeans
7
www.argonavis.com.br
Referências
●  Fontes usadas na elaboração deste
treinamento
●  Priscila Walmsley. Definitive XML Schema.
Prentice-Hall, 2002
●  Especificações do W3C, XML Schema 1.0, níveis 0,
1 e 2. http://www.w3.org/XML/Schema
1
www.argonavis.com.br
introdução
principais componentes
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
O Que é um XML Schema?
●  Esquema = plano, projeto, estrutura,
diagrama, especificação
●  Em XML é um documento que descreve uma
classe de documentos XML
●  DTD, XML Schema, etc.
●  XML Schema é documento XML usado para
especificar documentos XML
●  XSDL – XML Schema Definition Language
●  Namespace:
http://www.w3.org/2001/XMLSchema
3
www.argonavis.com.br
Para que serve um XML Schema
●  Verificar que uma instância (documento XML)
é válido em relação a um conjunto de regras
●  Estrutura de elementos e atributos,
●  Ordem e obrigatoriedade dos elementos,
●  Tipos de dados que podem ser usados em atributos
e elementos,
●  Faixas de valores válidas,
●  Padrão que um texto precisa obeceder, etc.
●  Documentar o sistema
●  Fornecer meta-informação e defaults
●  Ser um protocolo de comunicação
4
www.argonavis.com.br
O que é um Esquema XML?
  O esquema representa uma classe
  Os documentos são instâncias
Esquema (universo de
documentos válidos)
Documentos que aderem à
especificação (válidos)
Documento
fora da
especificação
"  Como definir esquemas:
"  DTD - Document Type Definition
"  W3C XML Schema
5
www.argonavis.com.br
DTD vs. XML Schema
●  Um esquema é essencial para que haja
comunicação usando XML
●  Pode ser estabelecido "informalmente" (via software)
●  Uso formal permite validação usando ferramentas
genéricas de manipulação de XML
●  Soluções padrão do W3C
DTD XML Schema
<!ELEMENT contato
(nome, email, telefone)>
<!ATTLIST contato
codigo NMTOKEN #REQUIRED>
<xsd:schema
xmlns:xsd=".../XMLSchema">
<xsd:element name="contato">
<xsd:complexType>
<xsd:attribute name="codigo"
use="required">
•  É XML, porém mais complexo
•  Suporta namespaces
•  Permite definição de tipos
•  Simples mas não é XML
•  Não suporta namespaces
•  Limitado quando a tipos de dados
6
www.argonavis.com.br
Exemplo de XML Schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="astro" type="astroType" />
<xs:element name="imagem" type="imagemType"/>
<xs:attribute name="href" type="xs:anyURI"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="nome" type="xs:string"/>
<xs:attribute name="diametrokm" type="xs:decimal"/>
<xs:complexType name="imagemType">
<xs:attribute ref="href" use="required"/>
</xs:complexType>
<xs:complexType name="astroType">
<xs:sequence>
<xs:element ref="imagem" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
<xs:attribute ref="nome" use="required"/>
<xs:attribute ref="diametrokm"/>
</xs:complexType>
</xs:schema>
Definição de
tipos de dados
Elementos
Atributos
7
www.argonavis.com.br
Um DTD equivalente
Atributos
Elementos<!ELEMENT astro (imagem*) >
<!ELEMENT imagem EMPTY >
<!ATTLIST imagem href CDATA #REQUIRED >
<!ATTLIST astro id ID #REQUIRED >
<!ATTLIST astro nome CDATA #REQUIRED >
<!ATTLIST astro diametrokm NMTOKEN #IMPLIED >
Tipos de dados simples
(somente para atributos)
Modelo de conteúdo
(tipo de dados complexo)
Atributo sempre
associado a elemento
<astro id="p5" nome="Jupiter">
<imagem href="jup31.jpg" />
<imagem href="jup32.jpg" />
</astro>
Exemplo de documento válido
em relação a este DTD
8
www.argonavis.com.br
Outro exemplo
●  Considere esta instância XML
<oferta(validade="2010207222">(
((((<codigo(numero="4599"(tipo="T"/>(
((((<preco>15.2</preco>(
((((<itens>14</itens>(
</oferta>(
9
www.argonavis.com.br
Um DTD que valida a instância
<!ELEMENT(oferta'(codigo,preco,itens)>(
<!ATTLIST(oferta(validade(NMTOKEN(#REQUIRED>(
<!ELEMENT(codigo'EMPTY>(
<!ATTLIST(codigo(numero(CDATA(#REQUIRED(
(((((((((((((((((tipo((T(|(P(|(U)(#REQUIRED>(
<!ELEMENT(preco'(#PCDATA)>(
<!ELEMENT(itens'(NMTOKEN)>(
10
www.argonavis.com.br
Um XML Schema equivalente
<?xml(version="1.0"(encoding="UTF28"?>(
<xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema"(elementFormDefault="qualified">(
((((<xs:element(name="oferta">(
((((((((<xs:complexType>(
((((((((((((<xs:sequence>(
((((((((((((((((<xs:element(ref="codigo"/>(
((((((((((((((((<xs:element(ref="preco"/>(
((((((((((((((((<xs:element(ref="itens"/>(
((((((((((((</xs:sequence>(
((((((((((((<xs:attribute(name="validade"(use="required"(type="xs:NMTOKEN"/>(
((((((((</xs:complexType>(
((((</xs:element>(
((((<xs:element(name="codigo">(
((((((((<xs:complexType>(
((((((((((((<xs:attribute(name="numero"(use="required"/>(
((((((((((((<xs:attribute(name="tipo"(use="required">(
((((((((((((((((<xs:simpleType>(
((((((((((((((((((((<xs:restriction(base="xs:NMTOKEN">(
((((((((((((((((((((((((<xs:enumeration(value="T"(/>(
((((((((((((((((((((((((<xs:enumeration(value="P"(/>(
((((((((((((((((((((((((<xs:enumeration(value="U"(/>(
((((((((((((((((((((</xs:restriction>(
((((((((((((((((</xs:simpleType>(
((((((((((((</xs:attribute>(
((((((((</xs:complexType>(
((((</xs:element>(
((((<xs:element(name="preco"(type="xs:string"/>(
((((<xs:element(name="itens"(type="xs:string"/>(
</xs:schema>(
11
www.argonavis.com.br
Um XML Schema melhor
<xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema"(…(>(
((((<xs:element(name="oferta">(
((((((((<xs:complexType>(
((((((((((((<xs:sequence>(…(</xs:sequence>(
((((((((((((<xs:attribute(name="validade"(use="required"(type="xs:date"/>(
((((((((</xs:complexType>(
((((</xs:element>(
((((<xs:element(name="codigo">(…(</xs:element>(
((((<xs:element(name="preco">(
((((((((<xs:simpleType>(
((((((((((((<xs:restriction(base="xs:decimal">(
''''''''''''''''<xs:fractionDigits'value="2"'/>(
((((((((((((</xs:restriction>(
((((((((</xs:simpleType>(
((((</xs:element>(
((((<xs:element(name="itens">(
((((((((<xs:simpleType>(
((((((((((((<xs:restriction(base="xs:integer">(
''''''''''''''''<xs:minInclusive'value="1"/>'
''''''''''''''''<xs:maxInclusive'value="20"/>(
((((((((((((</xs:restriction>(
((((((((</xs:simpleType>(
((((</xs:element>(
</xs:schema>(
12
www.argonavis.com.br
XML Schema
●  Mais tipos, mais controle
●  XML Schema oferece vários tipos de dados para
representar strings, números
●  Tipos podem ser usados para validar elementos e
atributos
●  Tipos novos podem ser criados a partir dos tipos
primitivos, via extensão e restrição
●  Namespace e convenções
●  Extensão comum usada em arquivos: *.xsd
●  Prefixos mais usados para namespace: xs: ou xsd:
13
www.argonavis.com.br
Principais elementos
●  Elementos típicos em um esquema simples
●  <schema> - elemento raiz
●  <element>
●  <attribute>
●  <simpleType> ou <complexType>
●  <simpleContent> ou <complexContent>
●  <restriction> ou <extension>
●  <enumeration>, <union>, <list>
●  <sequence>, <choice>, <all>
14
www.argonavis.com.br
Componentes declarados e definidos
●  Componentes são
●  Atributos
●  Elementos
●  Tipos
●  Notações, etc.
●  Componentes declarados no XML Schema são
usados nas instâncias
●  Elementos, atributos, notações
●  Componentes definidos no XML Schema são
usados internamente
●  Tipos de dados, grupos de componentes, ids
15
www.argonavis.com.br
Componentes globais e locais
●  Componentes globais
●  São definidos/declarados no primeiro nível do XML
Schema (filhos diretos de <xs:schema>)
●  Têm nome (identificador) através do qual podem
ser usados ou reusados
●  Componentes locais
●  São definidos/declarados dentro do escopo de
outro componente
●  Não têm nome pois não podem ser reusados
16
www.argonavis.com.br
Componentes locais e globais
●  O componente <xs:complexType> do esquema abaixo é
global; pode ser referenciado pelo nome ofertaType
●  É referenciado na declaração de dois elementos
●  O componente <xs:complexType> deste outro esquema
abaixo é local à declaração do elemento oferta e não
pode ser reusado
<xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema">(
((((<xs:element(name="oferta"(type="ofertaType"(/>(
((((<xs:element(name="promocaoRelampago"(type="ofertaType"(/>(
((((<xs:complexType'name="ofertaType">...</xs:complexType>(
((((…(
</xs:schema>(
<xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema">(
((((<xs:element(name="oferta">(
((((((((<xs:complexType>...</xs:complexType>(
((((</xs:element>(
((((...(
17
www.argonavis.com.br
Tipos
●  O tipo define a estrutura dos dados que pode
ser usada na declaração de um elemento ou
atributo.
●  Pode ser local ou global
●  Pode ser simples ou complexo
●  Se for simples, pode ser nativo ou derivado
●  Se for complexo, pode ter conteúdo simples,
conteúdo complexo, conteúdo misto ou vazio
18
www.argonavis.com.br
Tipos simples e complexos
●  Tipos simples
●  Podem ter conteúdo de texto apenas
●  Não podem conter estrutura de elementos e atributos
●  Podem ser usados na declaração de atributos ou elementos
●  Tipos complexos
●  Podem ter elementos e atributos como conteúdo
●  Podem ser usados na declaração de elementos
●  Não podem ser usados na declaração de atributos
●  Tipos novos podem ser derivados a partir de tipos
existentes de duas formas
●  Através de restrição (válida para tipos simples e complexos)
●  Através de extensão (apenas para tipos complexos)
19
www.argonavis.com.br
<xs:simpleType>
●  Tipo que apenas pode conter texto
●  É possível criar novos tipos a partir de
derivação dos tipos existentes (globalmente
acessíveis)
<xs:simpleType(name="astroID">(
((<xs:restriction(base="xs:ID">(
((((<xs:pattern(value="cd.*"/>(
((</xs:restriction>(
</xs:simpleType>(
Expressão regular
20
www.argonavis.com.br
Tipos simples nativos do XML Schema
anySimpleType(
gDay(
string(
normalizedString(
token(
language( Name( NMTOKEN(
NCName( NMTOKENS(
ID( IDREF( ENTITY(
IDREFS( ENTITIES(
decimal(
integer(nonPositiveInteger( nonNegativeInteger(
negativeInteger( positiveInteger(long(
int(
short(
byte(
unsignedLong(
unsignedInt(
unsignedShort(
unsignedByte(
boolean(
base64binary( hexbinary(
float(
double( anyURI( QName(NOTATION(
duration( gYearMonth( gYear( gMonth(dateTime( time( date(
21
www.argonavis.com.br
Exemplo: derivação de um tipo simples
●  Tipo base: xs:NMTOKEN
●  Tipo derivado: isbn
●  Faceta de comprimento:
exatamente 10 caracteres
●  Faceta de formato:
descrito por expressão regular
<xs:simpleType(name="isbn">(
((<xs:restriction(base="xs:NMTOKEN">(
((((<xs:length(value="10"/>((
((((<xs:pattern(value="[029]{9}[029X]"/>(
((</xs:restriction>(
</xs:simpleType>(
22
www.argonavis.com.br
<xs:complexType>
●  Tipo que pode conter outros elementos ou
atributos
<xs:complexType(name="imagemType">(
((<xs:attribute(name="href"(type="xs:anyURI"/>(
</xs:complexType>(
<xs:complexType(name="astroType">(
((<xs:sequence>(
((((<xs:element(ref="imagem"(minOccurs="0"/>(
((((<xs:element(name="satelite"(type="sateliteType"((
((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>(
((</xs:sequence>(
((<xs:attribute(name="id"(type="astroID"(use="required"/>(
((<xs:attribute(name="nome"(type="xs:token"(/>(
((<xs:attribute(name="diametrokm"(type="xs:decimal"/>(
</xs:complexType>(
23
www.argonavis.com.br
O que representam os tipos
●  Tipos simples representam tipos de dados
básicos como texto, números, tokens, booleanos
●  Fazem parte do namespace do XML Schema
(requerem prefixo associado ao identificador do
namespace), por exemplo: xs:int, xs:string
●  Tipos complexos representam estruturas do
documento como entidades, atributos, etc.
●  Podem fazer parte do namespace default do próprio
documento (e não necessitar de prefixo) se definidos
localmente
24
www.argonavis.com.br
Fundamentos: Modelos de conteúdo
●  Definem a estrutura de tipos complexos
●  Modelos de conteúdo podem ser simples ou
complexos
●  São simples quando elemento é vazio ou
quando contém apenas texto
●  Modelo de conteúdo simples pode conter atributos
●  São complexos quando elemento contém
outros elementos
●  Elementos podem ser definidos localmente
●  Elementos globais podem ser reutilizados
25
www.argonavis.com.br
<xs:simpleContent>
●  Modelo de conteúdo simples
●  Determina o tipo dos dados contido em um
elemento que pode possuir atributos
<xs:complexType(name="imagemType">(
((<xs:simpleContent>(
((((<xs:restriction(base="xs:string">(
((((((<xs:attribute(name="href"(
((((((((((((((((((((type="xs:anyURI"/>(
((((</xs:restriction>(
((</xs:simpleContent>(
</xs:complexType>(
26
www.argonavis.com.br
<xs:complexContent>
●  Modelo de conteúdo complexo
●  Determina a organização dos elementos filho
(se uma lista de opções, uma seqüência, etc.
<xs:complexType(name="estrelaType">(
(((<xs:complexContent>(
((((((<xs:extension(base="astroType">(
(((((((((<xs:sequence>(
((((((((((((<xs:element(name="satelite"(
((((((((((((((((((((((((type="sateliteType"(
((((((((((((((((((((((((minOccurs="0"(
((((((((((((((((((((((((maxOccurs="unbounded"/>(
(((((((((</xs:sequence>(
(((((((((<xs:attribute(name="cor"(type="xs:token"/>(
((((((</xs:extension>(
(((</xs:complexContent>(
</xs:complexType>(
27
www.argonavis.com.br
<xs:sequence>
●  Conteúdo de tipos complexos
●  Equivalente ao conteúdo (a, b, c) em DTD
<xs:element(name="sistemaEstelar">(
((<xs:complexType>(
((((<xs:sequence>(
((((((<xs:element(name="centro"(type="centroType"/>(
((((((<xs:element(name="orbita"(type="orbitaType"(
((((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>(
((((((<xs:element(ref="cometa"(minOccurs="0"((
((((((((((((((((((maxOccurs="unbounded"/>(
((((</xs:sequence>(
((</xs:complexType>(
</xs:element>(
Equivalente, em DTD, a (centro, orbita*, cometa*)
28
www.argonavis.com.br
<xs:choice>
●  Conteúdo de tipos complexos
●  Equivalente ao conteúdo (a | b | c) no DTD
<xs:complexType(name="orbitaType">(
((<xs:choice>(
((((<xs:element(name="estrela"(type="estrelaType"/>(
((((<xs:element(name="planeta"(type="sateliteType"/>(
((((<xs:element(name="asteroide"(type="sateliteType"((
((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>(
((</xs:choice>(
((<xs:attribute(name="raioMedUA"(type="xs:decimal"/>(
</xs:complexType>(
Equivalente a (estrela | planeta | asteroide*)
1
www.argonavis.com.br
definição e composição de
esquemas
instâncias
documentação
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Cabeçalho e namespace
●  Todas as declarações do XML Schema estão contidas em
um elemento <xs:schema> que deve definir:
●  Um atributo xmlns, declarando o namespace do XML Schema,
geralmente associando-o a um prefixo (xs ou xsd).
●  Um atributo targetNamespace*, contendo uma URI que
identifique o namespace da linguagem-alvo que o XML Schema
está descrevendo
●  Um segundo atributo xmlns*, declarando o namespace da
linguagem-alvo, possivelmente associando-o a um prefixo.
<xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"*
****targetNamespace="http://www.empresa.com/pontodevenda"**
****xmlns="http://www.empresa.com/pontodevenda">*
Se a linguagem não usar namespaces:
<xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema”>*
3
www.argonavis.com.br
Composição de esquemas
●  <xs:include> insere componentes de esquema do mesmo
namespace localizados em outros arquivos
●  Atributo schemaLocation informa a URI onde se encontra o
arquivo que será incluído
*<xs:include2schemaLocation="esquema.xsd"/>
●  <xs:import> importa componentes de namespaces
diferentes
●  Atributo namespace é obrigatório
●  Atributo schemaLocation é opcional
*<xs:import2namespace="http://ns.com"*schemaLocation="esquema.xsd"/>
●  <xs:redefine> permite redefinir componentes
4
www.argonavis.com.br
<xs:include>
<xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"**
****targetNamespace="http://www.empresa.com/pontodevenda"*
****xmlns="http://www.empresa.com/pontodevenda">*
2222<xs:include2schemaLocation="ofertaTypesComplex.xsd"/>2
2222<xs:include2schemaLocation="ofertaTypesSimple.xsd"/>*
****<xs:element*name="oferta"*type="ofertaType"*/>*
****<xs:element*name="codigo"*type="codigoType"/>*
****<xs:element*name="preco"*type="precoType"/>*
****<xs:element*name="itens"*type="itensType"/>*
</xs:schema>*
<xs:complexType*name="ofertaType">*
…*
ofertaTypesComplex.xsd*
<xs:simpleType*name="precoType">*
…*
ofertaTypesSimple.xsd*
5
www.argonavis.com.br
<xs:import>
<xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"**
****targetNamespace="http://www.empresa.com/pontodevenda"*
****xmlns="http://www.empresa.com/pontodevenda"*
****xmlns:pdvt="http://www.empresa.com/pontodevenda/tipos">*
****<xs:import**
*******namespace="http://www.empresa.com/pontodevenda/tipos"**
*******schemaLocation="ofertaTypesAll.xsd"/>*
****<xs:element*name="oferta"*type="pdvt:ofertaType"*/>*
****<xs:element*name="codigo"*type="pdvt:codigoType"/>*
****<xs:element*name="preco"**type="pdvt:precoType"/>*
****<xs:element*name="itens"**type="pdvt:itensType"/>*
</xs:schema>*
<xs:schema***
****targetNamespace="http://www.empresa.com/pontodevenda/tipos"*...*>*
6
www.argonavis.com.br
<xs:import> : o outro lado
<xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"**
****targetNamespace="http://www.empresa.com/pontodevenda/tipos"*
****xmlns="http://www.empresa.com/pontodevenda/tipos"*
****xmlns:pdv="http://www.empresa.com/pontodevenda">*
****<xs:import*namespace="http://www.empresa.com/pontodevenda"**
********schemaLocation="ofertaElementsAll.xsd"></xs:import>*
****<xs:complexType*name="ofertaType">*
********<xs:sequence>*
************<xs:element*ref="pdv:codigo"/>*
************<xs:element*ref="pdv:preco"/>*
************<xs:element*ref="pdv:itens"/>*
********</xs:sequence>*
********<xs:attribute*name="validade"*use="required"*type="xs:NMTOKEN"/>*
****</xs:complexType>*
****<xs:complexType*name="codigoType">...</xs:complexType>*
****<xs:simpleType*name="precoType">...</xs:simpleType>*
****<xs:simpleType*name="itemType">...</xs:simpleType>*
</xs:schema>*
<xs:schema***
****targetNamespace="http://www.empresa.com/pontodevenda"*...*>*
7
www.argonavis.com.br
Defaults
●  <xs:schema> contém atributos que definem
defaults para tipos e elementos.
●  attributeFormDefault="qualified|unqualified"
●  elementFormDefault="qualified|unqualified"
●  blockDefault="#all|substitution|extension|
restriction"
●  finalDefault="#all|extension|restriction|list|union"
●  Determinam comportamento default em
declarações e definição de componentes
●  (Mais sobre isto adiante)
8
www.argonavis.com.br
Instâncias associadas a um XML Schema
●  Uma instância pode ser formalmente vinculada
a uma instância através de atributos globais
●  Namespace XML Schema Instance:
http://www.w3.org/2001/XMLSchema-instance
●  Este namespace deve ser atribuído a prefixo
para que se possa usar seus 4 atributos:
●  schemaLocation – para vincular um ou mais XML
Schemas à instância
●  noNamespaceSchemaLocation – para vincular a um
XML Schemas que não usa namespace
●  nil e type – usados em elementos e atributos
9
www.argonavis.com.br
Exemplos com namespace
<oferta*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"*
**xsi:schemaLocation="http://www.empresa.com/pontodevenda*
**********************ofertaElementsAllImport.xsd"*
****xmlns="http://www.empresa.com/pontodevenda"**
****validade="2010Q07Q22">*
****<codigo*numero="4599"*tipo="T"/>*
****<preco>15.2</preco>*
****<itens>14</itens>*
</oferta>*
<pdv:oferta*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"*
****xsi:schemaLocation="http://www.empresa.com/pontodevenda*
************************ofertaElementsAllImport.xsd"*
****xmlns:pdv="http://www.empresa.com/pontodevenda"**
****validade="2010Q07Q22">*
****<pdv:codigo*numero="4599"*tipo="T"/>*
****<pdv:preco>15.2</pdv:preco>*
****<pdv:itens>14</pdv:itens>*
</pdv:oferta>*
10
www.argonavis.com.br
Múltiplos namespaces
●  Schemas compostos requerem a declaração de
múltiplos namespaces na instância
●  Esquema principal
●  Instância
<xs:schema**
****targetNamespace="http://cosmos.org.br"**
****xmlns:cm="http://cosmos.org.br/com"**
****xmlns:st="http://cosmos.org.br/sat"**
****xmlns="http://cosmos.org.br"**
****xmlns:xs="http://www.w3.org/2001/XMLSchema">*
<se:sistemaEstelar*xmlns:se="http://cosmos.org.br"*
***xmlns:sat="http://cosmos.org.br/sat"*
***xmlns:cmt="http://cosmos.org.br/com"*
***xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"**
***xsi:schemaLocation="http://cosmos.org.br*******sistema.xsd*
***********************http://cosmos.org.br/sat***satelites.xsd*
***********************http://cosmos.org.br/com***cometas.xsd">*
11
www.argonavis.com.br
Exemplo com múltiplos namespaces
<html*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"*
****xsi:schemaLocation="http://www.w3.org/1999/xhtml22xhtml.xsd*
******************http://www.empresa.com/pontodevenda2oferta.xsd"*
****xmlns="http://www.w3.org/1999/xhtml"****
****xmlns:pdv="http://www.empresa.com/pontodevenda">*
****<head>...</head>*
****<body><div*class="oferta”>*
********<pdv:oferta*validade="2010Q07Q22">*
************<pdv:codigo*numero="4599"*tipo="T"/>*
************<pdv:preco>15.2</pdv:preco>*
************<pdv:itens>14</pdv:itens>*
********</pdv:oferta>*
****</div></body>*
</html>*
<html*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"*
****xsi:schemaLocation="http://www.w3.org/1999/xhtml22xhtml.xsd*
******************http://www.empresa.com/pontodevenda2oferta.xsd"*
****xmlns="http://www.w3.org/1999/xhtml"*>*
****<head>...</head><body><div*class="oferta”>*
********<oferta*validade="2010Q07Q22"*xmlns="http://www.empresa.com/pontodevenda">*
************<codigo*numero="4599"*tipo="T"/>*
************<preco>15.2</preco>*
************<itens>14</itens>*
********</oferta>*
****</div></body>*
</html>*
12
www.argonavis.com.br
Exemplo sem namespace
<oferta*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"*
****xsi:noNamespaceSchemaLocation="ofertaElementsNoNS.xsd"**
****validade="2010Q07Q22">*
****<codigo*numero="4599"*tipo="T"/>*
****<preco>15.2</preco>*
****<itens>14</itens>*
</oferta>*
13
www.argonavis.com.br
Anotações
●  <xs:annotation>
●  Mecanismo de documentação e extensão do XML
Schema
●  Pode ser usado em qualquer elemento do XML
Schema
●  Dois sub-elementos: <xs:documentation> e
<xs:appinfo>
●  <xs:documentation>
●  Para documentação que será lida por humanos
●  <xs:appinfo>
●  Ponto de extensão para informações de
processamento que serão lidas por máquina
14
www.argonavis.com.br
Anotações
<xs:complexType*name="ofertaType">*
2222<xs:annotation>2
22222222<xs:documentation2xml:lang="ptFBR">2
222222222222Os2codigos2existentes2podem2ser2obtidos22
222222222222na2tabela2PROD_CODIGOS.2
22222222</xs:documentation>2
22222222<xs:appinfo>2
222222222222SELECT2CODIGOS2FROM2PROD_CODIGOS22
222222222222222222222222222WHERE2STATUS2&lt;22;2
22222222</xs:appinfo>2
2222</xs:annotation>*
****<xs:sequence>*
********<xs:element*ref="codigo"/>*
********<xs:element*ref="preco"/>*
********<xs:element*ref="itens"/>*
****</xs:sequence>*
****<xs:attribute*name="validade"**
******************use="required"*type="xs:NMTOKEN"/>*
</xs:complexType>*
1
www.argonavis.com.br
elementos e atributos
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Elementos
●  Declarados através de <xs:element>
●  Declaração (global ou local) deve ter atributo
name
●  Pode conter elemento <xs:simpleType> ou
<xs:complexType>, ou atributo type com
referência para tipo nativo ou global
●  Referência a um elemento global através de
atributo ref, em definições de tipos complexos
3
www.argonavis.com.br
<xs:element>
●  Define um elemento
●  Deve estar associado a um tipo de dados
ou
<xs:complexType-name="cometaType">-
--<xs:attribute-name="id"-type="xs:ID"-use="required"/>-
--<xs:attribute-name="nome"-type="xs:string"-use="required"/>-
--<xs:attribute-name="planetas"-type="xs:IDREFS"/>-
</xs:complexType>-
<xs:element-name="cometa"-type="cometaType"-/>-
<xs:element-name="cometa">-
--<xs:complexType>-
----<xs:attribute-name="id"-type="xs:ID"-use="required"/>-
----<xs:attribute-name="nome"-type="xs:string"-use="required"/>-
----<xs:attribute-name="planetas"-type="xs:IDREFS"/>-
--</xs:complexType>-
</xs:element>-
4
www.argonavis.com.br
Exemplo <xs:element>
<xs:schema-...->-
----<xs:element-name="oferta"-type="ofertaType"-/>-
----<xs:element-name="preco">-
--------<xs:simpleType>-
------------<xs:restriction-base="xs:decimal">-
----------------<xs:fractionDigits-value="2"-/>-
------------</xs:restriction>-
--------</xs:simpleType>-
----</xs:element>-
----<xs:complexType-name="ofertaType">-
--------<xs:sequence>-
------------<xs:element-name="codigo"-type="codigoType"/>-
------------<xs:element-ref="preco"/>-
------------<xs:element-name="itens">-
----------------<xs:simpleType>-...-</xs:simpleType>-
------------</xs:element>-
--------</xs:sequence>-
----</xs:complexType>-
----<xs:complexType-name="codigoType">...</xs:complexType>-
Referência a elemento global
Declaração local com referência a
tipo global codigoType
Declaração local com definição
local de um simpleType
Declaração global com referência a
tipo global ofertaType
Declaração global com
definição local de um
simpleType
5
www.argonavis.com.br
4 maneiras de associar um tipo a um elemento
<xs:element-name="endereco"-type="xsd:string"-/>-
<xs:element-name="tudo"-/>-
<xs:element-name="cpf"-type="CpfType"-/>-
<xs:element-name="itens">-
----<xs:simpleType>-
--------<xs:restriction-base="xs:integer">-
------------<xs:minInclusive-value="1"/>-
------------<xs:maxInclusive-value="20"/>-
--------</xs:restriction>-
----</xs:simpleType>-
</xs:element>-
6
www.argonavis.com.br
Valores default para elementos
●  Valores default podem ser atribuídos caso o
elemento esteja ausente ou vazio
<xs:element-ref="preco"-default="0.00"/>-
<xs:element-name="itens"-type="itensType"-default="10">-
<oferta-validade="2010J10J10">-
----<codigo-numero="4599"-tipo="T"-/>-
----<itens-/>-
</oferta>-
<oferta-validade="2010J10J10">-
----<codigo-numero="4599"-tipo="T"-/>-
7777<preco>0.00</preco>-
----<itens>10</itens>-
</oferta>-
Documento original
Documento após o
processamento
7
www.argonavis.com.br
Atributos
●  Geralmente declarados em tipos complexos
●  Localmente, no contexto do tipo que será
associado a um elemento
●  Podem ser declarados globalmente
●  Para esquemas que fornecem atributos globais
(geralmente prefixados)
●  Dentro de tipos complexos, são declarados
após o conteúdo
●  Declaram-se atributos com <xs:attribute>
8
www.argonavis.com.br
<xs:attribute>
●  Define um atributo
●  Pode estar embutido na definição de um tipo
ou globalmente acessível (para reutilização)
<xs:attribute-name="raio"-type="xs:decimal"/>-
<xs:complexType-name="sateliteType">-
--<xs:complexContent>-
----<xs:extension-base="astroType">-
-----<xs:attribute-ref="raio"-use="required"/>-
-----<xs:attribute-name="anoDesc"-type="xs:int"/>-
----</xs:extension>-
--</xs:complexContent>-
</xs:complexType>-
9
www.argonavis.com.br
Exemplo
<xs:complexType-name="ofertaType">-
----<xs:sequence>-
--------<xs:element-name="codigo"-type="codigoType"/>-
--------<xs:element-ref="preco"/>-
--------<xs:element-name="itens">...</xs:element>-
----</xs:sequence>-
7777<xs:attribute7name="validade"77
777777777777777777use="required"7type="xs:NMTOKEN"/>-
</xs:complexType>-
10
www.argonavis.com.br
Atributos globais
<xs:schema-xmlns:xs="http://www.w3.org/2001/XMLSchema"---
----attributeFormDefault="qualified"-
----targetNamespace="http://www.x.com/contabilidade"-
----xmlns="http://www.x.com/contabilidade">-
----<xs:attribute7name="tributado"7type="xs:boolean"7/>7
...7
<oferta-contab:tributado="true"--
--------xmlns:contab="http://www.x.org/contabilidade">-
----...--
XML Schema
Instância
11
www.argonavis.com.br
4 maneiras de declarar atributos
<xs:attribute-name="validade"-type="xs:NMTOKEN"/>-
<xs:attribute-name="tudo"-/>-
<xs:attribute-name="tipo"-use="required">-
----<xs:simpleType>-
--------<xs:restriction-base="xs:NMTOKEN">-
------------<xs:enumeration-value="T"-/>-
------------<xs:enumeration-value="P"-/>-
------------<xs:enumeration-value="U"-/>-
--------</xs:restriction>-
----</xs:simpleType>-
</xs:attribute>--
<xs:attribute-name="validade"--
--------------type="xs:date"---
--------------default="1990I01I01"7/>-
1
www.argonavis.com.br
tipos simples
uniões e listas
tipos nativos
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Tipos simples
●  Elementos ou atributos podem ter conteúdo
definido como tipo simples
●  Tipos simples podem ser:
●  valores atômicos
●  listas
●  uniões
●  São definidos com o elemento
<xs:simpleType>
●  São tipos complexos
●  Tipos que contém outros elementos
●  Tipos que contém atributos (mesmo que vazios)
3
www.argonavis.com.br
Tipos base e derivação por restrição
●  Todo tipo simples é uma derivação por
restrição de outro tipo simples, que é
chamado de tipo base.
●  Não é possível estender tipos simples
●  A restrição é feita com <xs:restriction>
●  Pode ser sobre tipos primitivos ou nativos
●  Pode ser sobre tipos criados no próprio esquema ou
importados
●  Restrição reduz o tamanho do tipo usando
facetas (limites, comprimentos, etc)
4
www.argonavis.com.br
Exemplos com <xs:restriction> em tipos simples
<xs:element*name="itens">*
****<xs:simpleType>*
********<xs:restriction*base="xs:integer">*
************<xs:minInclusive*value="1"/>*
************<xs:maxInclusive*value="20"/>*
********</xs:restriction>*
****</xs:simpleType>*
</xs:element>*
<xs:attribute*name="tipo"*use="required">*
****<xs:simpleType>*
********<xs:restriction*base="xs:NMTOKEN">*
************<xs:enumeration*value="T"*/>*
************<xs:enumeration*value="P"*/>*
************<xs:enumeration*value="U"*/>*
********</xs:restriction>*
****</xs:simpleType>*
</xs:attribute>*
Facetas
5
www.argonavis.com.br
Facetas
●  Limites
●  <xs:minExclusive>, <xs:minInclusive>,
●  <xs:maxExclusive>, <xs:maxInclusive>
●  Comprimento
●  <xs:length>, <xs:<minLength>, <xs:maxLength>
●  Quantidade de dígitos
●  <xs:totalDigits>, <xs:fractionDigits>
●  Conversão de espaços
●  <xs:whitespace>
●  Enumeração
●  <xs:enumeration>
●  Expressão regular
●  <xs:pattern>
6
www.argonavis.com.br
Facetas de limites numéricos
●  Usada em tipos numéricos
●  Pode-se usar um e no máximo dois elementos, um
mínimo, e um máximo
●  <xs:minExclusive value="valor">
●  Limite inferior é maior que valor
●  <xs:minInclusive value="valor">
●  Limite inferior é maior ou igual a valor
●  <xs:maxExclusive value="valor">
●  Limite superior é menor que valor
●  <xs:maxInclusive value="valor">
●  Limite superior é menor ou igual a valor
7
www.argonavis.com.br
Facetas de comprimento
●  Usado em strings
●  Deve ser um número positivo
●  <xs:length>
●  Comprimento exato
●  <xs:minLength>
●  Comprimento mínimo
●  <xs:maxLength>
●  Comprimento máximo
8
www.argonavis.com.br
Facetas de quantidade de dígitos
●  Usado em números
●  <xs:totalDigits>
●  Dígitos totais
●  <xs:fractionDigits>
●  Dígitos depois do ponto decimal
●  Deve ser menor ou igual a totalDigits
9
www.argonavis.com.br
Facetas de política de conversão de espaços
●  Define a política de tratamento de espaços
●  <xs:whitespace>
●  O atributo value pode ter os valores
●  preserve – preserva os espaços em branco, novas
lihas, tabulações, etc.
●  replace – substitui as novas-linhas e tabulações por
um espaço, e preserva os outros espações
●  collapse – substitui múltiplos espaços por um
espaço, e elimina os espaços antes e depois
10
www.argonavis.com.br
Enumeração
●  <xs:enumeration>
●  Pode aparecer várias vezes
●  Cada <xs:enumeration> inclui um valor que pode
ser atribuído ao tipo
●  Os valores de cada <xs:enumeration> devem ser
compatíveis com o tipo base.
11
www.argonavis.com.br
Expressão regular
●  <xs:pattern>
●  Permite que se passe, no atributo value, uma
expressão regular que irá filtrar e restringir o
tipo base
●  Exemplo
●  <xs:pattern value="((d+s*){3})*” />
●  Veja mais detalhes no módulo sobre
expressões regulares
12
www.argonavis.com.br
Uniões
●  Combinam vários tipos em um
●  <xs:union>
<xs:simpleType*name="TamanhoType">*
4444<xs:union>*
********<xs:simpleType>*
************<xs:restriction*base="xs:integer">*
****************<xs:minInclusive*value="1"></xs:minInclusive>*
****************<xs:maxInclusive*value="16"></xs:maxInclusive>*
************</xs:restriction>*
********</xs:simpleType>*
********<xs:simpleType>*
************<xs:restriction*base="xs:token"*
****************<xs:enumeration*value="P"></xs:enumeration>*
****************<xs:enumeration*value="M"></xs:enumeration>*
****************<xs:enumeration*value="G"></xs:enumeration>*
****************<xs:enumeration*value="XG"></xs:enumeration>*
************</xs:restriction>*
********</xs:simpleType>*
4444</xs:union>*
</xs:simpleType>*
13
www.argonavis.com.br
Uniões com memberTypes
●  Pode-se formar uniões por referência, se tipos
forem globais, com atributo memberTypes
<xs:simpleType*name="TamanhoType">*
****<xs:union*memberTypes="TamanhoNumericoType*"*/>*
****<xs:simpleType>*
********<xs:restriction*base="xs:token"*
************<xs:enumeration*value="P"></xs:enumeration>*
************<xs:enumeration*value="M"></xs:enumeration>*
************<xs:enumeration*value="G"></xs:enumeration>*
************<xs:enumeration*value="XG"></xs:enumeration>*
********</xs:restriction>*
****</xs:simpleType>*
****</xs:union>*
</xs:simpleType>**
<xs:simpleType*name="TamanhoType">*
****<xs:union*memberTypes="TamanhoNumericoType*TamanhoLetraType"*/>*
</xs:simpleType>*
14
www.argonavis.com.br
Listas
●  Listas são valores atômicos separados por
espaços
<polygon*coords="100*0*250*100*0*250*150*50*0*50"*/>*
<time*tamanhos="M*G*XG*P*M*G*G*XG*XG*G*G*G*M*M*G"*/>*
●  <xs:list>
●  Cria-se uma lista com
●  valores de um tipo simples local, ou
●  referencia um tipo global usando o atributo
itemType
15
www.argonavis.com.br
Exemplo de listas
<xs:simpleType*name="CoordsType">*
4444<xs:list>*
******<xs:simpleType>*
*********<xs:restriction*base="xs:integer">*
************<xs:minInclusive*value="M1024"*/>*
************<xs:maxInclusive*value="1024"*/>*
*********</xs:restriction>*
******</xs:simpleType>*
444</xs:list>*
</xs:simpleType>*
16
www.argonavis.com.br
Tipos nativos
Veja*http://www.xml.dvint.com/
docs/SchemaDataTypesQRM2.pdf*
17
www.argonavis.com.br
Tipos primitivos e exemplos de uso
• *xs:string:** * * * *"um*texto",*"abc"*
• *xs:boolean:* * * * *true*ou*false*
• *xs:decimal:* * * * *M12,*12.3333*
• *xs:float*e*xs:double:* *200.56,*3.12eM2*
• *xs:duration:* * * * *MP3Y9M8D2H42M55S*
• *xs:dateTime:* * * * *2010M12M06T08:30:55M03:00*
• *xs:time:* * * * * *08:30:55*
• *xs:date:* * * * * *2010M12M06*
• *xs:gYear:* * * * * *2010*
• *xs:gYearMonth:* * * *2010M12*
• *xs:gMonthDay:** * * *MM12M06*
• *xs:gMonth:** * * * *MM12*
• *xs:gDay:* * * * * *MMM06*
• *xs:hexBinary:** * * *0FB8*
• *xs:base64Binary: * * *0FB8*
• *xs:anyURI:** * * * *http://www.xyz.com*
• *xs:QName:* * * * * *pdv:preco*
• *xs:NOTATION**
1
www.argonavis.com.br
tipos complexos
modelos de conteúdo
grupos
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
O que são tipos complexos
●  No exemplo acima possuem tipos complexos os elementos:
●  <curso>, <titulo>, <carga-horaria>, <pre-requisito> e <topicos>
●  E possuem tipos simples os elementos:
●  <titulo> e <item>
<curso'grupo="xml"'assunto="1"'subgrupo="0"'fragmento="0">'
''''<titulo>XML:'uma'introdução'prática</titulo>'
''''<cargaBhoraria'horas="24"/>'
''''<preBrequisito'tipo="obrigatorio">Conhecimento'elementar'de'
alguma'linguagem'de'markup'como'HTML</preBrequisito>'
''''<topicos>'
''''''''<item>Introdução'a'XML</item>'
''''''''<item>Como'escrever'documentos'XML</item>'
''''''''<item>Estrutura'de'uma'página'XML</item>'
''''''''<item>Como'especificar'uma'linguagem'usando'DTD</item>'
''''''''<item>XML'Namespaces</item>'
''''</topicos>'
</curso>'
3
www.argonavis.com.br
Como construir
●  Um tipo complexo pode ser construído de três
formas:
●  A partir de conteúdo simples (elemento
<xs:simpleContent>)
●  Através da definição de um grupo de elementos
(<xs:all>, <xs:group>, <xs:choice>,
<xs:sequence>)
●  Através da extensão de outro tipo complexo
(<xs:complexContent>)
4
www.argonavis.com.br
Conteúdos
●  Um tipo complexo pode conter quatro tipos
diferentes de conteúdo
●  Conteúdo simples
●  Conteúdo de elementos
●  Conteúdo misto
●  Conteúdo vazio
5
www.argonavis.com.br
Conteúdo simples
●  Permite apenas texto
●  A sintaxe para incluir atributos requer declarar
uma <xs:extension> para o conteúdo simples,
dentro do qual se declara o <xs:attribute>
<preBrequisito'tipo="obrigatorio">Conhecimento'elem...</item>'
<xs:element'name="preBrequisito">'
''''<xs:complexType>'
!!!!!!!!<xs:simpleContent>'
''''''''''''<xs:extension'base="xs:string">'
'''''''''''''''<xs:attribute'name="tipo"'type="xs:NCName"/>'
''''''''''''</xs:extension>'
!!!!!!!!</xs:simpleContent>'
''''</xs:complexType>'
</xs:element>'
6
www.argonavis.com.br
Conteúdo de elementos
●  Só aceita elementos
●  Qualquer texto precisa estar dentro de um sub-
elemento.
<topicos>'
''''<item>Introdução'a'XML</item>'
''''<item>Como'escrever'documentos'XML</item>'
''''<item>Estrutura'de'uma'página'XML</item>'
''''<item>Como'especificar'uma'linguagem'usando'DTD</item>'
''''<item>XML'Namespaces</item>'
</topicos>'
<xs:element'name="topicos">'
''''<xs:complexType>'
!!!!!!!!<xs:sequence>'
''''''''''''<xs:element'maxOccurs="unbounded"'ref="item"/>'
!!!!!!!!</xs:sequence>'
''''</xs:complexType>'
</xs:element>'
7
www.argonavis.com.br
Conteúdo misto
●  Usa o atributo mixed="true" ao definir o tipo
complexo
<descricao>O'curso'<codigo/>:<titulo/>'proporciona'uma'
introdução...'veja'as'referências'<link'href="#ref1">[1]
</link>'e'...</descricao>'
<xs:element'name="descricao">'
''''<xs:complexType>'
''''''''<xs:choice'maxOccurs="unbounded"'mixed="true">'
''''''''''''<xs:element'ref="titulo"/>'
''''''''''''<xs:element'ref="codigo"/>'
''''''''''''<xs:element'ref="link"/>'
''''''''</xs:choice>'
''''</xs:complexType>'
</xs:element>'
8
www.argonavis.com.br
Conteúdo vazio
●  Nenhum conteúdo
●  É implicitamente definido ao não declarar nenhum
conteúdo no tipo (exceto atributos)
<cargaBhoraria'horas="24"/>'
<xs:element'name="cargaBhoraria">'
''''<xs:complexType>'
''''''''<xs:attribute'name="horas"''
''''''''''''''''''''''type="xs:integer"/>'
''''</xs:complexType>'
</xs:element>'
9
www.argonavis.com.br
Modelos de conteúdo para tipos complexos
●  Para definir conteúdo formado por elementos,
é preciso usar um modelo de conteúdo.
●  Há três tipos, cada um definido por um
elemento filho de <xs:complexType>:
●  <xs:sequence>
●  <xs:choice>
●  <xs:all>
●  Não é possível declarar elementos
diretamente abaixo de <xs:complexType>
●  É preciso usar os elementos acima.
10
www.argonavis.com.br
<xs:sequence>
●  Um <xs:sequence> é usado para indicar a
ordem em que os elementos devem ser usados.
<xs:complexType'name="sistemaEstelarType">'
!!!!<xs:sequence>'
''''''''<xs:element'name="centro"'type="centroType"/>'
''''''''<xs:element'name="orbita"'type="orbitaType"''
''''''''''''minOccurs="0"'maxOccurs="unbounded"/>'
''''''''<xs:element'ref="cm:cometa"''
''''''''''''minOccurs="0"'maxOccurs="unbounded"/>'
!!!!</xs:sequence>'
</xs:complexType>'
<sistemaEstelar'type="sistemaEstelarType">'
''''<centro>...</centro>'
''''<cm:cometa>...</cm:cometa>'
''''<cm:cometa>...</cm:cometa>'
''''<orbita>...</orbita>'
''''<cm:cometa>...</cm:cometa>'
</sistemaEstelar>'
<sistemaEstelar'type="sistemaEstelarType">'
''''<centro>...</centro>'
''''<cm:cometa>...</cm:cometa>'
''''<cm:cometa>...</cm:cometa>'
</sistemaEstelar>'
inválido
válido
11
www.argonavis.com.br
<xs:choice>
●  Um <xs:choice> é usado para escolher um, dentre
vários elementos
●  pode ser usado para permitir a inclusão de elementos em
qualquer ordem, se o atributo maxOccurs for "unbounded”
●  Blocos <xs:choice> e <xs:sequence> podem ser
aninhados um dentro do outro para permitir modelos de
conteúdo mais complexos
<xs:complexType'name="orbitaType">'
!!!!<xs:choice!maxOccurs="unbounded">'
''''''''<xs:element'name="estrela"'type="estrelaType"/>'
''''''''<xs:element'name="planeta"'type="st:sateliteType"/>'
''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>'
!!!!</xs:choice>'
''''<xs:attribute'name="raioMedUA"'type="xs:decimal"/>'
</xs:complexType>'
12
www.argonavis.com.br
Grupos: <xs:group>
●  Grupos podem ser definidos globalmente no
primeiro nível através do elemento <xs:group>
●  deve ter um nome e um conteúdo <xs:choice>,
<xs:sequence>, ou <xs:all>
●  Promove o reuso!
<xs:schema'...>'
!!!!<xs:group!name="grupoCorpos">'
''''''''<xs:choice'maxOccurs="unbounded">'
''''''''''''<xs:element'name="estrela"'type="estrelaType"/>'
''''''''''''<xs:element'name="planeta"'type="st:sateliteType"/>'
''''''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>'
''''''''</xs:choice>'
'''!</xs:group>'
''''…'
''''<xs:complexType'name="orbitaType">'
!!!!!!!!<xs:group!ref="grupoCorpos"!/>'
''''''''<xs:attribute'name="raioMedUA"'type="xs:decimal"/>'
''''</xs:complexType>'
13
www.argonavis.com.br
4 formas de incluir atributos em tipos complexos
<xs:complexType'name="orbitaType">'
''''<xs:group'ref="grupoCorpos"'/>'
!!!!<xs:attribute!ref="raio"!/>'
</xs:complexType>'
<xs:complexType'name="orbitaType">'
''''<xs:choice>'
''''''''<xs:element'name="estrela"'type="estrelaType"/>'
''''''''<xs:element'name="planeta"'type="st:sateliteType"/>'
''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>'
''''</xs:choice>'
!!!!<xs:attribute!name="raioMedUA"!type="xs:decimal"/>'
</xs:complexType>'
<xs:complexType>'
!!!!<xs:attribute!name="horas"!type="xs:integer"/>'
</xs:complexType>'
<xs:complexType>'
''''<xs:simpleContent>'
''''''''<xs:extension'base="xs:string">'
!!!!!!!!!!!!<xs:attribute!name="tipo"!type="xs:NCName"/>'
''''''''</xs:extension>'
''''</xs:simpleContent>'
</xs:complexType>'
14
www.argonavis.com.br
Grupos de atributos
●  <xs:attributeGroup>
●  declarado globalmente cria um grupo de atributos
que podem ser incluidos nos elementos
<xs:attributeGroup'name="codBcurso">'
''''<xs:attribute'name="assunto"'use="required"'type="xs:integer"/>'
''''<xs:attribute'name="fragmento"'use="required"'type="xs:integer"/>'
''''<xs:attribute'name="grupo"'use="required"'type="xs:NCName"/>'
''''<xs:attribute'name="subgrupo"'use="required"'type="xs:integer"/>'
</xs:attributeGroup>'
<xs:element'name="curso">'
''''<xs:complexType>'
''''''''<xs:sequence>'
''''''''''''<xs:element'ref="titulo"/>'
''''''''''''<xs:element'ref="topicos"/>'
''''''''</xs:sequence>'
''''''''<xs:attributeGroup!ref="codDcurso"!/>!'
''''</xs:complexType>'
</xs:element>'
1
www.argonavis.com.br
extensão
restrição
substituição
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Derivação de tipos complexos
●  Pode ser feita de duas formas
●  Extensão <xs:extension>
●  Restrição <xs:restriction>
●  Elementos são incluídos dentro de um
<xs:simpleContent> ou <xs:complexContent>
3
www.argonavis.com.br
Extensão de tipos complexos
●  No modelo de conteúdo simples
●  Extensão para acrescentar atributos
●  No modelo de conteúdo complexo
●  Extensão para acrescentar atributos
●  Extensão para acrescentar elementos
4
www.argonavis.com.br
Extensão em conteúdo simples
●  Para inclusão de um atributo
●  Exemplo de uso
!<xsd:complexType!name="LarguraType">!
!!!!!!!!<xsd:simpleContent>!
!!!!!!!!!!!!<xsd:extension!base="xsd:integer">!
!!!!!!!!!!!!!!!!<xsd:attribute!name="unidade"!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!type="UnidadesType"!/>!
!!!!!!!!!!!!</xsd:extension>!!
!!!!!!!!</xsd:simpleContent>!
!!!!</xsd:complexType>!
!!!!<xsd:element!ref="LarguraType"!/>!
<largura!unidade="cm">123</largura>!
Conteúdo simples não é afetado
5
www.argonavis.com.br
Extensão em conteúdo complexo
●  Podem adicionar elementos no final do modelo de
conteúdo do tipo base
●  O tipo resultante combina os elementos existentes seguidos
pelos novos como em um <xs:sequence>
●  É possível acrescentar novos atributos
●  Não é possível redefinir, alterar ou remover atributos existentes
●  A extensão de grupos <xs:choice> não resulta em um
grupo <xs:choice>
●  O efeito é o da criação de um grupo <xs:sequence> contendo os
dois grupos <xs:choice>, o anterior seguido pelo novo
●  Resultado: elementos incluídos no tipo estendido só podem
aparecer depois dos elementos originais
6
www.argonavis.com.br
Exemplo de extensão com <xs:sequence>
<xs:complexType!name="ResumidoType">!
!!!!<xs:sequence>!
!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!<xs:element!ref="cargaDhoraria"/>!
!!!!!!!!<xs:element!ref="preDrequisito"/>!
!!!!</xs:sequence>!
</xs:complexType>!
<xs:complexType!name="CompletoType">!
!!!!<xs:extension!base="ResumidoType">!
!!!!!!!!<xs:sequence>!
!!!!!!!!!!!!<xs:element!ref="descricao"/>!
!!!!!!!!!!!!<xs:element!ref="objetivo"/>!
!!!!!!!!!!!!<xs:element!ref="topicos"/>!
!!!!!!!!</xs:sequence>!
!!!!!!!!<xs:attributeGroup!ref="cod>curso"/>!!
!!!!</xs:extension>!
</xs:complexType>!
<xs:complexType>!
!!!!<xs:sequence>!
!!!!!!!!<xs:sequence>!
!!!!!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!!!!!<xs:element!ref="cargaDhoraria"/>!
!!!!!!!!!!!!<xs:element!ref="preDrequisito"/>!
!!!!!!!!</xs:sequence>!
!!!!!!!!<xs:sequence>!
!!!!!!!!!!!!<xs:element!ref="descricao"/>!
!!!!!!!!!!!!<xs:element!ref="objetivo"/>!
!!!!!!!!!!!!<xs:element!ref="topicos"/>!
!!!!!!!!</xs:sequence>!
!!!!</xs:sequence>!
!!!!<xs:attributeGroup!ref="cod>curso"/>!
</xs:complexType>!
Resultado
equivalente à
extensão
7
www.argonavis.com.br
Exemplo de extensão com <xs:choice>
<xs:complexType!name="ResumidoType">!
!!!!<xs:choice>!
!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!<xs:element!ref="cargaDhoraria"/>!
!!!!!!!!<xs:element!ref="preDrequisito"/>!
!!!!</xs:choice>!
</xs:complexType>!
<xs:complexType!name="CompletoType">!
!!!!<xs:extension!base="ResumidoType">!
!!!!!!!!<xs:choice>!
!!!!!!!!!!!!<xs:element!ref="descricao"/>!
!!!!!!!!!!!!<xs:element!ref="objetivo"/>!
!!!!!!!!!!!!<xs:element!ref="topicos"/>!
!!!!!!!!</xs:choice>!
!!!!!!!!<xs:attributeGroup!ref="cod>curso"/>!!
!!!!</xs:extension>!
</xs:complexType>!
<xs:complexType>!
!!!!<xs:sequence>!
!!!!!!!!<xs:choice>!
!!!!!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!!!!!<xs:element!ref="cargaDhoraria"/>!
!!!!!!!!!!!!<xs:element!ref="preDrequisito"/>!
!!!!!!!!</xs:choice>!
!!!!!!!!<xs:choice>!
!!!!!!!!!!!!<xs:element!ref="descricao"/>!
!!!!!!!!!!!!<xs:element!ref="objetivo"/>!
!!!!!!!!!!!!<xs:element!ref="topicos"/>!
!!!!!!!!</xs:choice>!
!!!!</xs:sequence>!
!!!!<xs:attributeGroup!ref="cod>curso"/>!
</xs:complexType>!
Em elementos do tipo CompletoType
nenhuma ocorrência de <carga-horaria>
pode vir depois de <descricao>
8
www.argonavis.com.br
Extensão de conteúdo misto e vazio
●  A extensão de tipos com conteúdo misto força
o tipo derivado a também permitir conteúdo
misto
●  É necessário declarar o atributo mixed="true" no
tipo derivado
●  Um elemento de conteúdo vazio pode ser
estendido para
●  Acrescentar atributos
●  Acrescentar elementos (e, portanto, deixar de ter
conteúdo vazio)
9
www.argonavis.com.br
Extensão de um tipo vazio
<xs:complexType!name="CargaHorariaType>!
!!!!<xs:attribute!name="horas"!type="xs:integer"/>!
</xs:complexType>!
<xs:complexType!name="CargaHorariaComMinutosEFusoHorarioType>!
!!!!<xs:extension!base="CargaHorariaType">!
!!!!!!<xs:sequence>!
!!!!!!!!<xs:element!ref="gmt"!maxOccurs="1">!
!!!!!!!!!!!!<xs:simpleType>!
!!!!!!!!!!!!!!!!<xs:restriction!base="xs:integer">!
!!!!!!!!!!!!!!!!!!!!<xs:maxInclusive>12</xs:maxInclusive>!
!!!!!!!!!!!!!!!!!!!!<xs:minInclusive>>12</xs:minInclusive>!
!!!!!!!!!!!!!!!!!!!!<xs:restriction>!
!!!!!!!!!!!!</xs:simpleType>!
!!!!!!!!</xs:element>!
!!!!!!</xs:sequence>!
!!!!!!<xs:attribute!name="minutos"!type="xs:integer"/>!
!!!!</xs:extension>!
</xs:complexType>! + um atributo
10
www.argonavis.com.br
Restrição de tipos complexos
●  Pode ser realizada através de
●  Remoção ou restrição de atributos (escopo, valores permitidos)
●  Redução de modelos de conteúdo complexos (eliminação de
elementos-filho)
●  Redução de modelos de conteúdo simples (restrição de tipo de
dados)
●  Exemplo: tornando um atributo positivo e obrigatório
<xs:complexType!name="CargaHorariaTypeObrigatoria">!
!!!!<xs:simpleContent>!
!!!!!!!!<xsd:restriction!base="CargaHorariaType">!
!!!!!!!!!!!!<xsd:attribute!name="horas"!!
!!!!!!!!!!!!!!!!type="xsd:positiveInteger"!use="required"!/>!
!!!!!!!!</xsd:restriction>!
!!!!</xs:simpleContent>!
</xs:complexType>!
11
www.argonavis.com.br
Restrição de conteúdo complexo
●  Requer a repetição de todo o modelo de
conteúdo que se deseja manter
●  Elementos que não se repetirem no tipo derivado
serão eliminados
●  Instâncias do tipo derivado também precisam
ser válidas em relação ao tipo base
●  Restrições formalizadas no novo tipo devem ser
possíveis no tipo antigo
●  Restrições não podem ampliar faixas de valores
definidas no tipo base: pode apenas mantê-las
inalteradas ou torná-las mais restritivas
12
www.argonavis.com.br
Exemplo: restrição de conteúdo complexo
<xs:complexType!name="CursoResumidoType">!
!!!!<xs:complexContent>!
!!!!!!!!<xs:restriction!base="CursoCompletoType">!
!!!!!!!!!!!!<xs:sequence>!
!!!!!!!!!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!!!!!!!!!<xs:element!ref="carga>horaria"/>!
!!!!!!!!!!!!!!!!<xs:element!ref="pre>requisito"/>!
!!!!!!!!!!!!</xs:sequence>!
!!!!!!!!</xs:restriction>!
!!!!</xs:complexContent>!
</xs:complexType>!
<xs:complexType!name="CursoCompletoType">!
!!!!<xs:sequence>!
!!!!!!!!<xs:element!ref="titulo"/>!
!!!!!!!!<xs:element!ref="cargaDhoraria"/>!
!!!!!!!!<xs:element!ref="preDrequisito"/>!
!!!!!!!!<xs:element!ref="descricao"/>!
!!!!!!!!<xs:element!ref="objetivo"/>!
!!!!!!!!<xs:element!ref="topicos"/>!
!!!!</xs:sequence>!
</xs:complexType>!
13
www.argonavis.com.br
Grupos de substituição
●  Fundamentam-se na derivação de tipos para criar uma
hierarquia de elementos
●  Similar a linguagens orientadas a objeto
●  Suporta polimorfismo!
●  Permite declarar novos elementos como substitutos de
esquemas e namespaces
●  Herda-se o modelo de conteúdo, que pode ser alterado
●  Exemplo
●  Tipo base: <produto>
●  Tipos de produto: <publicacao>, <roupa>, <veiculo> podem ser
usados quando o esquema pede um <produto>
●  Tipos de <publicacao>: <livro>, <revista>, <jornal> podem ser
usados no lugar de <publicacao> ou de <produto>
14
www.argonavis.com.br
Como usar grupos de substituição
●  Raiz da hierarquia
●  Qualquer elemento (ou tipo) global
●  Elemento (ou tipo) base
●  Filhos da hierarquia
●  Referem-se à raiz através do atributo
substitutionGroup
●  Compatibilidade
●  Tipo de membros de um grupo de substituição
precisam ter tipos iguais ou derivados da base
15
www.argonavis.com.br
Exemplo de grupos de substituição: tipos
●  Declaração normal de uma hierarquia de tipos
<xs:complexType!name="ProdutoType">!
!!!!<xs:sequence>!
!!!!!!!!<xs:element!ref="preco"/>!
!!!!!!!!<xs:element!ref="codigo"/>!
!!!!</xs:sequence>!
</xs:complexType>!
<xs:complexType!name="PublicacaoType">!
!!!!<xs:complexContent>!
!!!!!!!!<xs:extension!base="ProdutoType">!
!!!!!!!!!!!!<xs:sequence>!
!!!!!!!!!!!!!!!!<xs:element!name="autores"!type="AutoresType"/>!
!!!!!!!!!!!!!!!!<xs:element!name="formato"!type="FormatoPubType"!/>!
!!!!!!!!!!!!!!!!<xs:element!name="titulo"!type="xs:string"/>!
!!!!!!!!!!!!</xs:sequence>!
!!!!!!!!</xs:extension>!
!!!!</xs:complexContent>!
</xs:complexType>!
PublicacaoType!
ProdutoType!
16
www.argonavis.com.br
PublicacaoType!
ProdutoType!
ProdutoType! "dvdDType"!
Exemplos de grupos de substituição: elementos
<xs:element!name="dvd"!substitutionGroup="produto">!
!<xs:complexType>!
!!<xs:complexContent>!
!!!<xs:extension!base="ProdutoType">!
!!!!<xs:sequence>!
!!!!!<xs:element!!name="formato"!!
! ! ! !!! !type="FormatoDVDType"!/>!
!!!!</xs:sequence>!
!!!</xs:extension>!
!!</xs:complexContent>!
!</xs:complexType>!
</xs:element>!
<xs:element!name="produto"!!!!type="ProdutoType"/>!
<xs:element!name="publicacao"!type="PublicacaoType"!
!!!!!!!!!!!!!!!!!!!!!!!!!!!substitutionGroup="produto"/>!
<xs:element!name="caderno"!substitutionGroup="produto"/>!
produto!
caderno!publicacao! dvd!
17
www.argonavis.com.br
Uso de grupos de substituição
!<produtos>!
!!!!!!!!<produto>!
!!!!!!!!!!!!<codigo>123</codigo>!
!!!!!!!!!!!!<preco>10.00</preco>!
!!!!!!!!</produto>!
!!!!!!!!<publicacao>!
!!!!!!!!!!!!<codigo>912</codigo>!
!!!!!!!!!!!!<preco>31.00</preco>!
!!!!!!!!!!!!<titulo>A!Origem!das!Especies</titulo>!
!!!!!!!!!!!!<autores><autor>Charles!Darwin</autor></autores>!
!!!!!!!!!!!!<formato!encadernacao="capaDdura"!dimensoes="16.3!12.5!2.8"!/>!
!!!!!!!!</publicacao>!
!!!!!!!!<dvd>!
!!!!!!!!!!!!<codigo>778</codigo>!
!!!!!!!!!!!!<preco>19.90</preco>!
!!!!!!!!!!!!<formato!area="0"!/>!
!!!!!!!!</dvd>!
!!!!!!!!<caderno>!
!!!!!!!!!!!!<codigo>834</codigo>!
!!!!!!!!!!!!<preco>15.00</preco>!
!!!!!!!!</caderno>!
</produtos>!
18
www.argonavis.com.br
Elementos e tipos abstratos e finais
●  O controle de acesso em grupos de substituição
pode ser declarado no tipo base ou elemento
●  final="valor"
●  Define o tipo ou elemento como final para diferentes
tipos de derivação
●  #all – impede qualquer tipo de derivação
●  abstract="true"
●  declara que um elemento é cabeça de um grupo de
substituição mas não pode ser usado diretamente
●  Elementos na instância só podem ser usados se forem
de componentes derivados do grupo de substituição
1
www.argonavis.com.br
chaves
referências cruzadas
© 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com)
X170
2
www.argonavis.com.br
Identificadores
●  Componentes que podem ser identificados por
chaves primárias ou identificadores unívocos
●  Referenciáveis dentro ou fora do esquema ou
instância
●  <xs:unique>, <xs:key> e <xs:keyref>
●  Vale para elementos ou atributos
●  Muito mais abrangentes que ID e IDREF (DTD)
●  Identificador é aplicado em contexto localizado
através de XPath
●  Pode ter um ou mais campos que compõem o
elemento ou chave unívoca
3
www.argonavis.com.br
Identificador unívoco simples
●  O elemento <xs:unique> define um elemento
que tem conteúdo que não se repete
●  considerando os outros elementos definidos no
mesmo contexto
<xs:element*name="pedido"*type="PedidoType">*
****<xs:unique*name="codigoProduto">*
********<xs:selector*xpath="*/produto"/>*
********<xs:field*xpath="@codigo"/>*
****</xs:unique>*
</xs:element>*
4
www.argonavis.com.br
Identificador unívoco composto
●  É possível também definir como unívoco um
elemento com base nos valores de mais de um
campo (elemento ou atributo)
<xs:element*name="pedido"*type="PedidoType">*
**<xs:unique*name="codigoProdutoPedido">*
******<xs:selector*xpath="*/pedido"/>*
******<xs:field*xpath="itens/produto/@codigo"/>*
******<xs:field*xpath="@codigo"/>*
**</xs:unique>*
</xs:element>*
5
www.argonavis.com.br
<xs:key> e <xs:keyref>
●  Chaves permitem que se realize um mapeamento
entre um campo unívoco e uma referência
●  Com um par <xs:key> e <xs:reyref> pode-se
estabelecer ligações entre referências e elementos
●  Chaves são definidas usando XPath
<xs:element*name="pedido"*type="PedidoType">*
****<xs:keyref*name="codProdutoRef"*refer="codProduto">*
********<xs:selector*xpath="itens/*"/>*
********<xs:field*xpath="@codigo"/>*
****</xs:keyref>*
****<xs:key*name="codProduto">*
********<xs:selector*xpath=".//produto"/>*
********<xs:field*xpath="codigo"/>*
****</xs:key>*
</xs:element>*

Más contenido relacionado

La actualidad más candente

Aula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAndré Constantino da Silva
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de RequisitosPaulo Furtado
 
Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao cssLéo Dias
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
HTML+&+CSS++Fundamentos.pdf
HTML+&+CSS++Fundamentos.pdfHTML+&+CSS++Fundamentos.pdf
HTML+&+CSS++Fundamentos.pdfCesar Braz
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Mer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoMer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoRademaker Siena
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTMLLeonardo Soares
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercíciosGuilherme
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 

La actualidad más candente (20)

Aula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estrutura
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de Requisitos
 
Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao css
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
A Linguagem UML
A Linguagem UMLA Linguagem UML
A Linguagem UML
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
HTML+&+CSS++Fundamentos.pdf
HTML+&+CSS++Fundamentos.pdfHTML+&+CSS++Fundamentos.pdf
HTML+&+CSS++Fundamentos.pdf
 
Google sites-pdf
Google sites-pdfGoogle sites-pdf
Google sites-pdf
 
Introdução CSS
Introdução CSSIntrodução CSS
Introdução CSS
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Mer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoMer - Modelo Entidade Relacionamento
Mer - Modelo Entidade Relacionamento
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTML
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Aula 2 - Processos de Software
Aula 2 - Processos de SoftwareAula 2 - Processos de Software
Aula 2 - Processos de Software
 
Programacao para Web I Plano de Ensinodoc
Programacao para Web I Plano de EnsinodocProgramacao para Web I Plano de Ensinodoc
Programacao para Web I Plano de Ensinodoc
 
Introdução a HTML5
Introdução a HTML5Introdução a HTML5
Introdução a HTML5
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 

Destacado

3 xml namespaces and xml schema
3   xml namespaces and xml schema3   xml namespaces and xml schema
3 xml namespaces and xml schemagauravashq
 
XML Schema
XML SchemaXML Schema
XML SchemaKumar
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?Ricardo Terra
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTMLCésar Augusto Pessôa
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTRicardo Terra
 
XML's validation - XML Schema
XML's validation - XML SchemaXML's validation - XML Schema
XML's validation - XML Schemavidede_group
 
4 xml namespaces and xml schema
4   xml namespaces and xml schema4   xml namespaces and xml schema
4 xml namespaces and xml schemagauravashq
 

Destacado (7)

3 xml namespaces and xml schema
3   xml namespaces and xml schema3   xml namespaces and xml schema
3 xml namespaces and xml schema
 
XML Schema
XML SchemaXML Schema
XML Schema
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
XML's validation - XML Schema
XML's validation - XML SchemaXML's validation - XML Schema
XML's validation - XML Schema
 
4 xml namespaces and xml schema
4   xml namespaces and xml schema4   xml namespaces and xml schema
4 xml namespaces and xml schema
 

Similar a XML Schema (2002)

xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletDenis L Presciliano
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéRenzo Petri
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos Raquel Machado
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3klaussilveira
 
Trabalho jQuery
Trabalho jQueryTrabalho jQuery
Trabalho jQuerygrupoucpel
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIFernando Ike
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 

Similar a XML Schema (2002) (20)

JustJava 2004: JAXB
JustJava 2004: JAXBJustJava 2004: JAXB
JustJava 2004: JAXB
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdoclet
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
 
Treinamento ORM .Net
Treinamento ORM .NetTreinamento ORM .Net
Treinamento ORM .Net
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 
Trabalho jQuery
Trabalho jQueryTrabalho jQuery
Trabalho jQuery
 
XML_WS.pdf
XML_WS.pdfXML_WS.pdf
XML_WS.pdf
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTIOracle para PostgreSQL: Conseguir migrar e não parar UTI
Oracle para PostgreSQL: Conseguir migrar e não parar UTI
 
Django
DjangoDjango
Django
 
Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
Sgml
SgmlSgml
Sgml
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 

Más de Helder da Rocha

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Helder da Rocha
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosHelder da Rocha
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasHelder da Rocha
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a WebHelder da Rocha
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosHelder da Rocha
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Helder da Rocha
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 

Más de Helder da Rocha (20)

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativos
 
Padrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemasPadrões essenciais de mensageria para integração de sistemas
Padrões essenciais de mensageria para integração de sistemas
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a Web
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativos
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

XML Schema (2002)

  • 1. 1 www.argonavis.com.br © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 2. 2 www.argonavis.com.br Objetivos ●  Este curso prático tem como finalidade explorar o XML Schema para especificar aplicações do XML e validar documentos XML que serão usados pelas aplicações ●  São abordados a maior parte dos recursos do XML Schema
  • 3. 3 www.argonavis.com.br Programa DIA 1 ●  1 Introdução ●  2 Composição e instâncias ●  3 Declaração de elementos e atributos DIA 2 ●  4 Tipos simples, uniões e listas ●  5 Tipos complexos e grupos ●  6 Extensão, restrição, substituição ●  7 Chaves e referências cruzadas DIA 3* ●  8 Programação com XML (opcional) * verifique se está incluso no seu programa
  • 4. 4 www.argonavis.com.br Ferramentas ●  É necessário ter uma ferramenta que possa ser usada para editar XML Schema e validar instâncias ●  Há várias opções ●  Eclipse 3.1 e Netbeans 4 (multiplataforma, gratuitos) ●  JEdit 4.2 com plugins (multiplataforma, gratuito) ●  oXygen XML Editor 6 (multiplataforma, ~50USD, 30 dias) ●  Um editor de texto qualquer pode ser suficiente para editar esquemas, mas não para este curso ●  É fundamental ter uma ferramenta capaz de validar XML contra um esquema ●  Não será possível saber se um exercício foi ou não resolvido se não for possível validar
  • 5. 5 www.argonavis.com.br Formato do curso ●  Material didático (ZIP disponibilizado na rede) ●  Slides ●  Apostila com material de referência (30 páginas) ●  Material sobre expressões regulares ●  Material extra com revisão de XML básico ●  Exemplos e exercícios para resolver ●  Mais de 50% deste curso é dedicado a exercícios práticos ●  É essencial que os exercícios sejam feitos em sala de aula ao longo do curso (não deixe tudo para o final) ●  Haverá uma avaliação no final com testes de múltipla escolha (similares aos da certificação da IBM)
  • 6. 6 www.argonavis.com.br Módulo opcional ●  O módulo 8 trata de mapeamento Java-XML ●  Trata-se de um módulo prático que tem como pré- requisito a linguagem Java ●  Pacotes utilizados ●  JAXB 2.0 EA2 (da distribuição Java, julho/2005) ●  Apache XML Beans 2.0 ●  Através dos pacotes acima, pode-se construir aplicações onde classes são mapeadas a esquemas, e objetos são mapeados a documentos XML ●  A criação de um XML causa a criação de um objeto e vice-versa ●  Ferramentas usadas: Eclipse / NetBeans
  • 7. 7 www.argonavis.com.br Referências ●  Fontes usadas na elaboração deste treinamento ●  Priscila Walmsley. Definitive XML Schema. Prentice-Hall, 2002 ●  Especificações do W3C, XML Schema 1.0, níveis 0, 1 e 2. http://www.w3.org/XML/Schema
  • 8. 1 www.argonavis.com.br introdução principais componentes © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 9. 2 www.argonavis.com.br O Que é um XML Schema? ●  Esquema = plano, projeto, estrutura, diagrama, especificação ●  Em XML é um documento que descreve uma classe de documentos XML ●  DTD, XML Schema, etc. ●  XML Schema é documento XML usado para especificar documentos XML ●  XSDL – XML Schema Definition Language ●  Namespace: http://www.w3.org/2001/XMLSchema
  • 10. 3 www.argonavis.com.br Para que serve um XML Schema ●  Verificar que uma instância (documento XML) é válido em relação a um conjunto de regras ●  Estrutura de elementos e atributos, ●  Ordem e obrigatoriedade dos elementos, ●  Tipos de dados que podem ser usados em atributos e elementos, ●  Faixas de valores válidas, ●  Padrão que um texto precisa obeceder, etc. ●  Documentar o sistema ●  Fornecer meta-informação e defaults ●  Ser um protocolo de comunicação
  • 11. 4 www.argonavis.com.br O que é um Esquema XML?   O esquema representa uma classe   Os documentos são instâncias Esquema (universo de documentos válidos) Documentos que aderem à especificação (válidos) Documento fora da especificação "  Como definir esquemas: "  DTD - Document Type Definition "  W3C XML Schema
  • 12. 5 www.argonavis.com.br DTD vs. XML Schema ●  Um esquema é essencial para que haja comunicação usando XML ●  Pode ser estabelecido "informalmente" (via software) ●  Uso formal permite validação usando ferramentas genéricas de manipulação de XML ●  Soluções padrão do W3C DTD XML Schema <!ELEMENT contato (nome, email, telefone)> <!ATTLIST contato codigo NMTOKEN #REQUIRED> <xsd:schema xmlns:xsd=".../XMLSchema"> <xsd:element name="contato"> <xsd:complexType> <xsd:attribute name="codigo" use="required"> •  É XML, porém mais complexo •  Suporta namespaces •  Permite definição de tipos •  Simples mas não é XML •  Não suporta namespaces •  Limitado quando a tipos de dados
  • 13. 6 www.argonavis.com.br Exemplo de XML Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="astro" type="astroType" /> <xs:element name="imagem" type="imagemType"/> <xs:attribute name="href" type="xs:anyURI"/> <xs:attribute name="id" type="xs:ID"/> <xs:attribute name="nome" type="xs:string"/> <xs:attribute name="diametrokm" type="xs:decimal"/> <xs:complexType name="imagemType"> <xs:attribute ref="href" use="required"/> </xs:complexType> <xs:complexType name="astroType"> <xs:sequence> <xs:element ref="imagem" minOccurs="0"/> </xs:sequence> <xs:attribute ref="id" use="required"/> <xs:attribute ref="nome" use="required"/> <xs:attribute ref="diametrokm"/> </xs:complexType> </xs:schema> Definição de tipos de dados Elementos Atributos
  • 14. 7 www.argonavis.com.br Um DTD equivalente Atributos Elementos<!ELEMENT astro (imagem*) > <!ELEMENT imagem EMPTY > <!ATTLIST imagem href CDATA #REQUIRED > <!ATTLIST astro id ID #REQUIRED > <!ATTLIST astro nome CDATA #REQUIRED > <!ATTLIST astro diametrokm NMTOKEN #IMPLIED > Tipos de dados simples (somente para atributos) Modelo de conteúdo (tipo de dados complexo) Atributo sempre associado a elemento <astro id="p5" nome="Jupiter"> <imagem href="jup31.jpg" /> <imagem href="jup32.jpg" /> </astro> Exemplo de documento válido em relação a este DTD
  • 15. 8 www.argonavis.com.br Outro exemplo ●  Considere esta instância XML <oferta(validade="2010207222">( ((((<codigo(numero="4599"(tipo="T"/>( ((((<preco>15.2</preco>( ((((<itens>14</itens>( </oferta>(
  • 16. 9 www.argonavis.com.br Um DTD que valida a instância <!ELEMENT(oferta'(codigo,preco,itens)>( <!ATTLIST(oferta(validade(NMTOKEN(#REQUIRED>( <!ELEMENT(codigo'EMPTY>( <!ATTLIST(codigo(numero(CDATA(#REQUIRED( (((((((((((((((((tipo((T(|(P(|(U)(#REQUIRED>( <!ELEMENT(preco'(#PCDATA)>( <!ELEMENT(itens'(NMTOKEN)>(
  • 17. 10 www.argonavis.com.br Um XML Schema equivalente <?xml(version="1.0"(encoding="UTF28"?>( <xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema"(elementFormDefault="qualified">( ((((<xs:element(name="oferta">( ((((((((<xs:complexType>( ((((((((((((<xs:sequence>( ((((((((((((((((<xs:element(ref="codigo"/>( ((((((((((((((((<xs:element(ref="preco"/>( ((((((((((((((((<xs:element(ref="itens"/>( ((((((((((((</xs:sequence>( ((((((((((((<xs:attribute(name="validade"(use="required"(type="xs:NMTOKEN"/>( ((((((((</xs:complexType>( ((((</xs:element>( ((((<xs:element(name="codigo">( ((((((((<xs:complexType>( ((((((((((((<xs:attribute(name="numero"(use="required"/>( ((((((((((((<xs:attribute(name="tipo"(use="required">( ((((((((((((((((<xs:simpleType>( ((((((((((((((((((((<xs:restriction(base="xs:NMTOKEN">( ((((((((((((((((((((((((<xs:enumeration(value="T"(/>( ((((((((((((((((((((((((<xs:enumeration(value="P"(/>( ((((((((((((((((((((((((<xs:enumeration(value="U"(/>( ((((((((((((((((((((</xs:restriction>( ((((((((((((((((</xs:simpleType>( ((((((((((((</xs:attribute>( ((((((((</xs:complexType>( ((((</xs:element>( ((((<xs:element(name="preco"(type="xs:string"/>( ((((<xs:element(name="itens"(type="xs:string"/>( </xs:schema>(
  • 18. 11 www.argonavis.com.br Um XML Schema melhor <xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema"(…(>( ((((<xs:element(name="oferta">( ((((((((<xs:complexType>( ((((((((((((<xs:sequence>(…(</xs:sequence>( ((((((((((((<xs:attribute(name="validade"(use="required"(type="xs:date"/>( ((((((((</xs:complexType>( ((((</xs:element>( ((((<xs:element(name="codigo">(…(</xs:element>( ((((<xs:element(name="preco">( ((((((((<xs:simpleType>( ((((((((((((<xs:restriction(base="xs:decimal">( ''''''''''''''''<xs:fractionDigits'value="2"'/>( ((((((((((((</xs:restriction>( ((((((((</xs:simpleType>( ((((</xs:element>( ((((<xs:element(name="itens">( ((((((((<xs:simpleType>( ((((((((((((<xs:restriction(base="xs:integer">( ''''''''''''''''<xs:minInclusive'value="1"/>' ''''''''''''''''<xs:maxInclusive'value="20"/>( ((((((((((((</xs:restriction>( ((((((((</xs:simpleType>( ((((</xs:element>( </xs:schema>(
  • 19. 12 www.argonavis.com.br XML Schema ●  Mais tipos, mais controle ●  XML Schema oferece vários tipos de dados para representar strings, números ●  Tipos podem ser usados para validar elementos e atributos ●  Tipos novos podem ser criados a partir dos tipos primitivos, via extensão e restrição ●  Namespace e convenções ●  Extensão comum usada em arquivos: *.xsd ●  Prefixos mais usados para namespace: xs: ou xsd:
  • 20. 13 www.argonavis.com.br Principais elementos ●  Elementos típicos em um esquema simples ●  <schema> - elemento raiz ●  <element> ●  <attribute> ●  <simpleType> ou <complexType> ●  <simpleContent> ou <complexContent> ●  <restriction> ou <extension> ●  <enumeration>, <union>, <list> ●  <sequence>, <choice>, <all>
  • 21. 14 www.argonavis.com.br Componentes declarados e definidos ●  Componentes são ●  Atributos ●  Elementos ●  Tipos ●  Notações, etc. ●  Componentes declarados no XML Schema são usados nas instâncias ●  Elementos, atributos, notações ●  Componentes definidos no XML Schema são usados internamente ●  Tipos de dados, grupos de componentes, ids
  • 22. 15 www.argonavis.com.br Componentes globais e locais ●  Componentes globais ●  São definidos/declarados no primeiro nível do XML Schema (filhos diretos de <xs:schema>) ●  Têm nome (identificador) através do qual podem ser usados ou reusados ●  Componentes locais ●  São definidos/declarados dentro do escopo de outro componente ●  Não têm nome pois não podem ser reusados
  • 23. 16 www.argonavis.com.br Componentes locais e globais ●  O componente <xs:complexType> do esquema abaixo é global; pode ser referenciado pelo nome ofertaType ●  É referenciado na declaração de dois elementos ●  O componente <xs:complexType> deste outro esquema abaixo é local à declaração do elemento oferta e não pode ser reusado <xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema">( ((((<xs:element(name="oferta"(type="ofertaType"(/>( ((((<xs:element(name="promocaoRelampago"(type="ofertaType"(/>( ((((<xs:complexType'name="ofertaType">...</xs:complexType>( ((((…( </xs:schema>( <xs:schema(xmlns:xs="http://www.w3.org/2001/XMLSchema">( ((((<xs:element(name="oferta">( ((((((((<xs:complexType>...</xs:complexType>( ((((</xs:element>( ((((...(
  • 24. 17 www.argonavis.com.br Tipos ●  O tipo define a estrutura dos dados que pode ser usada na declaração de um elemento ou atributo. ●  Pode ser local ou global ●  Pode ser simples ou complexo ●  Se for simples, pode ser nativo ou derivado ●  Se for complexo, pode ter conteúdo simples, conteúdo complexo, conteúdo misto ou vazio
  • 25. 18 www.argonavis.com.br Tipos simples e complexos ●  Tipos simples ●  Podem ter conteúdo de texto apenas ●  Não podem conter estrutura de elementos e atributos ●  Podem ser usados na declaração de atributos ou elementos ●  Tipos complexos ●  Podem ter elementos e atributos como conteúdo ●  Podem ser usados na declaração de elementos ●  Não podem ser usados na declaração de atributos ●  Tipos novos podem ser derivados a partir de tipos existentes de duas formas ●  Através de restrição (válida para tipos simples e complexos) ●  Através de extensão (apenas para tipos complexos)
  • 26. 19 www.argonavis.com.br <xs:simpleType> ●  Tipo que apenas pode conter texto ●  É possível criar novos tipos a partir de derivação dos tipos existentes (globalmente acessíveis) <xs:simpleType(name="astroID">( ((<xs:restriction(base="xs:ID">( ((((<xs:pattern(value="cd.*"/>( ((</xs:restriction>( </xs:simpleType>( Expressão regular
  • 27. 20 www.argonavis.com.br Tipos simples nativos do XML Schema anySimpleType( gDay( string( normalizedString( token( language( Name( NMTOKEN( NCName( NMTOKENS( ID( IDREF( ENTITY( IDREFS( ENTITIES( decimal( integer(nonPositiveInteger( nonNegativeInteger( negativeInteger( positiveInteger(long( int( short( byte( unsignedLong( unsignedInt( unsignedShort( unsignedByte( boolean( base64binary( hexbinary( float( double( anyURI( QName(NOTATION( duration( gYearMonth( gYear( gMonth(dateTime( time( date(
  • 28. 21 www.argonavis.com.br Exemplo: derivação de um tipo simples ●  Tipo base: xs:NMTOKEN ●  Tipo derivado: isbn ●  Faceta de comprimento: exatamente 10 caracteres ●  Faceta de formato: descrito por expressão regular <xs:simpleType(name="isbn">( ((<xs:restriction(base="xs:NMTOKEN">( ((((<xs:length(value="10"/>(( ((((<xs:pattern(value="[029]{9}[029X]"/>( ((</xs:restriction>( </xs:simpleType>(
  • 29. 22 www.argonavis.com.br <xs:complexType> ●  Tipo que pode conter outros elementos ou atributos <xs:complexType(name="imagemType">( ((<xs:attribute(name="href"(type="xs:anyURI"/>( </xs:complexType>( <xs:complexType(name="astroType">( ((<xs:sequence>( ((((<xs:element(ref="imagem"(minOccurs="0"/>( ((((<xs:element(name="satelite"(type="sateliteType"(( ((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>( ((</xs:sequence>( ((<xs:attribute(name="id"(type="astroID"(use="required"/>( ((<xs:attribute(name="nome"(type="xs:token"(/>( ((<xs:attribute(name="diametrokm"(type="xs:decimal"/>( </xs:complexType>(
  • 30. 23 www.argonavis.com.br O que representam os tipos ●  Tipos simples representam tipos de dados básicos como texto, números, tokens, booleanos ●  Fazem parte do namespace do XML Schema (requerem prefixo associado ao identificador do namespace), por exemplo: xs:int, xs:string ●  Tipos complexos representam estruturas do documento como entidades, atributos, etc. ●  Podem fazer parte do namespace default do próprio documento (e não necessitar de prefixo) se definidos localmente
  • 31. 24 www.argonavis.com.br Fundamentos: Modelos de conteúdo ●  Definem a estrutura de tipos complexos ●  Modelos de conteúdo podem ser simples ou complexos ●  São simples quando elemento é vazio ou quando contém apenas texto ●  Modelo de conteúdo simples pode conter atributos ●  São complexos quando elemento contém outros elementos ●  Elementos podem ser definidos localmente ●  Elementos globais podem ser reutilizados
  • 32. 25 www.argonavis.com.br <xs:simpleContent> ●  Modelo de conteúdo simples ●  Determina o tipo dos dados contido em um elemento que pode possuir atributos <xs:complexType(name="imagemType">( ((<xs:simpleContent>( ((((<xs:restriction(base="xs:string">( ((((((<xs:attribute(name="href"( ((((((((((((((((((((type="xs:anyURI"/>( ((((</xs:restriction>( ((</xs:simpleContent>( </xs:complexType>(
  • 33. 26 www.argonavis.com.br <xs:complexContent> ●  Modelo de conteúdo complexo ●  Determina a organização dos elementos filho (se uma lista de opções, uma seqüência, etc. <xs:complexType(name="estrelaType">( (((<xs:complexContent>( ((((((<xs:extension(base="astroType">( (((((((((<xs:sequence>( ((((((((((((<xs:element(name="satelite"( ((((((((((((((((((((((((type="sateliteType"( ((((((((((((((((((((((((minOccurs="0"( ((((((((((((((((((((((((maxOccurs="unbounded"/>( (((((((((</xs:sequence>( (((((((((<xs:attribute(name="cor"(type="xs:token"/>( ((((((</xs:extension>( (((</xs:complexContent>( </xs:complexType>(
  • 34. 27 www.argonavis.com.br <xs:sequence> ●  Conteúdo de tipos complexos ●  Equivalente ao conteúdo (a, b, c) em DTD <xs:element(name="sistemaEstelar">( ((<xs:complexType>( ((((<xs:sequence>( ((((((<xs:element(name="centro"(type="centroType"/>( ((((((<xs:element(name="orbita"(type="orbitaType"( ((((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>( ((((((<xs:element(ref="cometa"(minOccurs="0"(( ((((((((((((((((((maxOccurs="unbounded"/>( ((((</xs:sequence>( ((</xs:complexType>( </xs:element>( Equivalente, em DTD, a (centro, orbita*, cometa*)
  • 35. 28 www.argonavis.com.br <xs:choice> ●  Conteúdo de tipos complexos ●  Equivalente ao conteúdo (a | b | c) no DTD <xs:complexType(name="orbitaType">( ((<xs:choice>( ((((<xs:element(name="estrela"(type="estrelaType"/>( ((((<xs:element(name="planeta"(type="sateliteType"/>( ((((<xs:element(name="asteroide"(type="sateliteType"(( ((((((((((((((((minOccurs="0"(maxOccurs="unbounded"/>( ((</xs:choice>( ((<xs:attribute(name="raioMedUA"(type="xs:decimal"/>( </xs:complexType>( Equivalente a (estrela | planeta | asteroide*)
  • 36. 1 www.argonavis.com.br definição e composição de esquemas instâncias documentação © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 37. 2 www.argonavis.com.br Cabeçalho e namespace ●  Todas as declarações do XML Schema estão contidas em um elemento <xs:schema> que deve definir: ●  Um atributo xmlns, declarando o namespace do XML Schema, geralmente associando-o a um prefixo (xs ou xsd). ●  Um atributo targetNamespace*, contendo uma URI que identifique o namespace da linguagem-alvo que o XML Schema está descrevendo ●  Um segundo atributo xmlns*, declarando o namespace da linguagem-alvo, possivelmente associando-o a um prefixo. <xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"* ****targetNamespace="http://www.empresa.com/pontodevenda"** ****xmlns="http://www.empresa.com/pontodevenda">* Se a linguagem não usar namespaces: <xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema”>*
  • 38. 3 www.argonavis.com.br Composição de esquemas ●  <xs:include> insere componentes de esquema do mesmo namespace localizados em outros arquivos ●  Atributo schemaLocation informa a URI onde se encontra o arquivo que será incluído *<xs:include2schemaLocation="esquema.xsd"/> ●  <xs:import> importa componentes de namespaces diferentes ●  Atributo namespace é obrigatório ●  Atributo schemaLocation é opcional *<xs:import2namespace="http://ns.com"*schemaLocation="esquema.xsd"/> ●  <xs:redefine> permite redefinir componentes
  • 41. 6 www.argonavis.com.br <xs:import> : o outro lado <xs:schema*xmlns:xs="http://www.w3.org/2001/XMLSchema"** ****targetNamespace="http://www.empresa.com/pontodevenda/tipos"* ****xmlns="http://www.empresa.com/pontodevenda/tipos"* ****xmlns:pdv="http://www.empresa.com/pontodevenda">* ****<xs:import*namespace="http://www.empresa.com/pontodevenda"** ********schemaLocation="ofertaElementsAll.xsd"></xs:import>* ****<xs:complexType*name="ofertaType">* ********<xs:sequence>* ************<xs:element*ref="pdv:codigo"/>* ************<xs:element*ref="pdv:preco"/>* ************<xs:element*ref="pdv:itens"/>* ********</xs:sequence>* ********<xs:attribute*name="validade"*use="required"*type="xs:NMTOKEN"/>* ****</xs:complexType>* ****<xs:complexType*name="codigoType">...</xs:complexType>* ****<xs:simpleType*name="precoType">...</xs:simpleType>* ****<xs:simpleType*name="itemType">...</xs:simpleType>* </xs:schema>* <xs:schema*** ****targetNamespace="http://www.empresa.com/pontodevenda"*...*>*
  • 42. 7 www.argonavis.com.br Defaults ●  <xs:schema> contém atributos que definem defaults para tipos e elementos. ●  attributeFormDefault="qualified|unqualified" ●  elementFormDefault="qualified|unqualified" ●  blockDefault="#all|substitution|extension| restriction" ●  finalDefault="#all|extension|restriction|list|union" ●  Determinam comportamento default em declarações e definição de componentes ●  (Mais sobre isto adiante)
  • 43. 8 www.argonavis.com.br Instâncias associadas a um XML Schema ●  Uma instância pode ser formalmente vinculada a uma instância através de atributos globais ●  Namespace XML Schema Instance: http://www.w3.org/2001/XMLSchema-instance ●  Este namespace deve ser atribuído a prefixo para que se possa usar seus 4 atributos: ●  schemaLocation – para vincular um ou mais XML Schemas à instância ●  noNamespaceSchemaLocation – para vincular a um XML Schemas que não usa namespace ●  nil e type – usados em elementos e atributos
  • 45. 10 www.argonavis.com.br Múltiplos namespaces ●  Schemas compostos requerem a declaração de múltiplos namespaces na instância ●  Esquema principal ●  Instância <xs:schema** ****targetNamespace="http://cosmos.org.br"** ****xmlns:cm="http://cosmos.org.br/com"** ****xmlns:st="http://cosmos.org.br/sat"** ****xmlns="http://cosmos.org.br"** ****xmlns:xs="http://www.w3.org/2001/XMLSchema">* <se:sistemaEstelar*xmlns:se="http://cosmos.org.br"* ***xmlns:sat="http://cosmos.org.br/sat"* ***xmlns:cmt="http://cosmos.org.br/com"* ***xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"** ***xsi:schemaLocation="http://cosmos.org.br*******sistema.xsd* ***********************http://cosmos.org.br/sat***satelites.xsd* ***********************http://cosmos.org.br/com***cometas.xsd">*
  • 46. 11 www.argonavis.com.br Exemplo com múltiplos namespaces <html*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"* ****xsi:schemaLocation="http://www.w3.org/1999/xhtml22xhtml.xsd* ******************http://www.empresa.com/pontodevenda2oferta.xsd"* ****xmlns="http://www.w3.org/1999/xhtml"**** ****xmlns:pdv="http://www.empresa.com/pontodevenda">* ****<head>...</head>* ****<body><div*class="oferta”>* ********<pdv:oferta*validade="2010Q07Q22">* ************<pdv:codigo*numero="4599"*tipo="T"/>* ************<pdv:preco>15.2</pdv:preco>* ************<pdv:itens>14</pdv:itens>* ********</pdv:oferta>* ****</div></body>* </html>* <html*xmlns:xsi="http://www.w3.org/2001/XMLSchemaQinstance"* ****xsi:schemaLocation="http://www.w3.org/1999/xhtml22xhtml.xsd* ******************http://www.empresa.com/pontodevenda2oferta.xsd"* ****xmlns="http://www.w3.org/1999/xhtml"*>* ****<head>...</head><body><div*class="oferta”>* ********<oferta*validade="2010Q07Q22"*xmlns="http://www.empresa.com/pontodevenda">* ************<codigo*numero="4599"*tipo="T"/>* ************<preco>15.2</preco>* ************<itens>14</itens>* ********</oferta>* ****</div></body>* </html>*
  • 48. 13 www.argonavis.com.br Anotações ●  <xs:annotation> ●  Mecanismo de documentação e extensão do XML Schema ●  Pode ser usado em qualquer elemento do XML Schema ●  Dois sub-elementos: <xs:documentation> e <xs:appinfo> ●  <xs:documentation> ●  Para documentação que será lida por humanos ●  <xs:appinfo> ●  Ponto de extensão para informações de processamento que serão lidas por máquina
  • 50. 1 www.argonavis.com.br elementos e atributos © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 51. 2 www.argonavis.com.br Elementos ●  Declarados através de <xs:element> ●  Declaração (global ou local) deve ter atributo name ●  Pode conter elemento <xs:simpleType> ou <xs:complexType>, ou atributo type com referência para tipo nativo ou global ●  Referência a um elemento global através de atributo ref, em definições de tipos complexos
  • 52. 3 www.argonavis.com.br <xs:element> ●  Define um elemento ●  Deve estar associado a um tipo de dados ou <xs:complexType-name="cometaType">- --<xs:attribute-name="id"-type="xs:ID"-use="required"/>- --<xs:attribute-name="nome"-type="xs:string"-use="required"/>- --<xs:attribute-name="planetas"-type="xs:IDREFS"/>- </xs:complexType>- <xs:element-name="cometa"-type="cometaType"-/>- <xs:element-name="cometa">- --<xs:complexType>- ----<xs:attribute-name="id"-type="xs:ID"-use="required"/>- ----<xs:attribute-name="nome"-type="xs:string"-use="required"/>- ----<xs:attribute-name="planetas"-type="xs:IDREFS"/>- --</xs:complexType>- </xs:element>-
  • 53. 4 www.argonavis.com.br Exemplo <xs:element> <xs:schema-...->- ----<xs:element-name="oferta"-type="ofertaType"-/>- ----<xs:element-name="preco">- --------<xs:simpleType>- ------------<xs:restriction-base="xs:decimal">- ----------------<xs:fractionDigits-value="2"-/>- ------------</xs:restriction>- --------</xs:simpleType>- ----</xs:element>- ----<xs:complexType-name="ofertaType">- --------<xs:sequence>- ------------<xs:element-name="codigo"-type="codigoType"/>- ------------<xs:element-ref="preco"/>- ------------<xs:element-name="itens">- ----------------<xs:simpleType>-...-</xs:simpleType>- ------------</xs:element>- --------</xs:sequence>- ----</xs:complexType>- ----<xs:complexType-name="codigoType">...</xs:complexType>- Referência a elemento global Declaração local com referência a tipo global codigoType Declaração local com definição local de um simpleType Declaração global com referência a tipo global ofertaType Declaração global com definição local de um simpleType
  • 54. 5 www.argonavis.com.br 4 maneiras de associar um tipo a um elemento <xs:element-name="endereco"-type="xsd:string"-/>- <xs:element-name="tudo"-/>- <xs:element-name="cpf"-type="CpfType"-/>- <xs:element-name="itens">- ----<xs:simpleType>- --------<xs:restriction-base="xs:integer">- ------------<xs:minInclusive-value="1"/>- ------------<xs:maxInclusive-value="20"/>- --------</xs:restriction>- ----</xs:simpleType>- </xs:element>-
  • 55. 6 www.argonavis.com.br Valores default para elementos ●  Valores default podem ser atribuídos caso o elemento esteja ausente ou vazio <xs:element-ref="preco"-default="0.00"/>- <xs:element-name="itens"-type="itensType"-default="10">- <oferta-validade="2010J10J10">- ----<codigo-numero="4599"-tipo="T"-/>- ----<itens-/>- </oferta>- <oferta-validade="2010J10J10">- ----<codigo-numero="4599"-tipo="T"-/>- 7777<preco>0.00</preco>- ----<itens>10</itens>- </oferta>- Documento original Documento após o processamento
  • 56. 7 www.argonavis.com.br Atributos ●  Geralmente declarados em tipos complexos ●  Localmente, no contexto do tipo que será associado a um elemento ●  Podem ser declarados globalmente ●  Para esquemas que fornecem atributos globais (geralmente prefixados) ●  Dentro de tipos complexos, são declarados após o conteúdo ●  Declaram-se atributos com <xs:attribute>
  • 57. 8 www.argonavis.com.br <xs:attribute> ●  Define um atributo ●  Pode estar embutido na definição de um tipo ou globalmente acessível (para reutilização) <xs:attribute-name="raio"-type="xs:decimal"/>- <xs:complexType-name="sateliteType">- --<xs:complexContent>- ----<xs:extension-base="astroType">- -----<xs:attribute-ref="raio"-use="required"/>- -----<xs:attribute-name="anoDesc"-type="xs:int"/>- ----</xs:extension>- --</xs:complexContent>- </xs:complexType>-
  • 60. 11 www.argonavis.com.br 4 maneiras de declarar atributos <xs:attribute-name="validade"-type="xs:NMTOKEN"/>- <xs:attribute-name="tudo"-/>- <xs:attribute-name="tipo"-use="required">- ----<xs:simpleType>- --------<xs:restriction-base="xs:NMTOKEN">- ------------<xs:enumeration-value="T"-/>- ------------<xs:enumeration-value="P"-/>- ------------<xs:enumeration-value="U"-/>- --------</xs:restriction>- ----</xs:simpleType>- </xs:attribute>-- <xs:attribute-name="validade"-- --------------type="xs:date"--- --------------default="1990I01I01"7/>-
  • 61. 1 www.argonavis.com.br tipos simples uniões e listas tipos nativos © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 62. 2 www.argonavis.com.br Tipos simples ●  Elementos ou atributos podem ter conteúdo definido como tipo simples ●  Tipos simples podem ser: ●  valores atômicos ●  listas ●  uniões ●  São definidos com o elemento <xs:simpleType> ●  São tipos complexos ●  Tipos que contém outros elementos ●  Tipos que contém atributos (mesmo que vazios)
  • 63. 3 www.argonavis.com.br Tipos base e derivação por restrição ●  Todo tipo simples é uma derivação por restrição de outro tipo simples, que é chamado de tipo base. ●  Não é possível estender tipos simples ●  A restrição é feita com <xs:restriction> ●  Pode ser sobre tipos primitivos ou nativos ●  Pode ser sobre tipos criados no próprio esquema ou importados ●  Restrição reduz o tamanho do tipo usando facetas (limites, comprimentos, etc)
  • 64. 4 www.argonavis.com.br Exemplos com <xs:restriction> em tipos simples <xs:element*name="itens">* ****<xs:simpleType>* ********<xs:restriction*base="xs:integer">* ************<xs:minInclusive*value="1"/>* ************<xs:maxInclusive*value="20"/>* ********</xs:restriction>* ****</xs:simpleType>* </xs:element>* <xs:attribute*name="tipo"*use="required">* ****<xs:simpleType>* ********<xs:restriction*base="xs:NMTOKEN">* ************<xs:enumeration*value="T"*/>* ************<xs:enumeration*value="P"*/>* ************<xs:enumeration*value="U"*/>* ********</xs:restriction>* ****</xs:simpleType>* </xs:attribute>* Facetas
  • 65. 5 www.argonavis.com.br Facetas ●  Limites ●  <xs:minExclusive>, <xs:minInclusive>, ●  <xs:maxExclusive>, <xs:maxInclusive> ●  Comprimento ●  <xs:length>, <xs:<minLength>, <xs:maxLength> ●  Quantidade de dígitos ●  <xs:totalDigits>, <xs:fractionDigits> ●  Conversão de espaços ●  <xs:whitespace> ●  Enumeração ●  <xs:enumeration> ●  Expressão regular ●  <xs:pattern>
  • 66. 6 www.argonavis.com.br Facetas de limites numéricos ●  Usada em tipos numéricos ●  Pode-se usar um e no máximo dois elementos, um mínimo, e um máximo ●  <xs:minExclusive value="valor"> ●  Limite inferior é maior que valor ●  <xs:minInclusive value="valor"> ●  Limite inferior é maior ou igual a valor ●  <xs:maxExclusive value="valor"> ●  Limite superior é menor que valor ●  <xs:maxInclusive value="valor"> ●  Limite superior é menor ou igual a valor
  • 67. 7 www.argonavis.com.br Facetas de comprimento ●  Usado em strings ●  Deve ser um número positivo ●  <xs:length> ●  Comprimento exato ●  <xs:minLength> ●  Comprimento mínimo ●  <xs:maxLength> ●  Comprimento máximo
  • 68. 8 www.argonavis.com.br Facetas de quantidade de dígitos ●  Usado em números ●  <xs:totalDigits> ●  Dígitos totais ●  <xs:fractionDigits> ●  Dígitos depois do ponto decimal ●  Deve ser menor ou igual a totalDigits
  • 69. 9 www.argonavis.com.br Facetas de política de conversão de espaços ●  Define a política de tratamento de espaços ●  <xs:whitespace> ●  O atributo value pode ter os valores ●  preserve – preserva os espaços em branco, novas lihas, tabulações, etc. ●  replace – substitui as novas-linhas e tabulações por um espaço, e preserva os outros espações ●  collapse – substitui múltiplos espaços por um espaço, e elimina os espaços antes e depois
  • 70. 10 www.argonavis.com.br Enumeração ●  <xs:enumeration> ●  Pode aparecer várias vezes ●  Cada <xs:enumeration> inclui um valor que pode ser atribuído ao tipo ●  Os valores de cada <xs:enumeration> devem ser compatíveis com o tipo base.
  • 71. 11 www.argonavis.com.br Expressão regular ●  <xs:pattern> ●  Permite que se passe, no atributo value, uma expressão regular que irá filtrar e restringir o tipo base ●  Exemplo ●  <xs:pattern value="((d+s*){3})*” /> ●  Veja mais detalhes no módulo sobre expressões regulares
  • 72. 12 www.argonavis.com.br Uniões ●  Combinam vários tipos em um ●  <xs:union> <xs:simpleType*name="TamanhoType">* 4444<xs:union>* ********<xs:simpleType>* ************<xs:restriction*base="xs:integer">* ****************<xs:minInclusive*value="1"></xs:minInclusive>* ****************<xs:maxInclusive*value="16"></xs:maxInclusive>* ************</xs:restriction>* ********</xs:simpleType>* ********<xs:simpleType>* ************<xs:restriction*base="xs:token"* ****************<xs:enumeration*value="P"></xs:enumeration>* ****************<xs:enumeration*value="M"></xs:enumeration>* ****************<xs:enumeration*value="G"></xs:enumeration>* ****************<xs:enumeration*value="XG"></xs:enumeration>* ************</xs:restriction>* ********</xs:simpleType>* 4444</xs:union>* </xs:simpleType>*
  • 73. 13 www.argonavis.com.br Uniões com memberTypes ●  Pode-se formar uniões por referência, se tipos forem globais, com atributo memberTypes <xs:simpleType*name="TamanhoType">* ****<xs:union*memberTypes="TamanhoNumericoType*"*/>* ****<xs:simpleType>* ********<xs:restriction*base="xs:token"* ************<xs:enumeration*value="P"></xs:enumeration>* ************<xs:enumeration*value="M"></xs:enumeration>* ************<xs:enumeration*value="G"></xs:enumeration>* ************<xs:enumeration*value="XG"></xs:enumeration>* ********</xs:restriction>* ****</xs:simpleType>* ****</xs:union>* </xs:simpleType>** <xs:simpleType*name="TamanhoType">* ****<xs:union*memberTypes="TamanhoNumericoType*TamanhoLetraType"*/>* </xs:simpleType>*
  • 74. 14 www.argonavis.com.br Listas ●  Listas são valores atômicos separados por espaços <polygon*coords="100*0*250*100*0*250*150*50*0*50"*/>* <time*tamanhos="M*G*XG*P*M*G*G*XG*XG*G*G*G*M*M*G"*/>* ●  <xs:list> ●  Cria-se uma lista com ●  valores de um tipo simples local, ou ●  referencia um tipo global usando o atributo itemType
  • 77. 17 www.argonavis.com.br Tipos primitivos e exemplos de uso • *xs:string:** * * * *"um*texto",*"abc"* • *xs:boolean:* * * * *true*ou*false* • *xs:decimal:* * * * *M12,*12.3333* • *xs:float*e*xs:double:* *200.56,*3.12eM2* • *xs:duration:* * * * *MP3Y9M8D2H42M55S* • *xs:dateTime:* * * * *2010M12M06T08:30:55M03:00* • *xs:time:* * * * * *08:30:55* • *xs:date:* * * * * *2010M12M06* • *xs:gYear:* * * * * *2010* • *xs:gYearMonth:* * * *2010M12* • *xs:gMonthDay:** * * *MM12M06* • *xs:gMonth:** * * * *MM12* • *xs:gDay:* * * * * *MMM06* • *xs:hexBinary:** * * *0FB8* • *xs:base64Binary: * * *0FB8* • *xs:anyURI:** * * * *http://www.xyz.com* • *xs:QName:* * * * * *pdv:preco* • *xs:NOTATION**
  • 78. 1 www.argonavis.com.br tipos complexos modelos de conteúdo grupos © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 79. 2 www.argonavis.com.br O que são tipos complexos ●  No exemplo acima possuem tipos complexos os elementos: ●  <curso>, <titulo>, <carga-horaria>, <pre-requisito> e <topicos> ●  E possuem tipos simples os elementos: ●  <titulo> e <item> <curso'grupo="xml"'assunto="1"'subgrupo="0"'fragmento="0">' ''''<titulo>XML:'uma'introdução'prática</titulo>' ''''<cargaBhoraria'horas="24"/>' ''''<preBrequisito'tipo="obrigatorio">Conhecimento'elementar'de' alguma'linguagem'de'markup'como'HTML</preBrequisito>' ''''<topicos>' ''''''''<item>Introdução'a'XML</item>' ''''''''<item>Como'escrever'documentos'XML</item>' ''''''''<item>Estrutura'de'uma'página'XML</item>' ''''''''<item>Como'especificar'uma'linguagem'usando'DTD</item>' ''''''''<item>XML'Namespaces</item>' ''''</topicos>' </curso>'
  • 80. 3 www.argonavis.com.br Como construir ●  Um tipo complexo pode ser construído de três formas: ●  A partir de conteúdo simples (elemento <xs:simpleContent>) ●  Através da definição de um grupo de elementos (<xs:all>, <xs:group>, <xs:choice>, <xs:sequence>) ●  Através da extensão de outro tipo complexo (<xs:complexContent>)
  • 81. 4 www.argonavis.com.br Conteúdos ●  Um tipo complexo pode conter quatro tipos diferentes de conteúdo ●  Conteúdo simples ●  Conteúdo de elementos ●  Conteúdo misto ●  Conteúdo vazio
  • 82. 5 www.argonavis.com.br Conteúdo simples ●  Permite apenas texto ●  A sintaxe para incluir atributos requer declarar uma <xs:extension> para o conteúdo simples, dentro do qual se declara o <xs:attribute> <preBrequisito'tipo="obrigatorio">Conhecimento'elem...</item>' <xs:element'name="preBrequisito">' ''''<xs:complexType>' !!!!!!!!<xs:simpleContent>' ''''''''''''<xs:extension'base="xs:string">' '''''''''''''''<xs:attribute'name="tipo"'type="xs:NCName"/>' ''''''''''''</xs:extension>' !!!!!!!!</xs:simpleContent>' ''''</xs:complexType>' </xs:element>'
  • 83. 6 www.argonavis.com.br Conteúdo de elementos ●  Só aceita elementos ●  Qualquer texto precisa estar dentro de um sub- elemento. <topicos>' ''''<item>Introdução'a'XML</item>' ''''<item>Como'escrever'documentos'XML</item>' ''''<item>Estrutura'de'uma'página'XML</item>' ''''<item>Como'especificar'uma'linguagem'usando'DTD</item>' ''''<item>XML'Namespaces</item>' </topicos>' <xs:element'name="topicos">' ''''<xs:complexType>' !!!!!!!!<xs:sequence>' ''''''''''''<xs:element'maxOccurs="unbounded"'ref="item"/>' !!!!!!!!</xs:sequence>' ''''</xs:complexType>' </xs:element>'
  • 84. 7 www.argonavis.com.br Conteúdo misto ●  Usa o atributo mixed="true" ao definir o tipo complexo <descricao>O'curso'<codigo/>:<titulo/>'proporciona'uma' introdução...'veja'as'referências'<link'href="#ref1">[1] </link>'e'...</descricao>' <xs:element'name="descricao">' ''''<xs:complexType>' ''''''''<xs:choice'maxOccurs="unbounded"'mixed="true">' ''''''''''''<xs:element'ref="titulo"/>' ''''''''''''<xs:element'ref="codigo"/>' ''''''''''''<xs:element'ref="link"/>' ''''''''</xs:choice>' ''''</xs:complexType>' </xs:element>'
  • 85. 8 www.argonavis.com.br Conteúdo vazio ●  Nenhum conteúdo ●  É implicitamente definido ao não declarar nenhum conteúdo no tipo (exceto atributos) <cargaBhoraria'horas="24"/>' <xs:element'name="cargaBhoraria">' ''''<xs:complexType>' ''''''''<xs:attribute'name="horas"'' ''''''''''''''''''''''type="xs:integer"/>' ''''</xs:complexType>' </xs:element>'
  • 86. 9 www.argonavis.com.br Modelos de conteúdo para tipos complexos ●  Para definir conteúdo formado por elementos, é preciso usar um modelo de conteúdo. ●  Há três tipos, cada um definido por um elemento filho de <xs:complexType>: ●  <xs:sequence> ●  <xs:choice> ●  <xs:all> ●  Não é possível declarar elementos diretamente abaixo de <xs:complexType> ●  É preciso usar os elementos acima.
  • 87. 10 www.argonavis.com.br <xs:sequence> ●  Um <xs:sequence> é usado para indicar a ordem em que os elementos devem ser usados. <xs:complexType'name="sistemaEstelarType">' !!!!<xs:sequence>' ''''''''<xs:element'name="centro"'type="centroType"/>' ''''''''<xs:element'name="orbita"'type="orbitaType"'' ''''''''''''minOccurs="0"'maxOccurs="unbounded"/>' ''''''''<xs:element'ref="cm:cometa"'' ''''''''''''minOccurs="0"'maxOccurs="unbounded"/>' !!!!</xs:sequence>' </xs:complexType>' <sistemaEstelar'type="sistemaEstelarType">' ''''<centro>...</centro>' ''''<cm:cometa>...</cm:cometa>' ''''<cm:cometa>...</cm:cometa>' ''''<orbita>...</orbita>' ''''<cm:cometa>...</cm:cometa>' </sistemaEstelar>' <sistemaEstelar'type="sistemaEstelarType">' ''''<centro>...</centro>' ''''<cm:cometa>...</cm:cometa>' ''''<cm:cometa>...</cm:cometa>' </sistemaEstelar>' inválido válido
  • 88. 11 www.argonavis.com.br <xs:choice> ●  Um <xs:choice> é usado para escolher um, dentre vários elementos ●  pode ser usado para permitir a inclusão de elementos em qualquer ordem, se o atributo maxOccurs for "unbounded” ●  Blocos <xs:choice> e <xs:sequence> podem ser aninhados um dentro do outro para permitir modelos de conteúdo mais complexos <xs:complexType'name="orbitaType">' !!!!<xs:choice!maxOccurs="unbounded">' ''''''''<xs:element'name="estrela"'type="estrelaType"/>' ''''''''<xs:element'name="planeta"'type="st:sateliteType"/>' ''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>' !!!!</xs:choice>' ''''<xs:attribute'name="raioMedUA"'type="xs:decimal"/>' </xs:complexType>'
  • 89. 12 www.argonavis.com.br Grupos: <xs:group> ●  Grupos podem ser definidos globalmente no primeiro nível através do elemento <xs:group> ●  deve ter um nome e um conteúdo <xs:choice>, <xs:sequence>, ou <xs:all> ●  Promove o reuso! <xs:schema'...>' !!!!<xs:group!name="grupoCorpos">' ''''''''<xs:choice'maxOccurs="unbounded">' ''''''''''''<xs:element'name="estrela"'type="estrelaType"/>' ''''''''''''<xs:element'name="planeta"'type="st:sateliteType"/>' ''''''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>' ''''''''</xs:choice>' '''!</xs:group>' ''''…' ''''<xs:complexType'name="orbitaType">' !!!!!!!!<xs:group!ref="grupoCorpos"!/>' ''''''''<xs:attribute'name="raioMedUA"'type="xs:decimal"/>' ''''</xs:complexType>'
  • 90. 13 www.argonavis.com.br 4 formas de incluir atributos em tipos complexos <xs:complexType'name="orbitaType">' ''''<xs:group'ref="grupoCorpos"'/>' !!!!<xs:attribute!ref="raio"!/>' </xs:complexType>' <xs:complexType'name="orbitaType">' ''''<xs:choice>' ''''''''<xs:element'name="estrela"'type="estrelaType"/>' ''''''''<xs:element'name="planeta"'type="st:sateliteType"/>' ''''''''<xs:element'name="asteroide"'type="st:sateliteType"/>' ''''</xs:choice>' !!!!<xs:attribute!name="raioMedUA"!type="xs:decimal"/>' </xs:complexType>' <xs:complexType>' !!!!<xs:attribute!name="horas"!type="xs:integer"/>' </xs:complexType>' <xs:complexType>' ''''<xs:simpleContent>' ''''''''<xs:extension'base="xs:string">' !!!!!!!!!!!!<xs:attribute!name="tipo"!type="xs:NCName"/>' ''''''''</xs:extension>' ''''</xs:simpleContent>' </xs:complexType>'
  • 91. 14 www.argonavis.com.br Grupos de atributos ●  <xs:attributeGroup> ●  declarado globalmente cria um grupo de atributos que podem ser incluidos nos elementos <xs:attributeGroup'name="codBcurso">' ''''<xs:attribute'name="assunto"'use="required"'type="xs:integer"/>' ''''<xs:attribute'name="fragmento"'use="required"'type="xs:integer"/>' ''''<xs:attribute'name="grupo"'use="required"'type="xs:NCName"/>' ''''<xs:attribute'name="subgrupo"'use="required"'type="xs:integer"/>' </xs:attributeGroup>' <xs:element'name="curso">' ''''<xs:complexType>' ''''''''<xs:sequence>' ''''''''''''<xs:element'ref="titulo"/>' ''''''''''''<xs:element'ref="topicos"/>' ''''''''</xs:sequence>' ''''''''<xs:attributeGroup!ref="codDcurso"!/>!' ''''</xs:complexType>' </xs:element>'
  • 92. 1 www.argonavis.com.br extensão restrição substituição © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 93. 2 www.argonavis.com.br Derivação de tipos complexos ●  Pode ser feita de duas formas ●  Extensão <xs:extension> ●  Restrição <xs:restriction> ●  Elementos são incluídos dentro de um <xs:simpleContent> ou <xs:complexContent>
  • 94. 3 www.argonavis.com.br Extensão de tipos complexos ●  No modelo de conteúdo simples ●  Extensão para acrescentar atributos ●  No modelo de conteúdo complexo ●  Extensão para acrescentar atributos ●  Extensão para acrescentar elementos
  • 95. 4 www.argonavis.com.br Extensão em conteúdo simples ●  Para inclusão de um atributo ●  Exemplo de uso !<xsd:complexType!name="LarguraType">! !!!!!!!!<xsd:simpleContent>! !!!!!!!!!!!!<xsd:extension!base="xsd:integer">! !!!!!!!!!!!!!!!!<xsd:attribute!name="unidade"!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!type="UnidadesType"!/>! !!!!!!!!!!!!</xsd:extension>!! !!!!!!!!</xsd:simpleContent>! !!!!</xsd:complexType>! !!!!<xsd:element!ref="LarguraType"!/>! <largura!unidade="cm">123</largura>! Conteúdo simples não é afetado
  • 96. 5 www.argonavis.com.br Extensão em conteúdo complexo ●  Podem adicionar elementos no final do modelo de conteúdo do tipo base ●  O tipo resultante combina os elementos existentes seguidos pelos novos como em um <xs:sequence> ●  É possível acrescentar novos atributos ●  Não é possível redefinir, alterar ou remover atributos existentes ●  A extensão de grupos <xs:choice> não resulta em um grupo <xs:choice> ●  O efeito é o da criação de um grupo <xs:sequence> contendo os dois grupos <xs:choice>, o anterior seguido pelo novo ●  Resultado: elementos incluídos no tipo estendido só podem aparecer depois dos elementos originais
  • 97. 6 www.argonavis.com.br Exemplo de extensão com <xs:sequence> <xs:complexType!name="ResumidoType">! !!!!<xs:sequence>! !!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!<xs:element!ref="cargaDhoraria"/>! !!!!!!!!<xs:element!ref="preDrequisito"/>! !!!!</xs:sequence>! </xs:complexType>! <xs:complexType!name="CompletoType">! !!!!<xs:extension!base="ResumidoType">! !!!!!!!!<xs:sequence>! !!!!!!!!!!!!<xs:element!ref="descricao"/>! !!!!!!!!!!!!<xs:element!ref="objetivo"/>! !!!!!!!!!!!!<xs:element!ref="topicos"/>! !!!!!!!!</xs:sequence>! !!!!!!!!<xs:attributeGroup!ref="cod>curso"/>!! !!!!</xs:extension>! </xs:complexType>! <xs:complexType>! !!!!<xs:sequence>! !!!!!!!!<xs:sequence>! !!!!!!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!!!!!<xs:element!ref="cargaDhoraria"/>! !!!!!!!!!!!!<xs:element!ref="preDrequisito"/>! !!!!!!!!</xs:sequence>! !!!!!!!!<xs:sequence>! !!!!!!!!!!!!<xs:element!ref="descricao"/>! !!!!!!!!!!!!<xs:element!ref="objetivo"/>! !!!!!!!!!!!!<xs:element!ref="topicos"/>! !!!!!!!!</xs:sequence>! !!!!</xs:sequence>! !!!!<xs:attributeGroup!ref="cod>curso"/>! </xs:complexType>! Resultado equivalente à extensão
  • 98. 7 www.argonavis.com.br Exemplo de extensão com <xs:choice> <xs:complexType!name="ResumidoType">! !!!!<xs:choice>! !!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!<xs:element!ref="cargaDhoraria"/>! !!!!!!!!<xs:element!ref="preDrequisito"/>! !!!!</xs:choice>! </xs:complexType>! <xs:complexType!name="CompletoType">! !!!!<xs:extension!base="ResumidoType">! !!!!!!!!<xs:choice>! !!!!!!!!!!!!<xs:element!ref="descricao"/>! !!!!!!!!!!!!<xs:element!ref="objetivo"/>! !!!!!!!!!!!!<xs:element!ref="topicos"/>! !!!!!!!!</xs:choice>! !!!!!!!!<xs:attributeGroup!ref="cod>curso"/>!! !!!!</xs:extension>! </xs:complexType>! <xs:complexType>! !!!!<xs:sequence>! !!!!!!!!<xs:choice>! !!!!!!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!!!!!<xs:element!ref="cargaDhoraria"/>! !!!!!!!!!!!!<xs:element!ref="preDrequisito"/>! !!!!!!!!</xs:choice>! !!!!!!!!<xs:choice>! !!!!!!!!!!!!<xs:element!ref="descricao"/>! !!!!!!!!!!!!<xs:element!ref="objetivo"/>! !!!!!!!!!!!!<xs:element!ref="topicos"/>! !!!!!!!!</xs:choice>! !!!!</xs:sequence>! !!!!<xs:attributeGroup!ref="cod>curso"/>! </xs:complexType>! Em elementos do tipo CompletoType nenhuma ocorrência de <carga-horaria> pode vir depois de <descricao>
  • 99. 8 www.argonavis.com.br Extensão de conteúdo misto e vazio ●  A extensão de tipos com conteúdo misto força o tipo derivado a também permitir conteúdo misto ●  É necessário declarar o atributo mixed="true" no tipo derivado ●  Um elemento de conteúdo vazio pode ser estendido para ●  Acrescentar atributos ●  Acrescentar elementos (e, portanto, deixar de ter conteúdo vazio)
  • 100. 9 www.argonavis.com.br Extensão de um tipo vazio <xs:complexType!name="CargaHorariaType>! !!!!<xs:attribute!name="horas"!type="xs:integer"/>! </xs:complexType>! <xs:complexType!name="CargaHorariaComMinutosEFusoHorarioType>! !!!!<xs:extension!base="CargaHorariaType">! !!!!!!<xs:sequence>! !!!!!!!!<xs:element!ref="gmt"!maxOccurs="1">! !!!!!!!!!!!!<xs:simpleType>! !!!!!!!!!!!!!!!!<xs:restriction!base="xs:integer">! !!!!!!!!!!!!!!!!!!!!<xs:maxInclusive>12</xs:maxInclusive>! !!!!!!!!!!!!!!!!!!!!<xs:minInclusive>>12</xs:minInclusive>! !!!!!!!!!!!!!!!!!!!!<xs:restriction>! !!!!!!!!!!!!</xs:simpleType>! !!!!!!!!</xs:element>! !!!!!!</xs:sequence>! !!!!!!<xs:attribute!name="minutos"!type="xs:integer"/>! !!!!</xs:extension>! </xs:complexType>! + um atributo
  • 101. 10 www.argonavis.com.br Restrição de tipos complexos ●  Pode ser realizada através de ●  Remoção ou restrição de atributos (escopo, valores permitidos) ●  Redução de modelos de conteúdo complexos (eliminação de elementos-filho) ●  Redução de modelos de conteúdo simples (restrição de tipo de dados) ●  Exemplo: tornando um atributo positivo e obrigatório <xs:complexType!name="CargaHorariaTypeObrigatoria">! !!!!<xs:simpleContent>! !!!!!!!!<xsd:restriction!base="CargaHorariaType">! !!!!!!!!!!!!<xsd:attribute!name="horas"!! !!!!!!!!!!!!!!!!type="xsd:positiveInteger"!use="required"!/>! !!!!!!!!</xsd:restriction>! !!!!</xs:simpleContent>! </xs:complexType>!
  • 102. 11 www.argonavis.com.br Restrição de conteúdo complexo ●  Requer a repetição de todo o modelo de conteúdo que se deseja manter ●  Elementos que não se repetirem no tipo derivado serão eliminados ●  Instâncias do tipo derivado também precisam ser válidas em relação ao tipo base ●  Restrições formalizadas no novo tipo devem ser possíveis no tipo antigo ●  Restrições não podem ampliar faixas de valores definidas no tipo base: pode apenas mantê-las inalteradas ou torná-las mais restritivas
  • 103. 12 www.argonavis.com.br Exemplo: restrição de conteúdo complexo <xs:complexType!name="CursoResumidoType">! !!!!<xs:complexContent>! !!!!!!!!<xs:restriction!base="CursoCompletoType">! !!!!!!!!!!!!<xs:sequence>! !!!!!!!!!!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!!!!!!!!!<xs:element!ref="carga>horaria"/>! !!!!!!!!!!!!!!!!<xs:element!ref="pre>requisito"/>! !!!!!!!!!!!!</xs:sequence>! !!!!!!!!</xs:restriction>! !!!!</xs:complexContent>! </xs:complexType>! <xs:complexType!name="CursoCompletoType">! !!!!<xs:sequence>! !!!!!!!!<xs:element!ref="titulo"/>! !!!!!!!!<xs:element!ref="cargaDhoraria"/>! !!!!!!!!<xs:element!ref="preDrequisito"/>! !!!!!!!!<xs:element!ref="descricao"/>! !!!!!!!!<xs:element!ref="objetivo"/>! !!!!!!!!<xs:element!ref="topicos"/>! !!!!</xs:sequence>! </xs:complexType>!
  • 104. 13 www.argonavis.com.br Grupos de substituição ●  Fundamentam-se na derivação de tipos para criar uma hierarquia de elementos ●  Similar a linguagens orientadas a objeto ●  Suporta polimorfismo! ●  Permite declarar novos elementos como substitutos de esquemas e namespaces ●  Herda-se o modelo de conteúdo, que pode ser alterado ●  Exemplo ●  Tipo base: <produto> ●  Tipos de produto: <publicacao>, <roupa>, <veiculo> podem ser usados quando o esquema pede um <produto> ●  Tipos de <publicacao>: <livro>, <revista>, <jornal> podem ser usados no lugar de <publicacao> ou de <produto>
  • 105. 14 www.argonavis.com.br Como usar grupos de substituição ●  Raiz da hierarquia ●  Qualquer elemento (ou tipo) global ●  Elemento (ou tipo) base ●  Filhos da hierarquia ●  Referem-se à raiz através do atributo substitutionGroup ●  Compatibilidade ●  Tipo de membros de um grupo de substituição precisam ter tipos iguais ou derivados da base
  • 106. 15 www.argonavis.com.br Exemplo de grupos de substituição: tipos ●  Declaração normal de uma hierarquia de tipos <xs:complexType!name="ProdutoType">! !!!!<xs:sequence>! !!!!!!!!<xs:element!ref="preco"/>! !!!!!!!!<xs:element!ref="codigo"/>! !!!!</xs:sequence>! </xs:complexType>! <xs:complexType!name="PublicacaoType">! !!!!<xs:complexContent>! !!!!!!!!<xs:extension!base="ProdutoType">! !!!!!!!!!!!!<xs:sequence>! !!!!!!!!!!!!!!!!<xs:element!name="autores"!type="AutoresType"/>! !!!!!!!!!!!!!!!!<xs:element!name="formato"!type="FormatoPubType"!/>! !!!!!!!!!!!!!!!!<xs:element!name="titulo"!type="xs:string"/>! !!!!!!!!!!!!</xs:sequence>! !!!!!!!!</xs:extension>! !!!!</xs:complexContent>! </xs:complexType>! PublicacaoType! ProdutoType!
  • 107. 16 www.argonavis.com.br PublicacaoType! ProdutoType! ProdutoType! "dvdDType"! Exemplos de grupos de substituição: elementos <xs:element!name="dvd"!substitutionGroup="produto">! !<xs:complexType>! !!<xs:complexContent>! !!!<xs:extension!base="ProdutoType">! !!!!<xs:sequence>! !!!!!<xs:element!!name="formato"!! ! ! ! !!! !type="FormatoDVDType"!/>! !!!!</xs:sequence>! !!!</xs:extension>! !!</xs:complexContent>! !</xs:complexType>! </xs:element>! <xs:element!name="produto"!!!!type="ProdutoType"/>! <xs:element!name="publicacao"!type="PublicacaoType"! !!!!!!!!!!!!!!!!!!!!!!!!!!!substitutionGroup="produto"/>! <xs:element!name="caderno"!substitutionGroup="produto"/>! produto! caderno!publicacao! dvd!
  • 108. 17 www.argonavis.com.br Uso de grupos de substituição !<produtos>! !!!!!!!!<produto>! !!!!!!!!!!!!<codigo>123</codigo>! !!!!!!!!!!!!<preco>10.00</preco>! !!!!!!!!</produto>! !!!!!!!!<publicacao>! !!!!!!!!!!!!<codigo>912</codigo>! !!!!!!!!!!!!<preco>31.00</preco>! !!!!!!!!!!!!<titulo>A!Origem!das!Especies</titulo>! !!!!!!!!!!!!<autores><autor>Charles!Darwin</autor></autores>! !!!!!!!!!!!!<formato!encadernacao="capaDdura"!dimensoes="16.3!12.5!2.8"!/>! !!!!!!!!</publicacao>! !!!!!!!!<dvd>! !!!!!!!!!!!!<codigo>778</codigo>! !!!!!!!!!!!!<preco>19.90</preco>! !!!!!!!!!!!!<formato!area="0"!/>! !!!!!!!!</dvd>! !!!!!!!!<caderno>! !!!!!!!!!!!!<codigo>834</codigo>! !!!!!!!!!!!!<preco>15.00</preco>! !!!!!!!!</caderno>! </produtos>!
  • 109. 18 www.argonavis.com.br Elementos e tipos abstratos e finais ●  O controle de acesso em grupos de substituição pode ser declarado no tipo base ou elemento ●  final="valor" ●  Define o tipo ou elemento como final para diferentes tipos de derivação ●  #all – impede qualquer tipo de derivação ●  abstract="true" ●  declara que um elemento é cabeça de um grupo de substituição mas não pode ser usado diretamente ●  Elementos na instância só podem ser usados se forem de componentes derivados do grupo de substituição
  • 110. 1 www.argonavis.com.br chaves referências cruzadas © 2002, 2005, 2008 Helder da Rocha (helder.darocha@gmail.com) X170
  • 111. 2 www.argonavis.com.br Identificadores ●  Componentes que podem ser identificados por chaves primárias ou identificadores unívocos ●  Referenciáveis dentro ou fora do esquema ou instância ●  <xs:unique>, <xs:key> e <xs:keyref> ●  Vale para elementos ou atributos ●  Muito mais abrangentes que ID e IDREF (DTD) ●  Identificador é aplicado em contexto localizado através de XPath ●  Pode ter um ou mais campos que compõem o elemento ou chave unívoca
  • 112. 3 www.argonavis.com.br Identificador unívoco simples ●  O elemento <xs:unique> define um elemento que tem conteúdo que não se repete ●  considerando os outros elementos definidos no mesmo contexto <xs:element*name="pedido"*type="PedidoType">* ****<xs:unique*name="codigoProduto">* ********<xs:selector*xpath="*/produto"/>* ********<xs:field*xpath="@codigo"/>* ****</xs:unique>* </xs:element>*
  • 113. 4 www.argonavis.com.br Identificador unívoco composto ●  É possível também definir como unívoco um elemento com base nos valores de mais de um campo (elemento ou atributo) <xs:element*name="pedido"*type="PedidoType">* **<xs:unique*name="codigoProdutoPedido">* ******<xs:selector*xpath="*/pedido"/>* ******<xs:field*xpath="itens/produto/@codigo"/>* ******<xs:field*xpath="@codigo"/>* **</xs:unique>* </xs:element>*
  • 114. 5 www.argonavis.com.br <xs:key> e <xs:keyref> ●  Chaves permitem que se realize um mapeamento entre um campo unívoco e uma referência ●  Com um par <xs:key> e <xs:reyref> pode-se estabelecer ligações entre referências e elementos ●  Chaves são definidas usando XPath <xs:element*name="pedido"*type="PedidoType">* ****<xs:keyref*name="codProdutoRef"*refer="codProduto">* ********<xs:selector*xpath="itens/*"/>* ********<xs:field*xpath="@codigo"/>* ****</xs:keyref>* ****<xs:key*name="codProduto">* ********<xs:selector*xpath=".//produto"/>* ********<xs:field*xpath="codigo"/>* ****</xs:key>* </xs:element>*