Draft Draft
1
JSONiq: XQuery for JSON
Jonathan Robie
Matthias Brantner
Daniela Florescu
Ghislain Fourny
Till Westmann
Abstract
XML and JSON have become the dominant formats for exchanging data on the Internet, and applications frequently need to
send and receive data in many different JSON-based or XML-based formats. For XML data, a query language like XQuery can
be used to query data, create or update data, transform it from one format to another, or route data. Adding JSON support to
XQuery allows it to perform these tasks for both XML and JSON, combining data from multiple sources as needed.
JSONiq is a query language for JSON, based on XQuery. It is designed to allow an existing XQuery processor to be rewritten
to support JSON with moderate effort. One profile of JSONiq removes everything directly related to XML, adding JSON
constructors and navigation. Another profile of JSONiq includes the full XQuery language, with added JSON support, allowing
queries to consume or produce JSON, XML, or HTML.
1. Introduction ...... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... 1
2. JSONiq in a Nutshell . . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... 1
3. Grouping Queries for JSON ... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . .. 2
4. JSON Views in Middleware .. . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . .... 3
5. JSON with XML and HTML ....... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... 4
6. Conclusion . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . ..... . ..... . . 5
Bibliography 5
1. Introduction
XQuery is the standard query language for XML, and has been implemented in databases, streaming processors, data
integration platforms, application integration platforms, XML message routing software, web browser plugins, and other
environments. JSONiq makes it easy for an XQuery processor to support JSON in these same environments.
Currently, there is no standard query language for JSON, and many JSON programmers do not want the complexity of XML.
Because of the modular, compositional design of XQuery, it is easy to remove the XML-specific portions of the language, and
to add similar functionality for JSON. XQuery consists largely of XML constructors, XML path expressions, and expressions
for querying and transforming data, such as FLWOR expressions, that are not directly based on XML. One profile of JSONiq
removes everything directly related to XML, adding JSON constructors and navigation. The resulting language is simpler and
easier to optimize, and well suited to JSON views in middleware. But it includes sophisticated query capabilities, including
grouping and windowing, that are very useful in a JSON environment.
Another profile of JSONiq includes the full XQuery language, with added JSON support, allowing queries to consume or
produce JSON, XML, or HTML. XML continues to be widely used for data interchange on the Internet, and many applications
need to process both JSON and XML. XML has significant advantages for document data, is well supported by standards,
is part of a rich ecosystem of tools, libraries, and language extensions, and is required by many existing data interchange
standards. Particularly in applications where data resembles human documents, including many healthcare, financial,
government, intelligence, legal, and publishing applications, XML continues to have advantages over JSON — particularly when
document data needs to be queried. Adding the JSONiq extensions to XQuery allows queries to process or produce JSON,
XML, or HTML, combining and transforming data from any of these formats as needed. And adding JSON objects and arrays to
XQuery also allows provides these useful data structures to programs that process only XML.
2. JSONiq in a Nutshell
JSONiq adds constructors for creating JSON objects and arrays, and member accessors for navigating them. JSON
constructors look like JSON objects and arrays. For instance, the following query creates a JSON object for a social media site:
{
"name" : "Sarah",
"age" : 13,
"gender" : "female",
"friends" : [ "Jim", "Mary", "Jennifer"]