Por que o tipo XML é seguro?


30

Por que eles dizem que o XML fornece segurança de tipo e como é expresso no próprio XML?

Qual é a diferença do JSON (por exemplo) que (como eu entendo) não é do tipo seguro?

Respostas:


36

Por causa da definição de esquema XML (XSD).

Com o XML, você pode ter um arquivo adicional que descreve o esquema. Indica, por exemplo, que o elemento /a/bé uma matriz e contém de 1 a 10 elementos, ou que o elemento /a/cé um número inteiro. Você pode encontrar um exemplo de um XSD aqui .

A validação de um determinado arquivo XML por meio de um XSD é suportada por vários idiomas . Por exemplo, um aplicativo .NET pode solicitar um arquivo XML de uma fonte não confiável e verificar se ele corresponde ao XSD ; em seguida, ele pode salvá-lo em um banco de dados do Microsoft SQL Server, que por sua vez pode conter um XSD e fazer a verificação novamente (para garantir que qualquer cliente que tenha acesso ao banco de dados seja compatível).

XSD não é o único idioma.

  • Se você fez o desenvolvimento da Web, certamente ouviu falar sobre a Document Type Definition (DTD) - uma linguagem de marcação que define a estrutura do XML e é usada especialmente na validação de conteúdo relacionado a HTML. Embora ele não possa fazer tudo o que o XSD pode, como garantir que um elemento ou atributo contenha um número inteiro, ele ainda pode executar várias verificações de estrutura.

  • O RELAX NG tem o benefício de ser relativamente simples em comparação com outras linguagens e pode ser escrito de uma forma mais compacta que o XML.

  • Schematron é outra "linguagem de validação baseada em regras para fazer afirmações sobre a presença ou ausência de padrões nas árvores XML" ( Wikipedia ) e apresenta uma abordagem ligeiramente diferente, baseada nas afirmações XPath.

Iniciativas semelhantes para JSON não são tão populares (especialmente, acredito, no mundo corporativo centrado na Microsoft). Uma das razões é que o JSON é destinado a situações em que a estrutura de dados é bastante básica (ou seja, pode ser expressa como uma árvore, sem a necessidade de atributos, por exemplo) e não necessariamente precisa ser validada. Um excelente exemplo é uma API REST usada por uma linguagem de tipo dinâmico:

  • o cliente é muito fácil e rápido de implementar,
  • é confiável que a API não mude,
  • o cliente pode lidar facilmente com folhas específicas onde a validação é necessária (por exemplo, verifique se esse /something/percentageé um número real e se está no intervalo de 0 a 100).

20

O XML pode ser do tipo seguro, pois é possível com os esquemas XSD declarar o tipo de dados dos elementos. É garantido que um documento validado em um esquema XSD esteja em conformidade com os tipos esperados. Porém, não é necessário que um formato XML tenha um esquema; portanto, um documento não é automaticamente seguro como sendo XML.

Na verdade, também existe uma linguagem de esquema para JSON , portanto, é possível digitar JSON seguro. Mas raramente é usado, portanto, normalmente o JSON não é do tipo seguro.


2
Sua resposta seria melhor com um nome ou link para o JSON equivalente a XSD.
DougM

11
BTW: XML Schema não é, de longe, a única linguagem de definição de esquema para XML. Há também Schematron, RelaxNG e, claro, o bom e velho SGML DTD.
Jörg W Mittag

Lembre-se também de que, mesmo com um esquema, o XML pode não ser seguro para o tipo. Pode-se especificar um elemento para ter "qualquer" tipo de conteúdo. Embora se possa argumentar que é uma forma de segurança de tipo (não me importo, nada é válido) ao mesmo tempo, nenhuma validação pode ser realizada: é essencialmente um tipo de "variante".

3

Na ciência da computação, segurança de tipo é a extensão em que uma linguagem de programação desencoraja ou evita erros de tipo.

A segurança do tipo não é um atributo absoluto. Não é booleano. Os idiomas (e XML e JSON são idiomas) permitem e evitam diferentes tipos de erros. Por exemplo, você pode dar um nome errado aos elementos. Mas você não pode pular os elementos sintáticos necessários, como fechar tags e chaves.

XML simples e JSON são praticamente igualmente seguros quanto ao tipo (ou não seguros). Uma cadeia XML / JSON válida possui uma certa estrutura sintática e semântica, mas isso quase nunca é suficiente para um aplicativo trabalhar com ela. Os aplicativos não possuem apenas uma estrutura, mas uma estrutura específica.

XML brilha com o XML Schema Definition (XSD), que é uma maneira flexível e poderosa de validar um determinado documento XML em um esquema. Isso fornece muita segurança de tipo na definição dada acima.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.