Differences between XML and JSON

by Vahid 24. May 2009 05:29

Here are some key differences between JavaScript Object Notation (or JSON), an open and text-based data exchange format, that provides a standardized data exchange format better suited for Ajax-style web applications and XML.

Although Both JSON and XML can be used to represent native, in-memory objects in a text-based, human-readable, data exchange format, but the two data exchange formats are isomorphic—given text in one format, an equivalent one is conceivable in the other.

following tables is a high level comparision between JSON and XML.

Key Characteristic Differences between XML and JSON

CharacteristicXMLJSON
Data types Does not provide any notion of data types. One must rely on XML Schema for adding type information. Provides scalar data types and the ability to express structured data through arrays and objects.
Support for arrays Arrays have to be expressed by conventions, for example through the use of an outer placeholder element that models the arrays contents as inner elements. Typically, the outer element uses the plural form of the name used for inner elements. Native array support.
Support for objects Objects have to be expressed by conventions, often through a mixed use of attributes and elements. Native object support.
Null support Requires use of xsi:nil on elements in an XML instance document plus an import of the corresponding namespace. Natively recognizes the null value.
Comments Native support and usually available through APIs. Not supported.
Namespaces Supports namespaces, which eliminates the risk of name collisions when combining documents. Namespaces also allow existing XML-based standards to be safely extended. No concept of namespaces. Naming collisions are usually avoided by nesting objects or using a prefix in an object member name (the former is preferred in practice).
Formatting decisions Complex. Requires a greater effort to decide how to map application types to XML elements and attributes. Can create heated debates whether an element-centric or attribute-centric approach is better. Simple. Provides a much more direct mapping for application data. The only exception may be the absence of date/time literal.
Size Documents tend to be lengthy in size, especially when an element-centric approach to formatting is used. Syntax is very terse and yields formatted text where most of the space is consumed (rightly so) by the represented data.
Parsing in JavaScript Requires an XML DOM implementation and additional application code to map text back into JavaScript objects. No additional application code required to parse text; can use JavaScript's eval function.
Learning curve Generally tends to require use of several technologies in concert: XPath, XML Schema, XSLT, XML Namespaces, the DOM, and so on. Very simple technology stack that is already familiar to developers with a background in JavaScript or other dynamic programming languages.

JSON is a relatively new data exchange format and does not have the years of adoption or vendor support that XML enjoys today (although JSON is catching up quickly). The following table highlights the current state of affairs in the XML and JSON spaces.

Support Differences between XML and JSON

SupportXMLJSON
Tools Enjoys a mature set of tools widely available from many industry vendors. Rich tool support—such as editors and formatters—is scarce.
Microsoft .NET Framework Very good and mature support since version 1.0 of the .NET Framework. XML support is available as part of the Base Class Library (BCL). For unmanaged environments, there is MSXML. None so far, except an initial implementation as part of ASP.NET AJAX.
Platform and language Parsers and formatters are widely available on many platforms and languages (commercial and open source implementations). Parsers and formatters are available already on many platforms and in many languages. Consult json.org for a good set of references. Most implementations for now tend to be open source projects.
Integrated language Industry vendors are currently experimenting with support literally within languages. See Microsoft's LINQ project for more information. Is natively supported in JavaScript/ECMAScript only.

Tags: ,

Learning resource | Technical

XPath expressions quick reference:

by Vahid 7. May 2009 07:00

  if you work with XML and xpath for sure the reference seems to be a trivial one for you. but if you stop working with xml and xpath for a while you’ll find the reference pretty handy. i personally keep it with me always. hope it also helps you.

the reference xpath expression is for this xml content:

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <Albums>
   3:   <Album country="USA">
   4:     <title>Empire Burlesque</title>
   5:     <artist>Bob Dylan</artist>
   6:     <price>10.90</price>
   7:   </Album>
   8:   <Album country="UK">
   9:     <title>Hide your heart</title>
  10:     <artist>Bonnie Tyler</artist>
  11:     <price>10.0</price>
  12:   </Album>
  13:   <Album country="USA">
  14:     <title>Greatest Hits</title>
  15:     <artist>Dolly Parton</artist>
  16:     <price>9.90</price>
  17:   </Album>
  18: </Albums>

and here is the quick reference

/Albums

selects the root element

/Albums/Album

selects all the Album elements of the Albums element

/Albums/Album/price

selects all the price elements of all the Album elements of the Albums element

/Albums/Album[price>10.0]

selects all the Album elements with price greater than 10.0

starts with a slash(/)

represents an absolute path to an element

starts with two slashes(//)

selects all elements that satisfy the criteria

//Album

selects all Album elements in the document

/Albums/Album/title | /Albums/Album/artist

selects all the title and artist elements of the Album elements of Albums

//title | //artist

selects all the title and artist elements in the document

/Albums/Album/*

selects all the child elements of all Album elements of the Albums element

/Albums/*/price

selects all the price elements that are grandchildren of Albums

/*/*/price

selects all price elements which have two ancestors

//*

selects all elements in the document

/Albums/Album[1]

selects the first Album child of Albums

/Albums/Album[last()]

selects the last Album child of Albums

/Albums/Album[price]

selects all the Album elements that have price

/Albums/Album[price=10.90]

selects Album elements with the price of 10.90

/Albums/Album[price=10.90]/price

selects all price elements with the price of 10.90

//@country

selects all "country" attributes

//Album[@country]

selects Album elements which have a "country" attribute

//Album[@*]

selects Album elements which have any attribute

//Album[@country='UK']

selects Album elements with "country" attribute equal to 'UK'

 

 

Tags: ,

Technical

XML Tools

by Vahid 25. December 2008 20:36

working extensively on XML these days, i was in need a good tool which has the ability to evaluate XPath queries. i have been using XML Notepad for a long time and really like the tool but there is not feature in the tool to evaluate Xpath queries. searching around i found XML Explorer. the tool supports so many functions and it is really fast. You need to work on xml like me, take the tools from here

 

http://www.codeplex.com/xmlexplorer

http://www.codeplex.com/xmlnotepath

Tags: ,

Technical