Namespaces
1
Namespaces



Dados XML são usados para intercâmbio entre
organizações
XML permite autores de documentos criarem suas
próprias tags, definindo a origem dos elementos,
atributos e tipos.
Pode haver uma mesma tag com semântica
diferenciada em diferentes organizações, dificultando
a troca de informação.



Ex.: Documento1: <veiculo> Palio </veiculo>
Documento2: <veiculo> Jornal da Tarde </veiculo>
Usa PI para associar nomes exclusivos a URI
Permitem que seja usado um esquema de atribuição de
nomes ao longo de um conjunto de documentos
2
Solução

Primeira tentativa
<Documento1:veiculo> Palio </Documento1:veiculo>

Segunda tentativa
<www.vendas.com.br/agencia:veiculo>
Palio
</www.vendas.com.br/agencia:veiculo>

Solução final (uso de namespaces)
<ag:agencia xmlns:ag=”www.vendas.com.br/agencia”>
<ag:veiculo> Palio </ag:veiculo>
3
Examplo de Namespace
<html:html xmlns:html=”...” xmlns:math=”...”>
<html:title> George Soros </html:title>
<html:h2> Counting ... </html:h2>
<math:reln>
.....
</math:reln>
</html:html>
4
Namespace default
<html xmlns=”...” xmlns:math=”...”>
<title> George Soros </title>
<h2> Contabilidade ... </h2>
<math:reln>
.....
</math:reln>
</html>
5
Nome de Atributo com Namespace


Atributos podem ter namespace
Exemplo:
<myLink xmlns:xlink=”...”
xlink:type=”simple”
......
</myLink>
6
Exemplo de Namespace para
Banco
<banco xmlns:FB=‘http://www.FirstBank.com’>
…
<FB:agencia>
<FB:nome>Centro </FB:nome>
<FB:cidade>Maceió </FB:cidade>
</FB:agencia>
…
</banco>
7
XML Schema
8
XML Schema




Visa remediar as limitações dos DTDs
Schemas são documentos XML
Schemas ainda usam um DTD para serem
validados
Declaração default:
<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”
9
Propósito de XML Schemas

Especificar:

a estrutura de documentos


“o elemento estudante contém os elementos matrícula,
endereço, curso, nome, ...
os tipos de dados de cada elemento/atributo

“o elemento idade deve ser inteiro entre 0 e 130”
10
Motivação para XML Schemas

Existe insastifação em usar DTDs:

sintaxe diferente


você escreve seu documento XML usando uma sintaxe e o DTD
usando outra sintaxe
capacidade limitada de tipos de dados


DTDs suportam um conjunto muito limitado de tipos de dados.
Não podemos dizer “o elemento <salario> deve ser entre 240
e 3000,00”
Desejo de se ter um conjunto de tipos de dados compatíveis
com aqueles encontrados nos banco de dados
11
Vantagens de XML Schemas

XML Schemas são mais poderosos que DTDs:

Tipos de dados melhor especificado





+41 tipos e a capacidade de se criar tipos de dados definidos
pelo usuário
Escritos em XML (mesma linguagem dos documentos)
Podem expressar conjuntos (sets): um elemento filho pode
estar em qualquer ordem
Podem especificar unicidade (chaves)
Uso de técnicas de orientação a objetos
12

W3C XML Schema Recom. define 3
namespaces:

www.w3.org/2001/XMLSchema


www.w3.org/2001/XMLSchema-datatypes


Vocabulário básico: element, attribute, complexType,
etc.
Contém tipos de dados pré-definidos (ex.date, time, etc.)
www.w3.org/2001/XMLSchema-instance

Contém atributos a serem usados nas instâncias de
documentos
13
Basicamente ...


Todos os elementos devem ser associados a tipos
Os elementos atômicos (folhas da árvore XML) e atributos

Tipos Básicos


Tipos Simples



Definição de tipos primitivos - data, número, string, etc
Uso de simpleType
Definição de estruturas simples a partir dos tipos básicos
Os elementos compostos

Tipos Complexos


Uso de complexType
Definição de estruturas complexas
14
Exemplo:

Conversão do DTD CatalogoLivros.dtd para XML
Schema
<!ELEMENT CatalogoLivros(livro)+>
<!ELEMENT livro(titulo, autor, data, isbn, editora)
<!ELEMENT titulo (#PCDATA)
<!ELEMENT autor (#PCDATA)
<!ELEMENT data (#PCDATA)
<!ELEMENT isbn (#PCDATA)
<!ELEMENT editora (#PCDATA)
15
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org">
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name=“editora" type="xs:string"/>
</xs:schema>
16
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<!ELEMENT CatalogoLivros (livro)+>
<xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<!ELEMENT livro (titulo, autor, data,
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
ISBN, editora)>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<!ELEMENT titulo (#PCDATA)>
<xs:element name=”autor" type="xs:string"/>
<!ELEMENT autor (#PCDATA)>
<xs:element name=”data" type="xs:string"/>
<!ELEMENT data (#PCDATA)>
<xs:element name="ISBN" type="xs:string"/>
<!ELEMENT ISBN (#PCDATA)>
<xs:element name=”editora" type="xs:string"/>
<!ELEMENT editora (#PCDATA)>
</xs:schema>
17
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="editora" type="xs:string"/>
</xs:schema>
Todos XML Schemas
têm "schema" como
elemento raiz..
18
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="editora" type="xs:string"/>
</xs:schema>
Os elementos que
são usados para
criar um XML
Schema vêm do
XMLSchema
namespace
19
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org”
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="editora" type="xs:string"/>
</xs:schema>
indica que os
elementos declarados
neste schema
(CatalogoLivros,
livro, titulo,
autor, data,
ISBN, editora)
vão para este
namespace
20
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org”
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”livro">
<xs:complexType>
<xs:sequence>
<xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”autor" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”data" minOccurs="1" maxOccurs="1"/>
<xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/>
<xs:element ref=”editora" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="editora" type="xs:string"/>
</xs:schema>
O namespace default é
http://www.publishing.org
que é o
targetNamespace!
Este está referenciando
uma declaração de um
elemento livro.
livro em qual
namespace? Uma vez que
não há um qualificador de
namespace, é uma
referência ao elemento livro
no namespace default, que
é o targetNamespace!
21
Como ligar uma instância XML a
um XML Schema?

No elemento raiz do documento XML,
adicionar os atributos

schemaLocation – necessário quando estamos
usando um namespace associado ao nosso
esquema – valor do atributo é o nome do
namespace, um espaço em branco e o caminho
para o arquivo XSD

OU

Neste caso, é necessário também declarar o namespace
noNamespaceSchemaLocation – quando não
usamos namespace – valor do atributo é o
caminho para o arquivo XSD
22
Como ligar uma instância XML a
um XML Schema? (exemplo)


schemaLocation
<report xmlns="http://www.example.com/Report"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/Report
http://www.example.com/Report.xsd“>
...
</report>
noNamespaceSchemaLocation
<endereco xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="endereco.xsd">
...
</endereco>
23
Referenciando um schema numa
instância de um documento XML
<?xml version="1.0"?>
<CatalogoLivros xmlns ="http://www.publishing.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.publishing.org
CatalogoLivros.xsd">
<livro>
<titulo>Meninos de Rua</titulo>
<autor>Jorge Amado</autor>
<data>julho,1976 </data>
<ISBN>94303-12021-43892</ISBN>
<editora>Nossos Livros</editora>
</livro>
...
</CatalogoLivros>
24
Valores Default para
minOccurs e maxOccurs
O valor default para minOccurs é "1"
O valor default para maxOccurs é "1"
<element ref=”titulo" minOccurs="1" maxOccurs="1"/>
Equivalentes!
<element ref=”titulo"/>
25
Esquema alternativo ...
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name=”editora" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
26
Um tipo pode ser nomeado
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" type="CardCatalogueEntry" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="CardCatalogueEntry">
<xs:sequence>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name=”editora" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Tipo
nomeado
27
Observação
<xs:element name="A" type=”ttt"/>
<xs:complexType name=”ttt">
<xs:sequence>
<xs:element name="B" …/>
<xs:element name="C" …/>
</xs:sequence>
</xs:complexType>
Elemento A referencia o
complexType ttt.
é equivalente a
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="B" …/>
<xs:element name="C" …/>
</xs:sequence>
</xs:complexType>
</xs:element>
Elemento A tem a
definição complexType
embutida na declaração do
elemento.
28
Observação 2
Uma declaração de elemento pode ter um atributo type, ou
um complexType elemento filho, mas não pode ter ambos.
<xs:element name="A" type=”ttt">
<xs:complexType>
…
</xs:complexType>
</xs:element>
29
Sumário de declaração de
Elementos (2 formas)
1
<xs:element name="nome" type="type" minOccurs="int" maxOccurs="int"/>
Um tipos simples Um inteiro
Um inteiro não
(ex.., xs:string)
não negativo
negativo ou "unbounded"
ou o nome de
um complexType Obs: minOccurs e maxOccurs podem ser usados
apenas em declaração de elementos.
2
<xs:element name="nome" minOccurs="int" maxOccurs="int">
<xs:complexType>
…
</xs:complexType>
</xs:element>
30
Problema: Como restringir os
tipos?
Suponha que queremos restringir o elemento ISBN da seguinte forma:
ddddd-ddddd-ddddd ou
d-ddd-ddddd-d ou
d-dd-dddddd-d, onde 'd' significa 'digit'
<xs:simpleType name="ISBNType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{5}-\d{5}-\d{5}"/>
<xs:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/>
<xs:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/>
</xs:restriction>
</xs:simpleType>
31
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org”
xmlns="http://www.publishing.org”>
<xs:simpleType name="ISBNType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{5}-\d{5}-\d{5}"/>
<xs:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/>
<xs:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:date"/>
<xs:element name="ISBN" type="ISBNType"/>
<xs:element name=”editora" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType> </xs:element> </xs:schema>
32
<xs:complexType> ou
<xs:simpleType>?


Use o elemento complexType quando
quiser definir elementos filhos e/ou
atributos de um elemento
Use o elemento simpleType quando
precisar criar um novo tipo que é um
refinamento de um tipo embutido
(string, integer, etc)
33
Criando seus próprios
Datatypes


Um novo datatype pode ser definido de um datatype
existente (chamado tipo "base" ) através da
especificação de valores para uma ou mais das
facetas opcionais para o tipo base.
Exemplo. O tipo primitivo string tem seis facetas
opcionais:






pattern
enumeration
length
minLength
maxlength
whitespace (valores: preserve, replace, collapse)
34
Exemplo de criação de um novo Datatype
através da especificação de valores de
facetas
<xs:simpleType name=”NumTelefone">
<xs:restriction base="xs:string">
<xs:length value="8"/>
<xs:pattern value="\d{3}-\d{4}"/>
</xs:restriction>
</xs:simpleType>
35
Outro Exemplo
<xs:simpleType name=”Cores-Brasil">
<xs:restriction base="xs:string">
<xs:enumeration value=”verde"/>
<xs:enumeration value=”amarelo"/>
<xs:enumeration value=”azul"/>
<xs:enumeration value=”branco"/>
</xs:restriction>
</xs:simpleType>
Cria um novo tipo chamado Cores-Brasil.
Um elemento declarado deste tipo deve ter
o valor verde, amarelo, azul ou branco.
36
Facetas do tipo Integer

Facets:
 pattern
 enumeration
 whitespace
 maxInclusive
 maxExclusive
 minInclusive
 minExclusive
 precision
37
Exemplo
<xs:simpleType name= "EarthSurfaceElevation">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-1290"/>
<xs:maxInclusive value="29035"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="elevation" type="EarthSurfaceElevation"/>
Exemplo. Definindo um elemento elevation:
<elevation>5240</elevation>
38
Tipos Derivados

Podemos ter uma forma de especializar
definições complexType. Conhecido
como "tipos derivados"


derivar por extensão: estender o
complexType pai com mais elementos
derivar por restrição: restringir o
complexType pai através da restrição de
alguns elementos para ter


uma faixa de valores mais restrita, ou
um número de ocorrências mais restrito.
39
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org”
xmlns="http://www.publishing.org”>
<xs:complexType name="Publicacoes">
<xs:sequence>
<xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”data" type="xs:date"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=”livro">
<xs:complexContent>
<xs:extension base=”Publicacoes" >
<xs:sequence>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name=”editora" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" type=”livro" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
40
Derivação por Restrição
<xs:complexType name="Publicacao">
<xs:sequence>
<xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”date" type="xs:year"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name= "PublicacaoUnicoAutor">
<xs:complexContent>
<xs:restriction base="Publicacao">
<xs:sequence>
<xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”autor" type="xs:string"/>
<xs:element name=”data" type="xs:year"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
41
Proibindo Derivações



<xs:complexType name="Publicacao" final="#all" …>
Publicação não pode ser extendida or restringida
<xs:complexType name="Publicacao" final="restriction" …>
Publicacao não pode ser restringida
<xs:complexType name="Publicação" final="extension" …>
Publicação não pode ser extendida
42
Atributos
Seja o DTD
<!ELEMENT CatalogoLivros (livro)+>
<!ELEMENT livro (titulo, autor+, data, ISBN, editora)>
<!ATTLIST livro
Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED
EmEstoque (true | false) "false"
Revisor CDATA " ">
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT editora (#PCDATA)>
43
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name=”editora" type="xs:string"/>
</xs:sequence>
<xs:attributeGroup ref="AtributosLivro"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="AtributosLivro">
<xs:attribute name="Categoria" use="required">
Categoria (autobiography | non-fiction | fiction) #REQUIRED
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="autobiografia"/>
<xs:enumeration value="nao-ficcao"/>
<xs:enumeration value="ficcao"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
EmEstoque (true | false) "false"
<xs:attribute name=”EmEstoque" type="xs:boolean" use="default" value="false"/>
<xs:attribute name="Revisor" type="xs:string" use="default" value=" "/>
Revisor CDATA " "
</xs:attributeGroup>
44
Alternativamente ...
<xs:element name=”livro" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name=”titulo" type="xs:string"/>
<xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/>
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="editora" type="xs:string"/>
</xs:sequence>
<xs:attribute name="Categoria" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="autobiografia"/>
<xs:enumeration value="nao-ficcao"/>
<xs:enumeration value="ficcao"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name=”EmEstoque" type="xs:boolean" use="default" value="false"/>
<xs:attribute name="Revisor" type="xs:string" use="default" value=" "/>
</xs:complexType>
</xs:element>
45
Sumário de Declaração de
Atributos (2 formas)
1
<xs:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>
xs:string
xs:integer
xs:boolean
...
2
required
default
fixed
optional
prohibited
<xs:attribute name="nome" use=”como-usad" value="valor">
<xs:simpleType>
<xs:restriction base=”tipo-simples">
<xs:facet value="valor"/>
…
</xs:restriction>
</xs:simpleType>
</xs:attribute>
This attribute is only
used with use="default"
and use="fixed"
46
Observação sobre Atributos


A declaração de atributos sempre vem
após as declarações de elementos.
Os atributos estão sempre com relação
ao elemento que eles estão definidos
(nested).<xs:element name=”A">
”aa e ab são
atributos de A"
<xs:complexType>
<xs:sequence>
…
</xs:sequence>
<xs:attribute name=”aa" …/>
<xs:attribute name=”ab" …/>
</xs:complexType>
</xs:element>
47
Elementos com Simple
Content e Atributos
Exemplo. Considere:
<elevation units=“metros">5440</elevation>
O elemento elevation tem duas restrições:
- um simples (integer) conteúdo
- um atributo chamado units
Como declarar elevation?
48
Solução
<xs:element name="elevation">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="units" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
49
Solução mais completa (constraints)
<xs:simpleType name="elevationType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="12000"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitsType">
<xs:restriction base="xs:string">
<xs:enumeration value="feet"/>
<xs:enumeration value="meters"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="elevation">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="elevationType">
<xs:attribute name="units" type="unitsType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType> </xs:element>
50
Expressando Alternativas
DTD:
XML Schema:
<!ELEMENT transporte (trem | aviao | carro)>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.travel.org"
xmlns="http://www.travel.org”>
<xs:element name="transporte">
<xs:complexType>
<xs:choice>
<xs:element name="trem" type="xs:string"/>
<xs:element name=”aviao" type="xs:string"/>
<xs:element name=”carro" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
51
Expressando Repetições
DTD:
XML Schema:
<!ELEMENT binary-string (zero | one)*>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.binary.org"
xmlns="http://www.binary.org”>
<xs:element name="binary-string">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="zero" type="xs:unsignedByte" fixed="0"/>
<xs:element name="one" type="xs:unsignedByte" fixed="1"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
52
Expressando Ordem Qualquer
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.publishing.org"
xmlns="http://www.publishing.org”>
XML Schema:
<xs:element name="CatalogoLivros">
<xs:complexType>
<xs:sequence>
<xs:element name=”livro" maxOccurs="unbounded">
<xs:complexType>
Problema: criar um
<xs:all>
elemento livro, que
<xs:element name=”titulo" type="xs:string"/>
contenha autor, titulo, data,
<xs:element name=”autor" type="xs:string"/>
ISBN, e editora,
<xs:element name=”data" type="xs:string"/>
<xs:element name="ISBN" type="xs:string"/>
em qualquer ordem.
<xs:element name="editora" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
53
Elemento Vazio
<!ELEMENT imagem EMPTY>
DTD: <!ATTLIST imagem href CDATA #REQUIRED>
Schema:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
targetNamespace="http://www.photography.org"
xmlns="http://www.photography.org”>
<xs:element name="galeria">
<xs:complexType>
<xs:sequence>
<xs:element name="imagem" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="href" type="xs:uriReference" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
54
Exemplo de XMLSchema para Banco
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>
<xs:element name=“banco” type=“BankType”/>
<xs:element name=“conta”>
<xs:complexType>
<xs:sequence>
<xs:element name=“numeroConta” type=“xs:string”/>
<xs:element name=“nomeAgencia”
type=“xs:string”/>
<xs:element name=“saldo”
type=“xs:decimal”/>
</xs:sequence>
</xs:complexType>
</xs:element>
….. Definições de cliente e deposito
<xs:complexType name=“BankType”>
<xs:sequence>
<xs:element ref=“conta” minOccurs=“0” maxOccurs=“unbounded”/>
<xs:element ref=“cliente” minOccurs=“0” maxOccurs=“unbounded”/>
<xs:element ref=“deposito” minOccurs=“0” maxOccurs=“unbounded”/>
</xs:sequence>
</xs:complexType>
</xs:schema>
55

Exercício 3: Dado o documento XML crie um
XMLSchema para o mesmo
<?xml version='1.0' ?>
<!DOCTYPE livro SYSTEM "livro.dtd">
<livro>
<titulo> XML e Java </titulo>
<autor> João Silva </autor>
<conteudo>
<capitulo focus="XML">
Introdução
</capitulo>
<capitulo focus="XML"> DTD </capitulo>
<capitulo focus="XML"> Elementos
</capitulo>
<capitulo focus="Java"> SAX </capitulo>
<capitulo focus="Java"> DOM </capitulo>
<conteudo>
<bibliografia> bla bla bla </bibliografia>
<copyright> &ufcgCopyright; </copyright>
</livro>
56
Exercício 4

Compare o DTD do exercício 2 com o
XMLSchema do exercício 3 e escreva
suas conclusões.
57
Download

Unidade 2 - Namespaces e XML Schema