Upload
internet
View
105
Download
0
Embed Size (px)
Citation preview
1
Namespaces
2
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
3
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>
4
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>
5
Namespace default
<html xmlns=”...” xmlns:math=”...”>
<title> George Soros </title>
<h2> Contabilidade ... </h2>
<math:reln>
.....
</math:reln>
</html>
6
Nome de Atributo com Namespace
Atributos podem ter namespace Exemplo:
<myLink xmlns:xlink=”...”
xlink:type=”simple”
......
</myLink>
7
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>
8
XML Schema
9
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”
10
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”
11
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
12
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
13
W3C XML Schema Recom. define 3 namespaces: www.w3.org/2001/XMLSchema
Vocabulário básico: element, attribute, complexType, etc.
www.w3.org/2001/XMLSchema-datatypes 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
14
Basicamente ... Todos os elementos devem ser associados a tipos
Os elementos atômicos (folhas da árvore XML) e atributos
Tipos Básicos Definição de tipos primitivos - data, número, string, etc
Tipos Simples 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
15
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)
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> <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>
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>
<!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>
<!ELEMENT livro (titulo, autor, data, ISBN, editora)>
<!ELEMENT CatalogoLivros (livro)+>
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>
Todos XML Schemas têm "schema" como elemento raiz..
19
<?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 quesão usados paracriar um XML Schema vêm doXMLSchemanamespace
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>
indica que oselementos declaradosneste schema(CatalogoLivros,livro, titulo, autor, data, ISBN, editora)vão para este namespace
21
<?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>
Este está referenciando uma declaração de um elemento livro.livro em qualnamespace? Uma vez quenão há um qualificador de namespace, é umareferência ao elemento livro no namespace default, que é o targetNamespace!
O namespace default éhttp://www.publishing.orgque é o targetNamespace!
22
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
Neste caso, é necessário também declarar o namespace
OU noNamespaceSchemaLocation – quando
não usamos namespace – valor do atributo é o caminho para o arquivo XSD
23
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>
24
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>
25
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"/>
<element ref=”titulo"/>
Equivalentes!
26
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>
27
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
28
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>
é 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 referencia ocomplexType ttt.
Elemento A tem a definição complexType embutida na declaração do elemento.
29
Observação 2Uma 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>
30
Sumário de declaração de Elementos (2 formas)
<xs:element name="nome" type="type" minOccurs="int" maxOccurs="int"/>
Um tipos simples (ex.., xs:string)ou o nome deum complexType
<xs:element name="nome" minOccurs="int" maxOccurs="int"> <xs:complexType> … </xs:complexType></xs:element>
1
2
Um inteiro não negativo
Um inteiro nãonegativo ou "unbounded"
Obs: minOccurs e maxOccurs podem ser usadosapenas em declaração de elementos.
31
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>
32
<?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>
33
<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)
34
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)
35
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>
36
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 tero valor verde, amarelo, azul ou branco.
37
Facetas do tipo Integer Facets:
pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision
38
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>
39
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.
40
<?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>
41
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>
42
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
43
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)>
44
<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"> <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:attributeGroup>
EmEstoque (true | false) "false"
Revisor CDATA " "
Categoria (autobiography | non-fiction | fiction) #REQUIRED
45
<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>
Alternativamente ...
46
Sumário de Declaração de Atributos (2 formas)
<xs:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>
requireddefaultfixedoptionalprohibited
This attribute is onlyused with use="default"and use="fixed"
xs:stringxs:integerxs:boolean...
1
2 <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>
47
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"> <xs:complexType> <xs:sequence> … </xs:sequence> <xs:attribute name=”aa" …/> <xs:attribute name=”ab" …/> </xs:complexType></xs:element>
”aa e ab sãoatributos de A"
48
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?
49
<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>
Solução
50
<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>
Solução mais completa (constraints)
51
Expressando Alternativas
<!ELEMENT transporte (trem | aviao | carro)>DTD:
XML Schema: <?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>
52
Expressando Repetições
<?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>
<!ELEMENT binary-string (zero | one)*>DTD:
XML Schema:
53
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”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <xs:all> <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:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
XML Schema:
Problema: criar um elemento livro, que contenha autor, titulo, data, ISBN, e editora, em qualquer ordem.
54
Elemento Vazio
<?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>
Schema:
<!ELEMENT imagem EMPTY><!ATTLIST imagem href CDATA #REQUIRED>DTD:
55
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>
56
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>
57
Exercício 4 Compare o DTD do exercício 2 com
o XMLSchema do exercício 3 e escreva suas conclusões.