¿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?
fuente
¿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?
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/b
es una matriz y contiene de 1 a 10 elementos, o que el elemento /a/c
es 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:
/something/percentage
sea un número real y esté en el rango 0..100).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.
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.
fuente