¿Por qué es seguro el tipo XML?


30

¿Por qué dicen que XML proporciona seguridad de tipo y cómo se expresa en el propio XML?

¿En qué se diferencia de JSON (por ejemplo) que (según tengo entendido) no es de tipo seguro?

Respuestas:


36

Debido a la definición de esquema XML (XSD).

Con XML, puede tener un archivo adicional que describe el esquema. Indica, por ejemplo, que el elemento /a/bes una matriz y contiene de 1 a 10 elementos, o que el elemento /a/ces un número entero. Puede encontrar un ejemplo de un XSD aquí .

La validación de un archivo XML dado a través de un XSD es compatible con muchos idiomas . Por ejemplo, una aplicación .NET puede solicitar un archivo XML de una fuente no confiable y verificar que coincida con el XSD ; luego, puede guardarlo en una base de datos de Microsoft SQL Server, que a su vez puede contener un XSD y hacer la verificación nuevamente (para asegurarse de que cualquier cliente que tenga acceso a la base de datos cumpla).

XSD no es el único idioma.

  • Si ha realizado desarrollo web, seguramente escuchó sobre la definición de tipo de documento (DTD), un lenguaje de marcado que define la estructura de XML y se utiliza especialmente en la validación de contenido relacionado con HTML. Si bien no puede hacer todo lo que XSD puede hacer, como asegurarse de que un elemento o un atributo contenga un número entero, aún puede realizar un montón de verificaciones de estructura.

  • RELAX NG tiene la ventaja de ser relativamente simple en comparación con otros lenguajes y puede escribirse en una forma más compacta que XML.

  • Schematron es otro "lenguaje de validación basado en reglas para hacer afirmaciones sobre la presencia o ausencia de patrones en árboles XML" ( Wikipedia ) y presenta un enfoque ligeramente diferente, basado en afirmaciones XPath.

Iniciativas similares para JSON no son tan populares (especialmente, creo, en el mundo corporativo centrado en Microsoft). Una de las razones es que JSON está destinado a situaciones en las que la estructura de datos es bastante básica (es decir, puede expresarse como un árbol, sin la necesidad de atributos, por ejemplo) y no necesariamente debe validarse. Un excelente ejemplo es una API REST utilizada por un lenguaje de tipo dinámico:

  • El cliente es muy fácil y rápido de implementar.
  • se confía en la API para no cambiar,
  • el cliente puede manejar fácilmente hojas específicas donde la validación es necesaria (por ejemplo, verifique que /something/percentagesea ​​un número real y esté en el rango 0..100).

20

XML puede ser de tipo seguro, ya que es posible con esquemas XSD declarar el tipo de datos de los elementos. Un documento validado contra un esquema XSD está garantizado para cumplir con los tipos esperados. Pero no se requiere un formato XML para tener un esquema, por lo que un documento no es seguro de tipo automático simplemente por ser XML.

En realidad, también existe un lenguaje de esquema para JSON , por lo que es posible escribir JSON seguro. Pero rara vez se usa, por lo que, por lo general, JSON no es de tipo seguro.


2
Su respuesta sería mejor con un nombre o enlace para el JSON equivalente a XSD.
DougM

1
Por cierto: el esquema XML no es el único lenguaje de definición de esquema para XML. También hay Schematron, RelaxNG y, por supuesto, un buen SGML DTD.
Jörg W Mittag

También tenga en cuenta que incluso con un esquema, XML podría no ser seguro para los tipos. Se puede especificar que un elemento tenga "cualquier" tipo de contenido. Si bien se podría argumentar que es una forma de seguridad de tipo (no me importa, cualquier cosa es válida) al mismo tiempo no se puede realizar ninguna validación: es esencialmente un tipo "variante".

3

En informática, la seguridad de tipos es la medida en que un lenguaje de programación desalienta o evita los errores de tipo.

La seguridad de tipo no es un atributo absoluto. No es booleano. Los idiomas (y XML y JSON son idiomas) permiten y previenen diferentes tipos de errores y equivocaciones. Por ejemplo, puede nombrar mal los elementos. Pero no puede omitir los elementos sintácticos necesarios, como el cierre de etiquetas y llaves.

Plain XML y JSON son más o menos igual de seguros (o inseguros). Una cadena XML / JSON válida tiene una cierta estructura sintáctica y semántica, pero esto casi nunca es suficiente para que una aplicación funcione con ella. Las aplicaciones no son cualquiera una estructura sino una específica.

XML brilla con la definición de esquema XML (XSD), que es una forma flexible y poderosa de validar un documento XML dado contra un esquema. Esto proporciona mucha seguridad de tipo bajo la definición dada anteriormente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.