JsonML , el lenguaje de marcado JSON es un lenguaje de marcado ligero que se utiliza para mapear 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 , lo que permite la manipulación de datos XML sin la sobrecarga de un analizador XML .
Tipo de medio de Internet | application/jsonml+json (no oficial) |
---|---|
Tipo de formato | Lenguaje de marcado y sistema de plantillas web |
Extendido desde | XML , JSON y JavaScript |
JsonML tiene la mayor aplicabilidad en aplicaciones web Ajax (JavaScript asíncrono y XML). Se utiliza para transportar XHTML (Lenguaje de marcado de hipertexto extensible) hasta el cliente, donde se puede reconstruir de forma determinista en elementos DOM (Modelo de objeto de documento). Se puede emplear una estrategia de mejora progresiva durante la construcción para unir comportamientos dinámicos a elementos que de otro modo serían estáticos. [1]
JsonML también se puede utilizar como estructura subyacente para crear intrincadas plantillas del lado del cliente llamadas JBST (JsonML + Plantillas del lado del navegador). [2] Sintácticamente, JBST se parece a los controles de usuario JSP (JavaServer Pages) o ASP.NET (Active Server Pages .NET). Hay ejemplos interactivos disponibles en el sitio web jsonml.org.
Sintaxis
La conversión de XML a JsonML es parcialmente reversible. Los espacios de nombres XML se manejan anteponiendo el nombre del elemento con el prefijo del espacio de nombres, por ejemplo, se
convierte ["myns:myElement"]
.
Transformación de ejemplo
JsonML permite que cualquier documento XML se represente de forma única como una cadena JSON. La sintaxis usa:
- Matrices JSON para representar elementos XML;
- Objetos JSON para representar atributos;
- Cadenas JSON para representar nodos de texto.
Codificado en JsonML | XML original |
---|---|
[ "persona" , { "creado" : "2006-11-11T19: 23" , "modificado" : "2006-12-31T23: 59" }, [ "firstName" , "Robert" ], [ "lastName" , "Smith" ], [ "address" , { "type" : "home" }, [ "street" , "12345 Sixth Ave" ], [ "city" , "Anytown" ], [ "state" , "CA" ], [ "postalCode" , "98765-4321" ] ] ] | |
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:
{ "person" : { "address" : { "city" : "Anytown" , "postalCode" : "98765-4321" , "state" : "CA" , "street" : "12345 Sixth Ave" , "type" : "home" }, "created" : "2006-11-11T19: 23" , "firstName" : "Robert" , "lastName" : "Smith" , "modified" : "2006-12-31T23: 59" } }
Nombre incorrecto de "Forma de objeto"
En un hilo de un grupo de usuarios JSON, Douglas Crockford usó incorrectamente el término "JsonML" para describir dos variantes: la "forma de matriz" y la "forma de objeto". [3] Este fue un mal uso del término JsonML, que siempre ha significado lo que Crockford denominaba "forma de matriz". [4]
Comparación con tecnologías similares
XML / XSLT
XML y XSLT (Transformaciones de lenguaje de hoja de estilo extensible) también pueden producir plantillas del lado del cliente, y ambos permiten el almacenamiento en caché de la plantilla por separado de los datos. Sin embargo, muchos programadores encuentran que la sintaxis de JBST es más fácil de administrar debido a su familiaridad. JBST utiliza JavaScript de forma nativa en la plantilla, en lugar de requerir la combinación de diferentes tipos de lenguaje de control.
InnerHTML
Si bien aparentemente se usa para realizar tareas similares, JsonML e innerHTML son bastante diferentes. InnerHTML requiere todo el marcado en una forma exacta, lo que significa que el servidor está procesando el marcado o el programador está realizando costosas concatenaciones de cadenas en JavaScript.
JsonML utiliza plantillas del lado del cliente a través de JBST, lo que significa que HTML se convierte en una plantilla de JavaScript en el momento de la compilación . En tiempo de ejecución , se suministran los datos y el resultado son elementos DOM. Los elementos DOM resultantes se pueden insertar o reemplazar un elemento existente, lo que innerHTML no puede hacer fácilmente sin crear elementos DOM en exceso. Para volver a vincular solo es necesario solicitar datos adicionales, que son más pequeños que el marcado completamente expandido. Como resultado, a menudo se obtienen grandes ganancias 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
Por simplicidad, innerHTML ha sido el método preferido para el estilo HTML-Message pattern [5] de Ajax. Sin embargo, herramientas como JsonFx [6] apuntan a simplificar la implementación de JsonML y JBST al mismo tiempo que proporcionan un patrón Ajax completo de plantillas en el lado del navegador. [7]
Referencias
- ^ McKamey, Stephen M. (3 de febrero de 2007). "JsonML - Binding Behaviors to DOM Elements" . Sitio web oficial . JsonML.org. Archivado desde el original el 14 de agosto de 2010 . Consultado el 7 de enero de 2011 .
- ^ 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 .
- ^ http://tech.groups.yahoo.com/group/json/message/1115
- ^ http://jsonml.org/syntax/
- ^ "Mensaje HTML" . Acerca de AjaxPatterns.org . AjaxPatterns.org. Archivado desde el original el 1 de julio de 2012 . Consultado el 7 de enero de 2011 .
- ^ "Bienvenido a JsonFx.NET" . Sitio web oficial de JsonFx.NET . Stephen M. McKamey . Consultado el 7 de enero de 2011 .
- ^ "Plantillas del lado del navegador" . AjaxPatterns.org. Archivado desde el original el 7 de julio de 2012 . Consultado el 7 de enero de 2011 .
enlaces externos
- JsonML.org
- Artículo de IBM developerWorks
- Implementación Java JSONML - escrito por Douglas Crockford
- JsonFx.NET - C # /. NET JBST Framework
- C ++ JDX XPath 2.0 para XML, JSON y JsonML