JsonML
Encyclopedia
JsonML, the JSON Markup Language is a lightweight markup language
used to map between XML
(Extensible Markup Language) and JSON
(JavaScript Object Notation). It converts an XML document or fragment into a JSON data structure for ease of use within JavaScript
environments such as a web browser
, allowing manipulation of XML data without the overhead of an XML parser.
JsonML has greatest applicability in Ajax
(Asynchronous JavaScript and XML) web applications. It is used to transport XHTML
(eXtensible HyperText Markup Language) down to the client where it can be deterministically
reconstructed into DOM
(Document Object Model) elements. Progressive enhancement
strategy can be employed during construction to bind dynamic behaviors to otherwise static elements.
JsonML can also be used as the underlying structure for creating intricate client-side templates called JBST (JsonML+Browser-Side Templates). Syntactically JBST looks like JSP
(JavaServer Pages) or ASP.NET
(Active Server Pages .NET) user controls. Interactive examples are available on the jsonml.org website.
s are handled by prepending the element name with the namespace prefix, e.g.,
The JsonML object form representation of the above coding is:
A “regular” JSON transformation produces a more compact representation, but loses some of the document structural information:
(Extensible Stylesheet Language Transformations) can also produce client-side templating, and both allow caching of the template separate from the data. Many programmers however find the syntax of JBST is easier to manage due to its familiarity. JBST uses JavaScript
natively in the template, rather than requiring mixing of different types of control language.
is rendering the markup, or the programmer is performing expensive string concatenations in JavaScript.
JsonML uses client-side templating through JBST, which means that HTML is converted into a JavaScript template at build time
. At run time, the data is supplied and DOM elements are the result. The resulting DOM elements can be inserted or replace an existing element, which innerHTML cannot easily do without creating excess DOM elements. Rebinding only requires requesting additional data, which is smaller than fully expanded markup. As a result, large performance gains are often made, since the markup is requested or cache
d separately from the data.
Lightweight markup language
A lightweight markup language is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form....
used to map between XML
XML
Extensible Markup Language is a set of rules for encoding documents in machine-readable form. It is defined in the XML 1.0 Specification produced by the W3C, and several other related specifications, all gratis open standards....
(Extensible Markup Language) and JSON
JSON
JSON , or JavaScript Object Notation, is a lightweight text-based open standard designed for human-readable data interchange. It is derived from the JavaScript scripting language for representing simple data structures and associative arrays, called objects...
(JavaScript Object Notation). It converts an XML document or fragment into a JSON data structure for ease of use within JavaScript
JavaScript
JavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
environments such as a web browser
Web browser
A web browser is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. An information resource is identified by a Uniform Resource Identifier and may be a web page, image, video, or other piece of content...
, allowing manipulation of XML data without the overhead of an XML parser.
JsonML has greatest applicability in Ajax
Ajax (programming)
Ajax is a group of interrelated web development methods used on the client-side to create asynchronous web applications...
(Asynchronous JavaScript and XML) web applications. It is used to transport XHTML
XHTML
XHTML is a family of XML markup languages that mirror or extend versions of the widely-used Hypertext Markup Language , the language in which web pages are written....
(eXtensible HyperText Markup Language) down to the client where it can be deterministically
Deterministic automaton
Deterministic automaton is a concept of automata theory in which the outcome of a transition from one state to another given a certain input can be predicted for every occurrence....
reconstructed into DOM
Document Object Model
The Document Object Model is a cross-platform and language-independent convention for representing and interacting with objects in HTML, XHTML and XML documents. Aspects of the DOM may be addressed and manipulated within the syntax of the programming language in use...
(Document Object Model) elements. Progressive enhancement
Progressive enhancement
Progressive enhancement is a strategy for web design that emphasizes accessibility, semantic HTML markup, and external stylesheet and scripting technologies...
strategy can be employed during construction to bind dynamic behaviors to otherwise static elements.
JsonML can also be used as the underlying structure for creating intricate client-side templates called JBST (JsonML+Browser-Side Templates). Syntactically JBST looks like JSP
JavaServer Pages
JavaServer Pages is a Java technology that helps software developers serve dynamically generated web pages based on HTML, XML, or other document types...
(JavaServer Pages) or ASP.NET
ASP.NET
ASP.NET is a Web application framework developed and marketed by Microsoft to allow programmers to build dynamic Web sites, Web applications and Web services. It was first released in January 2002 with version 1.0 of the .NET Framework, and is the successor to Microsoft's Active Server Pages ...
(Active Server Pages .NET) user controls. Interactive examples are available on the jsonml.org website.
Syntax
There are two forms of JsonML, array form and object form. Conversion from XML to JsonML is fully reversible. XML NamespaceXML Namespace
xmlns tagged XML namespaces are used for providing uniquely named elements and attributes in an XML document. They are defined in a W3C recommendation. An XML instance may contain element or attribute names from more than one XML vocabulary...
s are handled by prepending the element name with the namespace prefix, e.g.,
<myns:myElement/>
becomes ["myns:myElement"]
.JsonML array form
The array form is the original form, and allows any XML document to be represented uniquely as a JSON string. JsonML array form uses:- JSON arrays to represent XML elements;
- JSON objectsAssociative arrayIn computer science, an associative array is an abstract data type composed of a collection of pairs, such that each possible key appears at most once in the collection....
to represent attributes; - JSON stringsString (computer science)In formal languages, which are used in mathematical logic and theoretical computer science, a string is a finite sequence of symbols that are chosen from a set or alphabet....
to represent text nodes.
JsonML (array form) | Original XML |
---|---|
JsonML object form
The object form assumes that there are no XML attributes named tagName or childNodes. JsonML Object Form uses:- JSON arrays to represent child nodeTree (data structure)In computer science, a tree is a widely-used data structure that emulates a hierarchical tree structure with a set of linked nodes.Mathematically, it is an ordered directed tree, more specifically an arborescence: an acyclic connected graph where each node has zero or more children nodes and at...
lists; - JSON objectAssociative arrayIn computer science, an associative array is an abstract data type composed of a collection of pairs, such that each possible key appears at most once in the collection....
s to represent XML elements and their attributes.
The JsonML object form representation of the above coding is:
JsonML (object form) | Original XML |
---|---|
A “regular” JSON transformation produces a more compact representation, but loses some of the document structural information:
XML/XSLT
XML and XSLTXSLT
XSLT is a declarative, XML-based language used for the transformation of XML documents. The original document is not changed; rather, a new document is created based on the content of an existing one. The new document may be serialized by the processor in standard XML syntax or in another format,...
(Extensible Stylesheet Language Transformations) can also produce client-side templating, and both allow caching of the template separate from the data. Many programmers however find the syntax of JBST is easier to manage due to its familiarity. JBST uses JavaScript
JavaScript
JavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
natively in the template, rather than requiring mixing of different types of control language.
InnerHTML
While seemingly used to perform similar tasks, JsonML and innerHTML are quite different. InnerHTML requires all the markup in an exact form, meaning that either the serverServer (computing)
In the context of client-server architecture, a server is a computer program running to serve the requests of other programs, the "clients". Thus, the "server" performs some computational task on behalf of "clients"...
is rendering the markup, or the programmer is performing expensive string concatenations in JavaScript.
JsonML uses client-side templating through JBST, which means that HTML is converted into a JavaScript template at build time
Compile time
In computer science, compile time refers to either the operations performed by a compiler , programming language requirements that must be met by source code for it to be successfully compiled , or properties of the program that can be reasoned about at compile time.The operations performed at...
. At run time, the data is supplied and DOM elements are the result. The resulting DOM elements can be inserted or replace an existing element, which innerHTML cannot easily do without creating excess DOM elements. Rebinding only requires requesting additional data, which is smaller than fully expanded markup. As a result, large performance gains are often made, since the markup is requested or cache
Cache
In computer engineering, a cache is a component that transparently stores data so that future requests for that data can be served faster. The data that is stored within a cache might be values that have been computed earlier or duplicates of original values that are stored elsewhere...
d separately from the data.
HTML message pattern/Browser-side templating
For simplicity, innerHTML has been the preferred method for the HTML-Message pattern style of Ajax. However, tools like JsonFx aim to simplify JsonML and JBST implementation while still providing a full browser-side templating Ajax pattern.External links
- JsonML.org
- IBM developerWorks Article
- Java JSONML implementation - written by Douglas Crockford
- JsonFx.NET - C#/.NET JBST Framework
- C++ JDX XPath 2.0 for XML, JSON and JsonML