Articulo de referencia

JsonML

application/jsonml+json  (unofficial)"},"type code":{"wt":""},"uniform type":{"wt":""},"magic":{"wt":""},"owner":{"wt":""},"genre":{"wt":"[[Markup language]] and [[Web temp...

JsonML , el lenguaje de marcado JSON , es un lenguaje de marcado ligero que se utiliza para establecer correspondencias entre XML (Lenguaje de Marcado Extensible) y JSON (Notación de Objetos JavaScript). Convierte un documento o fragmento XML en una estructura de datos JSON para facilitar su uso en entornos JavaScript , como un navegador web , permitiendo la manipulación de datos XML sin la complejidad de un analizador XML.

JsonML tiene su mayor aplicabilidad en aplicaciones web Ajax (Asynchronous JavaScript and XML). Se utiliza para transportar XHTML (eXtensible HyperText Markup Language) al cliente, donde se puede reconstruir de forma determinista en elementos DOM (Document Object Model). Se puede emplear una estrategia de mejora progresiva durante la construcción para vincular comportamientos dinámicos a elementos que, de otro modo, serían estáticos. [ 1 ]

JsonML también puede utilizarse como estructura subyacente para crear plantillas complejas del lado del cliente, denominadas JBST (JsonML + Plantillas del lado del navegador). [ 2 ] Sintácticamente, JBST se asemeja a los controles de usuario de JSP (JavaServer Pages) o ASP.NET (Active Server Pages .NET). En el sitio web jsonml.org se encuentran disponibles ejemplos interactivos.

Sintaxis

La conversión de XML a JsonML es parcialmente reversible. Los espacios de nombres XML se manejan anteponiendo el prefijo del espacio de nombres al nombre del elemento, por ejemplo, se convierte en .<myns:myElement/>["myns:myElement"]

Ejemplo de transformación

JsonML permite que cualquier documento XML se represente de forma única como una cadena JSON. La sintaxis utiliza:

  • Matrices JSON para representar elementos XML;
  • Objetos JSON para representar atributos;
  • Cadenas JSON para representar nodos de texto.

Una transformación JSON “normal” produce una representación más compacta, pero pierde parte de la información estructural del documento, ya que no define si un par clave-valor es un atributo o un nodo:

{ "persona" : { "dirección" : { "ciudad" : "Cualquier ciudad" , "código postal" : "98765-4321" , "estado" : "CA" , "calle" : "12345 Sexta Avenida" , "tipo" : "casa" }, "creado" : "2006-11-11T19:23" , "nombre" : "Robert" , "apellido" : "Smith" , "modificado" : "2006-12-31T23:59" }}

"Forma de objeto" es un término erróneo.

En un hilo de un grupo de usuarios de JSON, Douglas Crockford utilizó incorrectamente el término "JsonML" para describir dos variantes: la "forma de matriz" y la "forma de objeto". [ 3 ] Esto constituyó un uso indebido del término JsonML, que siempre ha significado lo que Crockford denominó la "forma de matriz". [ 4 ]

Validación

JsonML se puede validar con el siguiente esquema JSON:

{ "type" : "array" , "minItems" : 1 , "maxItems" : 3 , "items" : [ { "type" : "string" }, { "oneOf" : [ { "type" : "object" }, { "type" : "string" }, { "type" : "array" , "items" :{ "$ref" : "#" }} ]}, { "oneOf" : [ { "type" : "string" }, { "type" : "array" , "items" :{ "$ref" : "#" }} ]} ] }

Comparación con tecnologías similares

XML/XSLT

XML y XSLT (Transformaciones de Lenguaje de Hojas de Estilo Extensibles) también pueden generar plantillas del lado del cliente, y ambos permiten almacenar en caché la plantilla por separado de los datos. JBST utiliza JavaScript de forma nativa en la plantilla, en lugar de requerir la combinación de diferentes tipos de lenguajes de control.

HTML interno

Aunque aparentemente se utilizan para realizar tareas similares, JsonML e innerHTML son bastante diferentes. InnerHTML requiere que todo el marcado se presente de forma exacta, lo que significa que o bien el servidor lo renderiza, o bien el programador realiza costosas concatenaciones de cadenas en JavaScript.

JsonML utiliza plantillas del lado del cliente mediante JBST, lo que significa que el HTML se convierte en una plantilla JavaScript durante la compilación . En tiempo de ejecución , se proporcionan los datos y se generan los elementos DOM. Estos elementos DOM resultantes pueden insertarse o reemplazar un elemento existente, algo que innerHTML no puede hacer fácilmente sin crear elementos DOM adicionales. La reconfiguración solo requiere solicitar datos adicionales, que son más pequeños que el marcado completamente expandido. Como resultado, a menudo se obtienen grandes mejoras de rendimiento, ya que el marcado se solicita o se almacena en caché por separado de los datos.

Patrón de mensaje HTML/Plantillas del lado del navegador

Para simplificar, innerHTML ha sido el método preferido para el estilo de patrón de mensaje HTML [ 5 ] de Ajax. Sin embargo, herramientas como JsonFx [ 6 ] buscan simplificar la implementación de JsonML y JBST, al tiempo que proporcionan un patrón de plantillas Ajax completo del lado del navegador. [ 7 ]

Referencias

  1. McKamey, Stephen M. (3 de febrero de 2007). "JsonML - Vinculación de comportamientos a elementos DOM" . Sitio web oficial . JsonML.org. Archivado del original el 14 de agosto de 2010. Recuperado el 7 de enero de 2011 .
  2. McKamey, Stephen M. (3 de agosto de 2008). "JsonML + Plantillas del lado del navegador (JBST)" . Sitio web oficial . JsonML.org . Consultado el 7 de enero de 2011 .
  3. "Json : Message: Org.json.JSONML.java" . Archivado del original el 27-04-2012 . Recuperado el 12-02-2009 . 
  4. "JsonML (JSON Markup Language)" .
  5. "Mensaje HTML" . Acerca de AjaxPatterns.org . AjaxPatterns.org . Consultado el 7 de enero de 2011 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  6. "Bienvenido a JsonFx.NET" . Sitio web oficial de JsonFx.NET . Stephen M. McKamey . Consultado el 7 de enero de 2011 .
  7. "Plantillas del lado del navegador" . AjaxPatterns.org . Consultado el 7 de enero de 2011 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  • JsonML.org
  • Artículo de IBM developerWorks
  • Implementación de JSONML en Java - escrita por Douglas Crockford
  • JsonFx.NET - Marco C#/.NET JBST
  • C++ JDX XPath 2.0 para XML, JSON y JsonML