Esquema XML (W3C) - XML Schema (W3C)

Esquema XML (W3C)
Extensão de nome de arquivo
.xsd
Tipo de mídia da Internet
aplicativo / xml, texto / xml
Desenvolvido por Consórcio da World Wide Web
Tipo de formato Linguagem de esquema XML
Estendido de XML
Padrão 1.0, Parte 1 Estruturas (Recomendação) ,

1.0, Parte 2 Tipos de dados (recomendação) ,
1.1, Parte 1 Estruturas (recomendação) ,

1.1, Parte 2 Tipos de dados (recomendação)

XSD ( XML Schema Definition ), uma recomendação do World Wide Web Consortium ( W3C ), especifica como descrever formalmente os elementos em um documento Extensible Markup Language ( XML ). Ele pode ser usado por programadores para verificar cada parte do conteúdo do item em um documento, para garantir que esteja de acordo com a descrição do elemento em que está inserido.

Como todas as linguagens de esquema XML , o XSD pode ser usado para expressar um conjunto de regras com as quais um documento XML deve estar em conformidade para ser considerado "válido" de acordo com esse esquema. No entanto, ao contrário da maioria das outras linguagens de esquema, o XSD também foi projetado com a intenção de que a determinação da validade de um documento produzisse uma coleção de informações aderentes a tipos de dados específicos . Esse infoset pós-validação pode ser útil no desenvolvimento de software de processamento de documentos XML.

História

O XML Schema , publicado como recomendação do W3C em maio de 2001, é uma das várias linguagens de esquema XML . Foi a primeira linguagem de esquema separada para XML a atingir o status de recomendação pelo W3C. Devido à confusão entre o XML Schema como uma especificação W3C específica e o uso do mesmo termo para descrever linguagens de esquema em geral, algumas partes da comunidade de usuários se referiram a esta linguagem como WXS , um inicialismo para W3C XML Schema, enquanto outras se referiram a como XSD , um initialism para XML Schema Definition. Na versão 1.1, o W3C optou por adotar XSD como o nome preferencial, e esse é o nome usado neste artigo.

Em seu apêndice de referências, a especificação XSD reconhece a influência de DTDs e outros esforços de esquema XML iniciais, como DDML , SOX , XML-Data e XDR . Adotou características de cada uma dessas propostas, mas também é um compromisso entre elas. Dessas linguagens, XDR e SOX continuaram a ser usadas e suportadas por um tempo após a publicação do XML Schema. Vários produtos da Microsoft suportaram XDR até o lançamento do MSXML 6.0 (que abandonou o XDR em favor do XML Schema) em dezembro de 2006. A Commerce One , Inc. apoiou sua linguagem de esquema SOX até declarar falência no final de 2004.

Os recursos mais óbvios oferecidos no XSD que não estão disponíveis nas Definições de Tipo de Documento (DTDs) nativas do XML são o reconhecimento do namespace e os tipos de dados, ou seja, a capacidade de definir o elemento e o conteúdo do atributo como contendo valores como inteiros e datas em vez de texto arbitrário.

A especificação XSD 1.0 foi publicada originalmente em 2001, com uma segunda edição em 2004 para corrigir um grande número de erros. O XSD 1.1 se tornou uma recomendação do W3C em abril de 2012 .

Esquemas e documentos de esquema

Tecnicamente, um esquema é uma coleção abstrata de metadados, consistindo em um conjunto de componentes do esquema : principalmente declarações de elementos e atributos e definições de tipo simples e complexas. Esses componentes são geralmente criados pelo processamento de uma coleção de documentos de esquema , que contêm as definições de idioma de origem desses componentes. No uso popular, no entanto, um documento de esquema costuma ser chamado de esquema.

Os documentos de esquema são organizados por namespace: todos os componentes de esquema nomeados pertencem a um namespace de destino, e o namespace de destino é uma propriedade do documento de esquema como um todo. Um documento de esquema pode incluir outros documentos de esquema para o mesmo namespace e pode importar documentos de esquema para um namespace diferente.

Quando um documento de instância é validado em relação a um esquema (um processo conhecido como avaliação ), o esquema a ser usado para validação pode ser fornecido como um parâmetro para o mecanismo de validação ou pode ser referenciado diretamente a partir do documento de instância usando dois atributos especiais , xsi:schemaLocation e xsi:noNamespaceSchemaLocation . (O último mecanismo requer que o cliente invoque a validação para confiar no documento o suficiente para saber que ele está sendo validado em relação ao esquema correto. "Xsi" é o prefixo convencional para o namespace " http://www.w3.org/2001/XMLSchema -instance ".)

Documentos de esquema XML geralmente têm a extensão de nome de arquivo ".xsd". Um único tipo de mídia da Internet ainda não está registrado para XSDs, portanto, "application / xml" ou "text / xml" deve ser usado, de acordo com RFC 3023 .

Componentes do esquema

Os principais componentes de um esquema são:

  • Declarações de elementos , que definem propriedades de elementos. Isso inclui o nome do elemento e o namespace de destino. Uma propriedade importante é o tipo do elemento, que restringe quais atributos e filhos o elemento pode ter. No XSD 1.1, o tipo do elemento pode ser condicional aos valores de seus atributos. Um elemento pode pertencer a um grupo de substituição; se o elemento E está no grupo de substituição do elemento H, então, sempre que o esquema permite que H apareça, E pode aparecer em seu lugar. Os elementos podem ter restrições de integridade: restrições de exclusividade que determinam que valores específicos devem ser únicos dentro da subárvore enraizada em um elemento e restrições referenciais que determinam que os valores devem corresponder ao identificador de algum outro elemento. As declarações de elementos podem ser globais ou locais, permitindo que o mesmo nome seja usado para elementos não relacionados em diferentes partes de um documento de instância.
  • Declarações de atributos , que definem propriedades de atributos. Novamente, as propriedades incluem o nome do atributo e o namespace de destino. O tipo de atributo restringe os valores que o atributo pode assumir. Uma declaração de atributo também pode incluir um valor padrão ou um valor fixo (que é o único valor que o atributo pode assumir).
  • Tipos simples e complexos . Eles são descritos na seção a seguir.
  • Definições de grupos de modelos e grupos de atributos . Estes são essencialmente macros: grupos nomeados de elementos e atributos que podem ser reutilizados em muitas definições de tipo diferentes.
  • Um uso de atributo representa o relacionamento de um tipo complexo e uma declaração de atributo e indica se o atributo é obrigatório ou opcional quando é usado nesse tipo.
  • Uma partícula de elemento representa de forma semelhante a relação de um tipo complexo e uma declaração de elemento e indica o número mínimo e máximo de vezes que o elemento pode aparecer no conteúdo. Assim como partículas de elemento, os modelos de conteúdo podem incluir partículas de grupo de modelos , que agem como não terminais em uma gramática: eles definem as unidades de escolha e repetição dentro da sequência de elementos permitidos. Além disso, partículas curinga são permitidas, o que permite um conjunto de elementos diferentes (talvez qualquer elemento, desde que esteja em um determinado namespace).

Outros componentes mais especializados incluem anotações, asserções, notações e o componente de esquema que contém informações sobre o esquema como um todo.

Tipos

Os tipos simples (também chamados de tipos de dados) restringem os valores textuais que podem aparecer em um elemento ou atributo. Essa é uma das maneiras mais significativas pelas quais o XML Schema difere dos DTDs. Por exemplo, um atributo pode ser restringido para conter apenas uma data válida ou um número decimal.

XSD fornece um conjunto de 19 tipos de dados primitivos ( anyURI , base64Binary , boolean , date , dateTime , decimal , double , duration , float , hexBinary , gDay , gMonth , gMonthDay , gYear , gYearMonth , NOTATION , QName , string , e time ). Ele permite que novos tipos de dados sejam construídos a partir dessas primitivas por três mecanismos:

  • restrição (reduzindo o conjunto de valores permitidos),
  • lista (permitindo uma sequência de valores), e
  • união (permitindo a escolha de valores de vários tipos).

Vinte e cinco tipos derivados são definidos na própria especificação, e outros tipos derivados podem ser definidos pelos usuários em seus próprios esquemas.

Os mecanismos disponíveis para restringir os tipos de dados incluem a capacidade de especificar valores mínimos e máximos, expressões regulares, restrições no comprimento de strings e restrições no número de dígitos em valores decimais. O XSD 1.1 novamente adiciona asserções, a capacidade de especificar uma restrição arbitrária por meio de uma expressão XPath 2.0 .

Os tipos complexos descrevem o conteúdo permitido de um elemento, incluindo seu elemento e filhos de texto e seus atributos. Uma definição de tipo complexo consiste em um conjunto de usos de atributos e um modelo de conteúdo. Variedades de modelo de conteúdo incluem:

  • conteúdo apenas de elemento, em que nenhum texto pode aparecer (exceto espaços em branco ou texto entre um elemento filho)
  • conteúdo simples, em que o texto é permitido, mas os elementos filhos não são
  • conteúdo vazio, em que nem texto nem elementos filho são permitidos
  • conteúdo misto, o que permite que elementos e texto apareçam

Um tipo complexo pode ser derivado de outro tipo complexo por restrição (não permitindo alguns elementos, atributos ou valores que o tipo base permite) ou por extensão (permitindo que atributos e elementos adicionais apareçam). No XSD 1.1, um tipo complexo pode ser restringido por asserções - expressões XPath 2.0 avaliadas em relação ao conteúdo que deve ser avaliado como verdadeiro.

Infoset pós-validação do esquema

Após a validação baseada em esquema XML, é possível expressar a estrutura e o conteúdo de um documento XML em termos do modelo de dados que estava implícito durante a validação. O modelo de dados do esquema XML inclui:

  • O vocabulário (nomes de elementos e atributos)
  • O modelo de conteúdo (relacionamentos e estrutura)
  • Os tipos de dados

Essa coleção de informações é chamada de Post-Schema-Validation Infoset (PSVI). O PSVI dá a um documento XML válido seu "tipo" e facilita o tratamento do documento como um objeto, usando paradigmas de programação orientada a objetos (OOP).

Usos secundários para esquemas XML

O principal motivo para definir um esquema XML é descrever formalmente um documento XML; entretanto, o esquema resultante tem vários outros usos que vão além da simples validação.

Geração de código

O esquema pode ser usado para gerar código, conhecido como XML Data Binding . Este código permite que o conteúdo dos documentos XML sejam tratados como objetos no ambiente de programação.

Geração de documentação de estrutura de arquivo XML

O esquema pode ser usado para gerar documentação legível por humanos de uma estrutura de arquivo XML; isso é especialmente útil quando os autores fizeram uso dos elementos de anotação. Não existe um padrão formal para a geração de documentação, mas várias ferramentas estão disponíveis, como a folha de estilo Xs3p , que produzirá HTML legível de alta qualidade e material impresso.

Crítica

Embora o XML Schema seja bem-sucedido por ter sido amplamente adotado e atingir amplamente o que se propôs, ele tem sido objeto de muitas críticas severas, talvez mais do que qualquer outra recomendação do W3C. Bons resumos das críticas são fornecidos por James Clark, Anders Møller e Michael Schwartzbach, Rick Jelliffe e David Webber.

Problemas gerais:

  • É muito complicado (a especificação tem várias centenas de páginas em uma linguagem muito técnica), por isso é difícil de usar por não especialistas - mas muitos não especialistas precisam de esquemas para descrever formatos de dados. A própria recomendação do W3C é extremamente difícil de ler. A maioria dos usuários acha o W3Cs XML Schema Primer muito mais fácil de entender.
  • O XSD carece de qualquer especificação matemática formal. (Isso torna difícil raciocinar sobre os esquemas, por exemplo, para provar que uma modificação em um esquema é compatível com versões anteriores.)
  • Existem muitas surpresas na linguagem, por exemplo, que a restrição de elementos funciona de forma diferente da restrição de atributos.

Limitações práticas de expressibilidade:

  • XSD oferece suporte muito fraco para conteúdo não ordenado.
  • O XSD não pode exigir um elemento raiz específico (portanto, informações extras são necessárias para validar até mesmo os documentos mais simples).
  • Ao descrever o conteúdo misto , os dados do caractere não podem ser restringidos de nenhuma forma (nem mesmo um conjunto de caracteres válidos pode ser especificado).
  • As declarações de conteúdo e atributo não podem depender de atributos ou contexto de elemento (isso também foi listado como um problema central do DTD).
  • Não é 100% autodescritivo (como um exemplo trivial, consulte o ponto anterior), embora esse fosse um requisito inicial do projeto.
  • Os padrões não podem ser especificados separadamente das declarações (isso torna difícil fazer famílias de esquemas que diferem apenas nos valores padrão); os padrões do elemento só podem ser dados de caractere (não contendo marcação).

Problemas técnicos:

  • Embora seja tecnicamente compatível com o namespace, ele não parece seguir o espírito do namespace (por exemplo, "locais não qualificados").
  • O XSD 1.0 não forneceu recursos para afirmar que o valor ou a presença de um atributo depende dos valores ou da presença de outros atributos (as chamadas restrições de co-ocorrência ). Isso foi corrigido no XSD 1.1.
  • O conjunto de tipos de dados XSD em oferta é altamente arbitrário.
  • As duas tarefas de validação e aumento (adicionar informações de tipo e valores padrão) devem ser mantidas separadas.

Versão 1.1

XSD 1.1 se tornou uma recomendação W3C em abril de 2012 , o que significa que é uma especificação W3C aprovada.

Novos recursos significativos no XSD 1.1 são:

  • A capacidade de definir asserções em relação ao conteúdo do documento por meio de expressões XPath 2.0 (uma ideia emprestada do Schematron ).
  • A capacidade de selecionar o tipo contra o qual um elemento será validado com base nos valores dos atributos do elemento ("atribuição de tipo condicional").
  • Relaxar as regras pelas quais os elementos explícitos em um modelo de conteúdo não devem corresponder a curingas também permitidos pelo modelo.
  • A capacidade de especificar curingas (para elementos e atributos) que se aplicam a todos os tipos no esquema, para que todos implementem a mesma política de extensibilidade.

Até o rascunho da Recomendação Proposta, o XSD 1.1 também propunha a adição de um novo tipo de dado numérico, precisionDecimal. Isso provou ser controverso e, portanto, foi retirado da especificação em um estágio posterior de desenvolvimento.

Veja também

Referências

Leitura adicional

links externos

Especificação W3C XML Schema 1.0

Especificação W3C XML Schema 1.1

Outro