
















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
XML Schema é uma alternativa ao DTD baseada em XML. Um esquema XML descreve a estrutura de um documento XML. A linguagem XML Schema também é chamada de XML Schema Definition (XSD).
Tipologia: Esquemas
1 / 24
Esta página não é visível na pré-visualização
Não perca as partes importantes!

















Texto original de Maurício M. Maia que tem como base o tutorial do W3Schools, disponível em http://www.w3schools.com/schema/default.asp Adaptado por Evandro César Freiberger
XML Schema é uma alternativa ao DTD. Neste tutorial, você vai aprender o que é um XML Schema, como ele substitui o DTD, e como usá-lo em suas aplicações.
XML Schema é uma alternativa ao DTD baseada em XML. Um esquema XML descreve a estrutura de um documento XML. A linguagem XML Schema também é chamada de XML Schema Definition (XSD).
Antes de estudar a Linguagem XML Schema, você deve ter um entendimento básico de XML e Namespaces XML. Também é válido um entendimento básico de DTD.
Se você deseja estudar estes assuntos primeiro, visite o tutorial XML e o tutorial DTD.
O propósito de um XML Schema é definir os blocos de construção permitidos em um documento XML, como um DTD.
Um XML Schema:
Nós acreditamos que logo XML Schemas vão ser usados na maioria das aplicações Web no lugar de DTDs. Aqui estão algumas razões:
XML Schema foi originalmente proposto pela Microsoft, mas se tornou uma recomendação oficial do W3C em Maio de 2001. A especificação está estável e foi revisada pelos membros do W3C. Para uma visão geral das atividades e status do W3C, visite o tutorial W3C
Há muitas razões para XML Schema ser melhor que DTD.
Uma das grandes vantagens de XML Schemas é o suporte a tipos de dados:
Outra grande força do XML Schema é ser escrito em XML.
Por isso:
Quando um dado é enviado de um ponto para outro é essencial que as duas parte tem a mesma expectativa sobre o conteúdo.
Com XML Schemas, o remetente pode descrever o dado de forma que o receptor vá entender.
Uma data como "03-11-2004" vai, em alguns países, ser interpretada como 3 de Novembro e em outros com 11 de Março, mas um elemento XML com um tipo de dado como esse:
assegura um entendimento mútuo do conteúdo porque o tipo de dado XML requer o formato YYYY- MM-DD.
XML Schemas são extensíveis, assim como XML, porque eles são escritos em XML.
Com uma definição extensível você pode:
Este é um arquivo XML Schema chamado "nota.xsd" que define os elementos do documento XML acima ("nota.xml"):
O elemento nota é dito um tipo complexo porque contém outros elementos. Os outros elementos são ditos tipos simples porque não contém outros elementos. Você vai aprender mais sobre tipos simples e complexo nos próximos capítulos.
Este documento XML tem uma referência para um DTD:
Este documento contém uma referência a um XML Schema:
O elemento
O elemento
O seguinte fragmento:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
indica que os elementos e tipos de dados usados no esquema (schema, element, complexType, sequence, string, boolean, etc.) vêm do namespace "http://www.w3.org/2001/XMLSchema". Ele também especifica que os elementos e tipos de dados que vêm de "http://www.w3.org/2001/XMLSchema" devem ser prefixados com xs: !!
Este fragmento:
targetNamespace="http://www.w3schools.com"
indica que os elementos definidos por este esquema (nota, para, de, cabecalho, texto) são do namespace "http://www.w3schools.com".
Este fragmento:
xmlns="http://www.w3schools.com"
indica que o namespace padrão é "http://www.w3schools.com".
Este fragmento:
elementFormDefault="qualified">
indica que todo elemento usado por uma instância de documento XML que foi declarado neste esquema deve ser qualificado pelo namespace.
E aqui as definições correspondentes:
<xs:element name="sobrenome" type"xs:string"/> <xs:element name="sexo" type="xs:string"/> <xs:element name="datanascimento" type="xs:date"/>
XML Schema tem vários tipos de dados próprios. Aqui está uma lista dos mais comuns:
Elementos simples podem ter um conjunto de valores padrões OU um fixos.
Um valor padrão é automaticamente atribuído ao elemento quando nenhum outro valor é especificado. No exemplo seguinte, o valor padrão é "red":
<xs:element name="color" type="xs:string" default="red"/>
Um valor fixo também é atribuído automaticamente ao elemento. Você não pode especificar outro valor. No exemplo a seguir, o valor fixo é "red":
<xs:element name="color" type="xs:string" fixed="red"/>
Os atributos são declarados como tipos simples. Apenas elementos complexos possuem atributos!
Elementos simples não podem ter atributos. Se um elemento tem atributos, ele é considerado do tipo complexo. Mas atributos são declarados como tipos simples. Isso significa que um elemento com atributos, sempre tem uma definição do tipo complexo.
A sintaxe para definir um atributo é:
<xs:attribute name="xxx" type="yyy"/>
onde xxx é o nome do atributo e yyy é o tipo de dado do atributo.
Aqui está um elemento XML com um atributo:
<produto codigo="12345”> Sabão em pedra
E aqui a definição correspondente do atributo:
<xs:attribute name="codigo" type="xs:integer"/>
XML Schema tem vários tipos de dados próprios. Aqui está uma lista dos mais comuns:
Atributos podem ter valores padrões OU fixos especificados.
Um valor padrão é atribuído automaticamente ao atributo quando nenhum outro valor é especificado. No exemplo seguinte, o valor padrão é "00001":
<xs:attribute name="codigo" type="xs:integer" default="00001">
Um valor fixo é atribuído automaticamente ao atributo. Você não pode especificar outro valor. No exemplo seguinte, o valor fixo é "1":
<xs:attribute name="tipo" type="xs:integer" fixed="1"/>
Todos atributos são opcionais por padrão. Para especificar explicitamente que um atributo é opcional, utilize o atributo "use":
<xs:attribute name="codigo" type="xs:integer" use="optional"/>
Para fazer um atributo obrigatório:
<xs:atrribute name="codigo" type="xs:integer" use="required"/>
O exemplo acima também poderia ser escrito assim:
<xs:element name="carro" type="tipoCarro"/>
<xs:simpleType name="tipoCarro"> <xs:restriction base="xs:string"> <xs:enumeration value="Palio"/> <xs:enumeration value="Gol"/> <xs:enumeration value="Fiesta"/> </xs:restriction> <xs:simpleType>
Nota: Neste caso o tipo "tipoCarro" pode ser usado por outros elementos, porque ele não é parte do elemento "carro".
Para limitar o conteúdo de um elemento XML em uma série de números ou letras, podemos utilizar a restrição de padrão.
Este exemplo define o elemento chamado "letra":
<xs:element name="letra"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element>
O elemento "letra" é do tipo simples com uma restrição. O único valor aceitável é UMA das letras MINÚSCULAS de a até z.
O próximo exemplo define um elemento chamado "iniciais":
<xs:element name="iniciais"> <xs:simpleType> <xs: restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/> <xs:restriction> </xs:simpleType> <xs:element>
O elemento "iniciais" é simples com um restrição. O único valor aceitável são três letras maiúsculas de A até Z.
Este exemplo também define um elemento chamado "iniciais":
<xs:element name="iniciais">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:patter value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> </xs:restriction> <xs:simpleType>
<xs:element>
O elemento "iniciais" é do tipo simples com restrição. O único valor aceitável são três letras minúsculas ou maiúsculas de a até z.
Este exemplo define um elemento chamado "escolha":
<xs:element name="escolha">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[xyz]"/> </xs:restriction> </xs:simpleType>
</xs:element>
O elemento "escolha" é um tipo simples com restrição. O único valor aceitável é uma das seguintes letras: x, y, OU z.
O próximo exemplo define um elemento chamado "idProduto":
<xs:element name="idProduto">
<xs:simpleType> <xs:restriction base="xs:integer"> <xs:patter value="[0-9][0-9][0-9][0-9][0-9]"/> </xs:restriction> </xs:simpleType>
</xs:element>
O elemento "idProduto" é um tipo simples com restrição. O único valor aceitável são cinco dígitos em seqüência, e cada dígito deve estar entre 0 e 9.
<xs:element name="password">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9]<8>"/> </xs:restriction> </xs:simpleType>
<xs:element>
O elemento "password" é um tipo simples com uma restrição. Deve haver exatamente oito caracteres e estes caracteres devem ser letras minúsculas ou maiúsculas de a até z, ou um número de 0 a 9.
Para especificar como um caractere vazio deve ser tratado, devemos usar a restrição whiteSpace.
Este exemplo define um elemento chamado "endereco":
<xs:element name="endereco">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> <xs:restriction> </xs:simpleType>
</xs:element>
O elemento "endereco" é um tipo simples com uma restrição. A restrição whiteSpace é definida como "preserve", que significa que o processador XML não vai remover nenhum caractere vazio.
Este exemplo também define um elemento chamado "endereco":
<xs:element name="endereco">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="replace"/> </xs:restriction> </xs:simpleType>
</xs:element>
Este elemento "endereco" é um tipo simples com uma restrição. A restrição whiteSpace é definida como "replace", que significa que o processador XML vai substituir todos caracteres vazios (quebras de linha, tabs, espaços) com espaços.
Este exemplo também define um elemento chamado "endereco":
<xs:element name="endereco">
<xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="collapse"/> </xs:restriction> </xs:simpleType>
</xs:element>
Este elemento "endereco" é um tipo simples com uma restrição. A restrição whiteSpace é definida como "collapse", que significa que o processador XML vai remover todos caracteres vazios (quebras de linha, tabs, espaços são substituídos com espaços, espaços iniciais e finais são removidos, espaços múltiplos são reduzidos a um).
Restrição Descrição
enumeration Define uma lista de valores válidos
fractionDigits Especifica o número máximo casas decimais permitidas. Deve ser igual oumaior que zero
length Especifica o número exato de caracteres ou itens permitidos. Deve ser igual ou maior que zero
maxExclusive Especifica o valor máximo para valores numéricos (o valor deve ser menor queeste valor)
maxInclusive Especifica o valor máximo para valores numéricos (o valor deve ser menor ouigual a este valor)
maxLength Especifica o número máximo de caracteres ou itens permitidos. Deve ser igual ou maior que zero
minExclusive Especifica o valor mínimo para valores numéricos (o valor deve ser maior queeste valor)
minInclusive Especifica o valor mínimo para valores numéricos (o valor deve ser maior ouigual a este valor)
minLength Especifica o número mínimo de caracteres ou itens permitidos. Deve ser igualou maior que zero
pattern Define a seqÜência exata de caracteres permitidos
totalDigits Especifica o número exato de digitos permitidos. Deve ser maior que zero
whiteSpace Especifica como caracteres vazios (tabs, espaços e retornos de carro) sãotratados
Um elemento complexo é um elemento XML que contém outros elementos e/ou atributos.
Há quatro tipos de elementos complexos:
Nota: Cada um desses tipos de elementos pode conter atributos também!
Um elemento XML complexo, "produto", que é vazio:
Um elemento XML complexo, "empregado", que contém apenas outros elementos:
Um elemento XML complexo, "produto", que contém atributo e texto:
Um elemento XML complexo, "mensagem", que contém outros elementos e texto:
<xs:element name="empregado" type="tipoPessoa"/> <xs:element name="estudante" type="tipoPessoa"/> <xs:element name="cliente" type="tipoPessoa"/>
<xs:complexType name="tipoPessoa"> <xs:sequence> <xs:element name="primeiroNome" type="xs:string"/> <xs:element name="ultimoNome" type="xs:string/"> </xs:sequence> </xs:complexType>
Você também pode basear um elemento do tipo complexo em um tipo complexo existente e adicionar alguns elementos, assim:
<xs:element name="empregado" type="tipoPessoaCompleto"/>
<xs:complexType name="tipoPessoa"> <xs:sequence> <xs:element name="primeiroNome" type="xs:string"/> <xs:element name="ultimoNome" type="xs:string/"> </xs:sequence> </xs:complexType>
<xs:complexType name="tipoPessoaCompleto"> <xs:complexContent> <xs:extension base="tipoPessoa"> <xs:sequence> <xs:element name="endereco" type="xs:string"/> <xs:element name="cidade" type="xs:string"/> <xs:element name="estado" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> <xs:complexType>
Um elemento complexo vazio pode conter atributos; mas não pode ter nenhum conteúdo entre as tags de abertura e fechamento.
Um elemento XML vazio:
O elemento "produto" acima não tem conteúdo. Para definir um tipo sem conteúdo, nós devemos definir um tipo que permita apenas elementos em seu conteúdo, mas nós não declaramos nenhum elemento realmente, assim:
<xs:element name="produto"> <xs:complexType> <xs:complexContent> <xs:restriction base="xs:integer"> <xs:attribute name="codigo" type="xs:positiveInteger"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element>
No exemplo acima, nós definimos um complexType contendo um complexContent, e apenas elementos. O elemento complexContent diz que queremos restringir ou estender o modelo de conteúdo de um tipo complexo, e a restrição de inteiros declara um atributo mas não cria nenhum elemento.
Entretanto, é possível declarar o elemento produto de forma mais compacta, assim:
<xs:element name="produto"> <xs:complexType> <xs:attribute name="codigo" type="xs:positiveInteger"/> </xs:complexType> </xs:element>
Ou você pode dar um nome ao complexType, e fazer o elemento "produto" ter um tipo que faz referência ao nome do complexType (se você usar este método, vários elementos podem referenciar o mesmo tipo complexo):
<xs:element name="produto" type="tipoProduto"/>
<xs:complexType name="tipoProduto"> <xs:atrribute name="codigo" type="xs:positiveInteger"/> </xs:complexType>