XML Schema

XML Schema Definition

XML Schema é uma linguagem baseada no formato XML para definição de regras de validação ("esquemas") em documentos no formato XML. Foi a primeira linguagem de esquema para XML a obter o status de recomendação por parte do W3C. Esta linguagem é uma alternativa ao DTD, cuja sintaxe não é baseada no formato XML.[1]

Foi amplamente utilizado para desenvolvimento da NF-e (Nota Fiscal Eletrônica) Brasileira.

Um arquivo contendo as definições na linguagem XML Schema é chamado de XSD (XML Schema Definition), este descreve a estrutura de um documento XML.

História editar

Em meados de 1999, o consórcio W3C (responsável por vários padrões da WEB) publicou pela primeira vez o XML Schema. Sendo a primeira iniciativa de apresentar uma alternativa ao padrão DTD. Após diversas revisões, em 2001, foi lançada a recomendação final do XML Schema e em 2004 houve algumas adaptações. Dessa data até hoje, diversos fabricantes tem incluído esse padrão em seus produtos. Existem diversas APIs para validação, bancos de dados que dão suporte a tipos de dados XML, além de bancos de dados nativos que trabalham apenas com XML e tem o XML Schema como seu mecanismo básico de controle de consistência.

Padrões de Validação editar

A validação de arquivos XML pode ser através de uma aplicação própria ou ainda algum outro padrão adotado. Os principais padrões atualmente são:

Quando um documento XML é bem formado, ele pode ser validado com base em regras que podem ser definidas utilizando a linguagem XML Schema.

A utilização de DTDs teve grande importância quando o padrão XML surgiu. Pois era o padrão para validação de documentos da linguagem antecessora da XML (o SGML) e foi utilizada como forma de validação também para o XML. Embora seja capaz de realizar a validação de arquivos XML, a DTD possui muitas limitações. Não existe um conjunto amplo de tipos (todos os dados são interpretados como texto), trazendo efeitos desagradáveis como validação, comparação, etc. Também não suportam espaços de nomes (namespace), forçam que os elementos sempre apareçam na ordem especificada, etc. Levando ao desuso.

O padrão XSD (XML Schema Definition) ou XS (XML Schema) é a recomendação oficial do W3C desde 2001 para validação. Esse padrão consegue suprir as limitações da DTD, além de fornecer diversas funcionalidades, é possível construir tipos próprios derivados dos tipos básicos, realizar relacionamentos entre elementos de dados dentro do XML (similar aos relacionamentos entre tabelas), etc.

Estrutura de um documento XSD editar

Em sua essência é um documento XML. Isso é, deve obedecer as mesmas regras que um documento XML. Um documento XSD também possui outras necessidades que um documento XML não necessita. Para que essas necessidades sejam atendidas é preciso definir as partes de um documento XSD.

Declaração de elementos editar

Os elementos são declarados utilizando-se a tag “element”. Os principais atributos da tag são:

  • name: especifica o nome do elemento
  • type: especifica o tipo de dados do elemento
  • minOccurs: especifica o mínimo de vezes que o elemento pode aparecer
  • maxOccurs: especifica o máximo de vezes que o elemento pode aparecer (a palavra unbounded pode ser utilizada para especificar uma quantidade ilimitada).

A declaração abaixo cria um elemento chamado “endereco” tipo string, que pode aparecer no mínimo zero (0) vezes e no máximo uma (1) vez:

<xsd:element name="endereco" type="xsd:string" minOccurs="0" maxOccurs="1"/>

Declaração de atributos editar

De uma forma geral as declarações de atributos se parecem muito com as declarações de elementos. Essas declarações possuem alguns atributos. Os principais são:

  • name: especifica o nome do atributo
  • type: especifica o tipo de dados do atributo
  • use: especifica a utilização do atributo (requerido, opcional ou proibido)

Ex.: declara dois atributos. O primeiro é do tipo data e é opcional. O segundo é do tipo string e é obrigatório.

<xsd:attribute name="datacadastro" type="xsd:dateTime" use="optional"/>
<xsd:attribute name="estadocivil" type="xsd:string" use="required"/>

A declaração use padrão é "optional".

Tipos de Dados editar

O XML Schema possui diversos tipos de dados, além da possibilidade de criar tipos próprios, os mais comuns são:

  • xsd:string – string de caracteres de comprimento ilimitado
  • xsd:boolean – valor booleano (true (1) ou false (0))
  • xsd:decimal – número decimal
  • xsd:float – ponto flutuante
  • xsd:date – Uma data no calendário gregoriano
  • xsd:dateTime – Um instante específico no calendário gregoriano
  • xsd:integer – Um número inteiro

Obs.: esses dados podem ser utilizados tanto com os elementos quanto com os atributos.

Grupos de modelos editar

Permitem que elementos sejam especificados dentro de outros elementos e, obedeçam a uma ordem ou escolha específica através de conectores (opcional). Os três conectores permitidos são: sequence, all e choice.

Ex. 1: a utilização do conector sequence; nesse caso é especificado que todos os três elementos apareçam na ordem correta. Se a ordem não for obedecida ocorrerá erro.

<xsd:sequence>
 <xsd:element name="nome" type="xsd:string"/>
 <xsd:element name="datanasc" type="xsd:date"/>
 <xsd:element name="telefone" type="xsd:string"/>
</xsd:sequence>

Ex. 2: a utilização do conector all; nesse caso é obrigado apenas que os elementos constem no documento, mas não necessariamente em uma ordem. Qualquer ordem especificada é permitida.

<xsd:all>
 <xsd:element name="nome" type="xsd:string"/>
 <xsd:element name="datanasc" type="xsd:date"/>
 <xsd:element name="telefone" type="xsd:string"/>
</xsd:all>

Ex. 3: a utilização do conector choice; nesse caso é obrigatório apenas que um e somente um dos elementos especificados conste no documento. Se os dois elementos aparecerem, ocorrerá um erro.

<xsd:choice>
 <xsd:element name="CPF" type="xsd:string"/>
 <xsd:element name="RG" type="xsd:string"/>
</xsd:choice>

A utilização de conectores é necessária para a construção de elementos compostos. Esses tipos de elementos são combinações de tags aninhadas chamados de elementos complexos. Para que esses elementos sejam declarados é necessário utilizar tag “complexType”.

<xsd:element name="cliente">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="nome" type="xsd:string"/>
   <xsd:element name="endereco" type="xsd:string"/>
   <xsd:element name="cep" type="xsd:integer"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>[2]

Existem cinco conjuntos de tipos de dados pré-definidos em XSD. Esses conjuntos de tipos de dados são:

Numéricos

xsd:float

xsd:double

xsd:decimal

xsd:integer

xsd:nonPositiveInteger

xsd:nonNegativeInteger

xsd:negativeInteger

xsd:positiveInteger

xsd:long

xsd:int

xsd:short

xsd:byte

xsd:unsignedLong

xsd:unsignedInt

xsd:unsignedShort

xsd:unsignedByte

Números reais (32bits)

Números reais (64bits)

Número decimal

Número inteiro

Número inteiro negativo (incluindo 0)

Número inteiro positivo (incluindo 0)

Número inteiro negativo

Número inteiro positivo

Números inteiros (64bits)

Números inteiros (32bits)

Números inteiros (16bits)

Números inteiros (8bits)

Números long positivos (incluindo 0)

Números int positivos (incluindo 0)

Números short positivos (incluindo 0)

Números byte positivos (incluindo 0)

Data/Hora

xsd:dateTime

xsd:date

xsd:time

xsd:gDay

xsd:gMonth

xsd:gYear

xsd:gYearMonth

xsd:gMonthDay

xsd:duration

YYYY-MM-DDtHH:MM:SS.000

YYYY-MM-DD

HH:MM:SS.000

Número do dia (1-31)

Número do mês (1-12)

Número do ano

Números do ano e do mês

Números do mês e do dia

Período de tempo

String

xsd:string

xsd:normalizedString

xsd:token

Caracteres Unicode

Caracteres sem CRLF nem Tabs

Sem espaços

Binários

xsd:hexBinary

xsd:base64Binary

Dígitos em HEX (hexadecimal)

Binários em base64

Booleanos

xsd:boolean

1 | 0 | true | false

Referências

  1. «XML Schema Tutorial». W3C. Consultado em 20 de novembro de 2008. Arquivado do original em 28 de abril de 2006 
  2. «Um pouco além do XML: Introdução ao XML Schema (XSD) - Parte 2». PlugMasters [ligação inativa]

Ligações externas editar

  Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.