<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.4 (Ruby 3.1.1) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonpath-base-04" category="std" consensus="true" submissionType="IETF" xml:lang="en" obsoletes="" updates="" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title abbrev="JSONPath">JSONPath: Query expressions for JSON</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-04"/>
    <author initials="S." surname="Gössner" fullname="Stefan Gössner" role="editor">
      <organization>Fachhochschule Dortmund</organization>
      <address>
        <postal>
          <street>Sonnenstraße 96</street>
          <city>Dortmund</city>
          <code>D-44139</code>
          <country>Germany</country>
        </postal>
        <email>stefan.goessner@fh-dortmund.de</email>
      </address>
    </author>
    <author initials="G." surname="Normington" fullname="Glyn Normington" role="editor">
      <organization/>
      <address>
        <postal>
          <street/>
          <city>Winchester</city>
          <region/>
          <code/>
          <country>UK</country>
        </postal>
        <phone/>
        <email>glyn.normington@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor">
      <organization ascii="Universitaet Bremen TZI">Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2022"/>
    <area>ART</area>
    <workgroup>JSONPath WG</workgroup>
    <keyword>JSON</keyword>
    <abstract>
      <t>JSONPath defines a string syntax for selecting and extracting values
within a JavaScript Object Notation (JSON, RFC 8259) value.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-jsonpath-base/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        JSON Path Working Group mailing list (<eref target="mailto:jsonpath@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/jsonpath/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-jsonpath/draft-ietf-jsonpath-base"/>.</t>
    </note>
  </front>
  <middle>
    <!-- define an ALD to simplify below -->
<!-- use as {: unnumbered} -->

<!-- editorial issue: lots of complicated nesting of quotes, as in -->
<!-- `"13 == '13'"` or `$`.  We probably should find a simpler style -->

<section anchor="introduction">
      <name>Introduction</name>
      <t>JavaScript Object Notation (JSON, <xref target="RFC8259"/>) is a popular representation
format for structured data values.
JSONPath defines a string syntax for identifying values
within a JSON value.</t>
      <t>JSONPath is not intended as a replacement for, but as a more powerful
companion to, JSON Pointer <xref target="RFC6901"/>. See <xref target="json-pointer"/>.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>The grammatical rules in this document are to be interpreted as ABNF,
as described in <xref target="RFC5234"/>.
ABNF terminal values in this document define Unicode code points rather than
their UTF-8 encoding.
For example, the Unicode PLACE OF INTEREST SIGN (U+2318) would be defined
in ABNF as <tt>%x2318</tt>.</t>
        <t>The terminology of <xref target="RFC8259"/> applies except where clarified below.
The terms "Primitive" and "Structured" are used to group
the types as in <xref section="1" sectionFormat="of" target="RFC8259"/>.
Definitions for "Object", "Array", "Number", and "String" remain
unchanged.
Importantly "object" and "array" in particular do not take on a
generic meaning, such as they would in a general programming context.</t>
        <t>Additional terms used in this specification are defined below.</t>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>As per <xref target="RFC8259"/>, a structure complying to the generic data model of JSON, i.e.,
composed of components such as structured values, namely JSON objects and arrays, and
primitive data, namely numbers and text strings as well as the special
values null, true, and false.</t>
          </dd>
          <dt>Member:</dt>
          <dd>
            <t>A name/value pair in an object.  (Not itself a value.)</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>The name in a name/value pair constituting a member.  (Also known as
"key", "tag", or "label".)
This is also used in <xref target="RFC8259"/>, but that specification does not
formally define it.
It is included here for completeness.</t>
          </dd>
          <dt>Element:</dt>
          <dd>
            <t>A value in an array. (Not to be confused with XML element.)</t>
          </dd>
          <dt>Index:</dt>
          <dd>
            <t>A non-negative integer that identifies a specific element in an array.
Note that the term <em>indexing</em> is also used for accessing elements
using negative integers (<xref target="index-semantics"/>), and for accessing
member values in an object using their member name.</t>
          </dd>
          <dt>Query:</dt>
          <dd>
            <t>Short name for JSONPath expression.</t>
          </dd>
          <dt>Argument:</dt>
          <dd>
            <t>Short name for the value a JSONPath expression is applied to.</t>
          </dd>
          <dt>Node:</dt>
          <dd>
            <t>The pair of a value along with its location within the argument.</t>
          </dd>
          <dt>Root Node:</dt>
          <dd>
            <t>The unique node whose value is the entire argument.</t>
          </dd>
          <dt>Children (of a node):</dt>
          <dd>
            <t>If the node is an array, each of its elements,
or if the node is an object, each its member values (but not its
member names).</t>
          </dd>
          <dt>Descendants (of a node):</dt>
          <dd>
            <t>The node itself, plus the descendants of each of its children. <cref anchor="or-self">Note that this is often more selectively called descendant-or-self.
Should we define descendants non-inclusive of the node itself?
We do have the language to say "node + descendants" in several places.</cref></t>
          </dd>
        </dl>
        <dl>
          <dt>Nodelist:</dt>
          <dd>
            <t>A list of nodes.  <!-- ordered list?  Maybe TBD by issues #27 and #60 -->
The output of applying a query to an argument is manifested as a list of nodes.
While this list can be represented in JSON, e.g. as an array, the
nodelist is an abstract concept unrelated to JSON values.</t>
          </dd>
          <dt>Normalized Path:</dt>
          <dd>
            <t>A simple form of JSONPath expression that identifies a node by
providing a query that results in exactly that node.  Similar
to, but syntactically different from, a JSON Pointer <xref target="RFC6901"/>.</t>
          </dd>
        </dl>
        <t>For the purposes of this specification, a value as defined by
<xref target="RFC8259"/> is also viewed as a tree of nodes.
Each node, in turn, holds a value.
Further nodes within each value are the elements of arrays and the
member values of objects and are themselves values.
(The type of the value held by a node
may also be referred to as the type of the node.)</t>
        <t>A query is applied to an argument, and the output is a nodelist.</t>
      </section>
      <section anchor="history">
        <name>History</name>
        <t>This document picks up Stefan Goessner's popular JSONPath proposal
dated 2007-02-21 <xref target="JSONPath-orig"/> and provides a normative definition
for it.</t>
        <t><xref target="inspired-by-xpath"/> describes how JSONPath was inspired by XML's XPath
<xref target="XPath"/>.</t>
        <t>JSONPath was intended as a light-weight companion to JSON
implementations on platforms such as PHP and JavaScript, so instead of
defining its own expression language like XPath did, JSONPath
delegated this to the expression language of the platform.
While the languages in which JSONPath is used do have significant
commonalities, over time this caused non-portability of JSONPath
expressions between the ensuing platform-specific dialects.</t>
        <t>The present specification intends to remove platform dependencies and
serve as a common JSONPath specification that can be used across
platforms.  Obviously, this means that backwards compatibility could
not always be achieved; a design principle of this specification is to
go with a "consensus" between implementations even if it is rough, as
long as that does not jeopardize the objective of obtaining a usable,
stable JSON query language.</t>
      </section>
      <section anchor="overview">
        <name>Overview of JSONPath Expressions</name>
        <t>JSONPath expressions are applied to a JSON value, the <em>argument</em>.
Within the JSONPath expression, the abstract name <tt>$</tt> is used to refer
to the <em>root node</em> of the argument, i.e., to the argument as a whole.</t>
        <t>JSONPath expressions can use the <em>dot notation</em></t>
        <artwork><![CDATA[
$.store.book[0].title
]]></artwork>
        <t>or the more general <em>bracket notation</em></t>
        <artwork><![CDATA[
$['store']['book'][0]['title']
]]></artwork>
        <t>to build paths that are input to a JSONPath implementation.</t>
        <t>JSONPath allows the wildcard symbol <tt>*</tt> to select any member of an
object or any element of an array (<xref target="wildcard"/>).
The descendant operator <tt>..</tt> selects the node and all its descendants (<xref target="descendant-selector"/>).
The array slice
syntax <tt>[start:end:step]</tt> allows selecting a regular selection of an
element from an array, giving a start position, an end position, and
possibly a step value that moves the position from the start to the
end (<xref target="slice"/>).</t>
        <t>Filter expressions are supported via the syntax <tt>?(&lt;boolean expr&gt;)</tt> as in</t>
        <artwork><![CDATA[
$.store.book[?(@.price < 10)].title
]]></artwork>
        <t><xref target="tbl-overview"/> provides a quick overview of the JSONPath syntax elements.</t>
        <table anchor="tbl-overview">
          <name>Overview over JSONPath</name>
          <thead>
            <tr>
              <th align="left">JSONPath</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>$</tt></td>
              <td align="left">the root node</td>
            </tr>
            <tr>
              <td align="left">
                <tt>@</tt></td>
              <td align="left">the current node</td>
            </tr>
            <tr>
              <td align="left">
                <tt>.</tt> or <tt>[]</tt></td>
              <td align="left">child operator</td>
            </tr>
            <tr>
              <td align="left">n/a</td>
              <td align="left">parent operator</td>
            </tr>
            <tr>
              <td align="left">
                <tt>..</tt></td>
              <td align="left">nested descendants</td>
            </tr>
            <tr>
              <td align="left">
                <tt>*</tt></td>
              <td align="left">wildcard: all member values/array elements regardless of their names/indices</td>
            </tr>
            <tr>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">subscript operator: index current node as an array (from 0)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>[,]</tt></td>
              <td align="left">list operator: allows combining member names, array indices, and slices</td>
            </tr>
            <tr>
              <td align="left">
                <tt>[start:end:step]</tt></td>
              <td align="left">array slice operator</td>
            </tr>
            <tr>
              <td align="left">
                <tt>?()</tt></td>
              <td align="left">applies a filter expression</td>
            </tr>
            <tr>
              <td align="left">
                <tt>()</tt></td>
              <td align="left">expression, e.g., for indexing</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="jsonpath-examples">
      <name>JSONPath Examples</name>
      <t>This section provides some more examples for JSONPath expressions.
The examples are based on the simple JSON value shown in
<xref target="fig-example-value"/>, which was patterned after a
typical XML example representing a bookstore (that also has bicycles).</t>
      <figure anchor="fig-example-value">
        <name>Example JSON value</name>
        <sourcecode type="json"><![CDATA[
{ "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
]]></sourcecode>
      </figure>
      <t>The examples in <xref target="tbl-example"/> use the expression mechanism to obtain
the number of elements in an array, to test for the presence of a
member in a object, and to perform numeric comparisons of member values with a
constant.</t>
      <table anchor="tbl-example">
        <name>Example JSONPath expressions applied to the example JSON value</name>
        <thead>
          <tr>
            <th align="left">JSONPath</th>
            <th align="left">Result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>$.store.book[*].author</tt></td>
            <td align="left">the authors of all books in the store</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..author</tt></td>
            <td align="left">all authors</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$.store.*</tt></td>
            <td align="left">all things in store, which are some books and a red bicycle</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$.store..price</tt></td>
            <td align="left">the prices of everything in the store</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..book[2]</tt></td>
            <td align="left">the third book</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..book[-1]</tt></td>
            <td align="left">the last book in order</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..book[0,1]</tt><br/><tt>$..book[:2]</tt></td>
            <td align="left">the first two books</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..book[?(@.isbn)]</tt></td>
            <td align="left">filter all books with isbn number</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..book[?(@.price&lt;10)]</tt></td>
            <td align="left">filter all books cheaper than 10</td>
          </tr>
          <tr>
            <td align="left">
              <tt>$..*</tt></td>
            <td align="left">all elements in XML document; all member values and array elements contained in input value</td>
          </tr>
        </tbody>
      </table>
      <!-- XXX: fine tune: is $..* really member values + array elements -->

<!-- back to normington draft; not yet merged up where needed (e.g., terminology). -->

</section>
    <section anchor="jsonpath-syntax-and-semantics">
      <name>JSONPath Syntax and Semantics</name>
      <section anchor="synsem-overview">
        <name>Overview</name>
        <t>A JSONPath query is a string which selects zero or more nodes of a piece of JSON.</t>
        <t>A query <bcp14>MUST</bcp14> be encoded using UTF-8.
The grammar for queries given in this document assumes that its UTF-8 form is first decoded into
Unicode code points as described
in <xref target="RFC3629"/>; implementation approaches that lead to an equivalent
result are possible.</t>
        <t>A string to be used as a JSONPath query needs to be <em>well-formed</em> and
<em>valid</em>.
A string is a well-formed JSONPath query if it conforms to the ABNF syntax in this document.
A well-formed JSONPath query is valid if it also fulfills all semantic
requirements posed by this document.</t>
        <t>To be valid, integer numbers in the JSONPath query that are relevant
to the JSONPath processing (e.g., index values and steps) <bcp14>MUST</bcp14> be
within the range of exact values defined in I-JSON <xref target="RFC7493"/>, namely
within the interval [-(2<sup>53</sup>)+1, (2<sup>53</sup>)-1]).</t>
        <t>To be valid, strings on the right hand side of the <tt>=~</tt> regex matching
operator need to conform to <xref target="I-D.draft-bormann-jsonpath-iregexp"/>.</t>
        <t>The well-formedness and the validity of JSONPath queries are independent of
the JSON value the query is applied to; no further errors can be
raised during application of the query to a value.</t>
        <t>Obviously, an implementation can still fail when executing a JSONPath
query, e.g., because of resource depletion, but this is not modeled in
the present specification.  However, the implementation <bcp14>MUST NOT</bcp14>
silently malfunction.  Specifically, if a valid JSONPath query is
evaluated against a structured value whose size doesn't fit in the
range of exact values, interfering with the correct interpretation of
the query, the implementation <bcp14>MUST</bcp14> provide an indication of overflow.</t>
        <t>(Readers familiar with the HTTP error model may be reminded of 400
type errors when pondering well-formedness and validity, while
resource depletion and related errors are comparable to 500 type
errors.)</t>
      </section>
      <section anchor="processing-model">
        <name>Processing Model</name>
        <t>In this specification, the semantics of a JSONPath query are defined
in terms of a <em>processing model</em>.  That model is not prescriptive of
the internal workings of an implementation:  Implementations may wish
(or need) to design a different process that yields results that are
consistent with this model.</t>
        <t>In the processing model,
a valid query is executed against a value, the <em>argument</em>, and
produces a list of zero or more nodes of the value.</t>
        <t>The query is a sequence of zero or more <em>selectors</em>, each of
which is applied to the result of the previous selector and provides
input to the next selector.
These results and inputs take the form of a <em>nodelist</em>, i.e., a
sequence of zero or more nodes.</t>
        <t>The nodelist going into the first selector contains a single node,
the argument.
The nodelist resulting from the last selector is presented as the
result of the query; depending on the specific API, it might be
presented as an array of the JSON values at the nodes, an array of
Normalized Paths referencing the nodes, or both -- or some other
representation as desired by the implementation.
Note that the API must be capable of presenting an empty nodelist as
the result of the query.</t>
        <t>A selector performs its function on each of the nodes in its input
nodelist, during such a function execution, such a node is referred to
as the "current node".  Each of these function executions produces a
nodelist, which are then concatenated into
the result of the selector.</t>
        <t>The processing within a selector may execute nested queries,
which are in turn handled with the processing model defined here.
Typically, the argument to that query will be the current node of the
selector or a set of nodes subordinate to that current node.</t>
      </section>
      <section anchor="syntax">
        <name>Syntax</name>
        <t>Syntactically, a JSONPath query consists of a root selector (<tt>$</tt>), which
stands for a nodelist that contains the root node of the argument,
followed by a possibly empty sequence of <em>selectors</em>.</t>
        <sourcecode type="abnf"><![CDATA[
json-path = root-selector *(S (dot-selector        /
                               dot-wild-selector   /
                               index-selector      /
                               index-wild-selector /
                               list-selector       /
                               slice-selector      /
                               descendant-selector /
                               filter-selector))
]]></sourcecode>
        <t>The syntax and semantics of each selector is defined below.</t>
      </section>
      <section anchor="semantics">
        <name>Semantics</name>
        <t>The root selector <tt>$</tt> not only selects the root node of the argument,
but it also produces as output a list consisting of one
node: the argument itself.</t>
        <t>A selector may select zero or more nodes for further processing.
A syntactically valid selector <bcp14>MUST NOT</bcp14> produce errors.
This means that some
operations that might be considered erroneous, such as indexing beyond the
end of an array,
simply result in fewer nodes being selected.</t>
        <t>But a selector doesn't just act on a single node: a selector acts on
each of the nodes in its input nodelist and concatenates the resultant nodelists
to form the result nodelist of the selector.</t>
        <t>For each node in the list, the selector selects zero or more nodes,
each of which is a descendant of the node or the node itself.</t>
        <!-- To do: Define "descendants" (making sure that member values are, but member names aren't). -->

<t>For instance, with the argument <tt>{"a":[{"b":0},{"b":1},{"c":2}]}</tt>, the
query <tt>$.a[*].b</tt> selects the following list of nodes: <tt>0</tt>, <tt>1</tt>
(denoted here by their value).
Let's walk through this in detail.</t>
        <t>The query consists of <tt>$</tt> followed by three selectors: <tt>.a</tt>, <tt>[*]</tt>, and <tt>.b</tt>.</t>
        <t>Firstly, <tt>$</tt> selects the root node which is the argument.
So the result is a list consisting of just the root node.</t>
        <t>Next, <tt>.a</tt> selects from any input node of type object and selects the
node of any
member value of the input
node corresponding to the member name <tt>"a"</tt>.
The result is again a list of one node: <tt>[{"b":0},{"b":1},{"c":2}]</tt>.</t>
        <t>Next, <tt>[*]</tt> selects from an input node of type array all its elements
(if the input note were of type object, it would select all its member
values, but not the member names).
The result is a list of three nodes: <tt>{"b":0}</tt>, <tt>{"b":1}</tt>, and <tt>{"c":2}</tt>.</t>
        <t>Finally, <tt>.b</tt> selects from any input node of type object with a member name
<tt>b</tt> and selects the node of the member value of the input node corresponding to that name.
The result is a list containing <tt>0</tt>, <tt>1</tt>.
This is the concatenation of three lists, two of length one containing
<tt>0</tt>, <tt>1</tt>, respectively, and one of length zero.</t>
        <t>As a consequence of this approach, if any of the selectors selects no nodes,
then the whole query selects no nodes.</t>
        <t>In what follows, the semantics of each selector are defined for each type
of node.</t>
      </section>
      <section anchor="selectors">
        <name>Selectors</name>
        <t>A JSONPath query consists of a sequence of selectors. Valid selectors are</t>
        <ul spacing="normal">
          <li>Root selector <tt>$</tt> (used at the start of a query and in expressions)</li>
          <li>Dot selector <tt>.&lt;name&gt;</tt>, used with object member names exclusively.</li>
          <li>Dot wild card selector <tt>.*</tt>.</li>
          <li>Index selector <tt>[&lt;index&gt;]</tt>, where <tt>&lt;index&gt;</tt> is either a (possibly
negative, see <xref target="index-semantics"/>) array index or an object member name.</li>
          <li>Index wild card selector <tt>[*]</tt>.</li>
          <li>Array slice selector <tt>[&lt;start&gt;:&lt;end&gt;:&lt;step&gt;]</tt>, where the optional
values <tt>&lt;start&gt;</tt>, <tt>&lt;end&gt;</tt>, and <tt>&lt;step&gt;</tt> are integer literals.</li>
          <li>Nested descendants selector <tt>..</tt>.</li>
          <li>List selector <tt>[&lt;sel1&gt;,&lt;sel2&gt;,...,&lt;selN&gt;]</tt>, holding a comma
separated list of index and slice selectors.</li>
          <li>Filter selector <tt>[?(&lt;expr&gt;)]</tt></li>
          <li>Current item selector <tt>@</tt> (used in expressions)</li>
        </ul>
        <section anchor="root-selector">
          <name>Root Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-1">
            <name>Syntax</name>
            <t>Every valid JSONPath query <bcp14>MUST</bcp14> begin with the root selector <tt>$</tt>.</t>
            <sourcecode type="abnf"><![CDATA[
root-selector  = "$"
]]></sourcecode>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-1">
            <name>Semantics</name>
            <t>The Argument -- the root JSON value -- becomes the root node, which is
addressed by the root selector <tt>$</tt>.</t>
          </section>
        </section>
        <section anchor="dot-selector">
          <name>Dot Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-2">
            <name>Syntax</name>
            <t>A dot selector starts with a dot <tt>.</tt> followed by an object's member name.</t>
            <sourcecode type="abnf"><![CDATA[
dot-selector    = "." dot-member-name
dot-member-name = name-first *name-char
name-first      =
                      ALPHA /
                      "_"   /           ; _
                      %x80-10FFFF       ; any non-ASCII Unicode character
name-char = DIGIT / name-first

DIGIT           =  %x30-39              ; 0-9
ALPHA           =  %x41-5A / %x61-7A    ; A-Z / a-z
]]></sourcecode>
            <t>Member names containing characters other than allowed by
<tt>dot-selector</tt> -- such as space ` <tt>, minus </tt>-<tt>, or dot </tt>.<tt>
characters -- MUST NOT be used with the </tt>dot-selector<tt>.
(Such member names can be addressed by the
</tt>index-selector` instead.)</t>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-2">
            <name>Semantics</name>
            <t>The <tt>dot-selector</tt> selects the node of the member value corresponding
to the member name from any JSON object in its input nodelist. It selects no nodes from any other JSON value.</t>
          </section>
        </section>
        <section anchor="wildcard">
          <name>Dot Wild Card Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-3">
            <name>Syntax</name>
            <t>The dot wild card selector has the form <tt>.*</tt> as defined in the
following syntax:</t>
            <sourcecode type="abnf"><![CDATA[
dot-wild-selector    = "." "*"            ;  dot followed by asterisk
]]></sourcecode>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-3">
            <name>Semantics</name>
            <t>A <tt>dot-wild-selector</tt> acts as a wild card by selecting the nodes of
all member values of an object in its input nodelist as well as all
element nodes of an array in its input nodelist.
Applying the <tt>dot-wild-selector</tt> to a primitive JSON value (number,
string, or true/false/null) selects no node.</t>
          </section>
        </section>
        <section anchor="index-selector">
          <name>Index Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-index">
            <name>Syntax</name>
            <t>An index selector <tt>[&lt;index&gt;]</tt> addresses at most one object member value or at most one array element value.</t>
            <sourcecode type="abnf"><![CDATA[
index-selector      = "[" S (quoted-member-name / element-index) S "]"
]]></sourcecode>
            <t>Applying the <tt>index-selector</tt> to an object value in its input nodelist, a
<tt>quoted-member-name</tt> string is required to select the corresponding
member value.
In contrast to JSON,
the JSONPath syntax allows strings to be enclosed in <em>single</em> or <em>double</em> quotes.</t>
            <sourcecode type="abnf"><![CDATA[
quoted-member-name  = string-literal

string-literal      = %x22 *double-quoted %x22 /       ; "string"
                      %x27 *single-quoted %x27         ; 'string'

double-quoted       = unescaped /
                      %x27      /                       ; '
                      ESC %x22  /                       ; \"
                      ESC escapable

single-quoted       = unescaped /
                      %x22      /                       ; "
                      ESC %x27  /                       ; \'
                      ESC escapable

ESC                 = %x5C                              ; \  backslash

unescaped           = %x20-21 /                         ; s. RFC 8259
                      %x23-26 /                         ; omit "
                      %x28-5B /                         ; omit '
                      %x5D-10FFFF                       ; omit \

escapable           = ( %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
                          ; b /         ;  BS backspace U+0008
                          ; t /         ;  HT horizontal tab U+0009
                          ; n /         ;  LF line feed U+000A
                          ; f /         ;  FF form feed U+000C
                          ; r /         ;  CR carriage return U+000D
                          "/" /          ;  /  slash (solidus) U+002F
                          "\" /          ;  \  backslash (reverse solidus) U+005C
                          (%x75 hexchar) ;  uXXXX      U+XXXX
                      )

hexchar = non-surrogate / (high-surrogate "\" %x75 low-surrogate)
non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) /
                 ("D" %x30-37 2HEXDIG )
high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG

HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"

; Task from 2021-06-15 interim: update ABNF later
]]></sourcecode>
            <t>Applying the <tt>index-selector</tt> to an array, a numerical <tt>element-index</tt>
is required to select the corresponding
element. JSONPath allows it to be negative (see <xref target="index-semantics"/>).</t>
            <sourcecode type="abnf"><![CDATA[
element-index   = int                             ; decimal integer

int             = ["-"] ( "0" / (DIGIT1 *DIGIT) ) ; -  optional
DIGIT1          = %x31-39                         ; 1-9 non-zero digit
]]></sourcecode>
            <t>Notes:
1. <tt>double-quoted</tt> strings follow the JSON string syntax (<xref section="7" sectionFormat="of" target="RFC8259"/>);
   <tt>single-quoted</tt> strings follow an analogous pattern (<xref target="syntax-index"/>).
2. An <tt>element-index</tt> is an integer (in base 10, as in JSON numbers).
3. As in JSON numbers, the syntax does not allow octal-like integers with leading zeros such as <tt>01</tt> or <tt>-01</tt>.</t>
          </section>
          <section numbered="false" toc="exclude" anchor="index-semantics">
            <name>Semantics</name>
            <t>A <tt>quoted-member-name</tt> string <bcp14>MUST</bcp14> be converted to a
member name by removing the surrounding quotes and
replacing each escape sequence with its equivalent Unicode character, as
in the table below:</t>
            <table>
              <name>Escape Sequence Replacements</name>
              <thead>
                <tr>
                  <th align="center">Escape Sequence</th>
                  <th align="center">Unicode Character</th>
                  <th align="left">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="center">\b</td>
                  <td align="center">U+0008</td>
                  <td align="left">BS backspace</td>
                </tr>
                <tr>
                  <td align="center">\t</td>
                  <td align="center">U+0009</td>
                  <td align="left">HT horizontal tab</td>
                </tr>
                <tr>
                  <td align="center">\n</td>
                  <td align="center">U+000A</td>
                  <td align="left">LF line feed</td>
                </tr>
                <tr>
                  <td align="center">\f</td>
                  <td align="center">U+000C</td>
                  <td align="left">FF form feed</td>
                </tr>
                <tr>
                  <td align="center">\r</td>
                  <td align="center">U+000D</td>
                  <td align="left">CR carriage return</td>
                </tr>
                <tr>
                  <td align="center">\"</td>
                  <td align="center">U+0022</td>
                  <td align="left">quotation mark</td>
                </tr>
                <tr>
                  <td align="center">\'</td>
                  <td align="center">U+0027</td>
                  <td align="left">apostrophe</td>
                </tr>
                <tr>
                  <td align="center">\/</td>
                  <td align="center">U+002F</td>
                  <td align="left">slash (solidus)</td>
                </tr>
                <tr>
                  <td align="center">\\</td>
                  <td align="center">U+005C</td>
                  <td align="left">backslash (reverse solidus)</td>
                </tr>
                <tr>
                  <td align="center">\uXXXX</td>
                  <td align="center">U+XXXX</td>
                  <td align="left">unicode character</td>
                </tr>
              </tbody>
            </table>
            <t>The <tt>index-selector</tt> applied with a <tt>quoted-member-name</tt> to an object
selects the node of the corresponding member value from it, if and only if that object has a member with that name.
Nothing is selected from a value that is not a object.</t>
            <t>Array indexing via <tt>element-index</tt> is a way of selecting a particular array element using a zero-based index.
For example, selector <tt>[0]</tt> selects the first and selector <tt>[4]</tt> the fifth element of a sufficiently long array.</t>
            <t>A negative <tt>element-index</tt> counts from the array end.
For example, selector <tt>[-1]</tt> selects the last and selector <tt>[-2]</tt> selects the penultimate element of an array with at least two elements.
As with non-negative indexes, it is not an error if such an element does
not exist; this simply means that no element is selected.</t>
          </section>
        </section>
        <section anchor="index-wild-card-selector">
          <name>Index Wild Card Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-4">
            <name>Syntax</name>
            <t>The index wild card selector has the form <tt>[*]</tt>.</t>
            <sourcecode type="abnf"><![CDATA[
index-wild-selector    = "[" "*" "]"  ;  asterisk enclosed by brackets
]]></sourcecode>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-4">
            <name>Semantics</name>
            <t>An <tt>index-wild-selector</tt>
selects the nodes of all member values of an object as well as of all elements of an
array.
Applying the <tt>index-wild-selector</tt> to a primitive JSON value (such as
a number, string, or true/false/null) selects no node.</t>
            <t>The <tt>index-wild-selector</tt> behaves identically to the <tt>dot-wild-selector</tt>.</t>
          </section>
        </section>
        <section anchor="slice">
          <name>Array Slice Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-5">
            <name>Syntax</name>
            <t>The array slice selector has the form <tt>[&lt;start&gt;:&lt;end&gt;:&lt;step&gt;]</tt>.
It selects elements starting at index <tt>&lt;start&gt;</tt>, ending at -- but
not including -- <tt>&lt;end&gt;</tt>, while incrementing by <tt>step</tt>.</t>
            <sourcecode type="abnf"><![CDATA[
slice-selector = "[" S slice-index S "]"

slice-index    =  [start S] ":" S [end S] [":" [S step ]]

start          = int       ; included in selection
end            = int       ; not included in selection
step           = int       ; default: 1

B              =    %x20 / ; Space
                    %x09 / ; Horizontal tab
                    %x0A / ; Line feed or New line
                    %x0D   ; Carriage return
S              = *B        ; optional blank space
RS             = 1*B       ; required blank space

]]></sourcecode>
            <t>The <tt>slice-selector</tt> consists of three optional decimal integers separated by colons.</t>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-5">
            <name>Semantics</name>
            <t>The <tt>slice-selector</tt> was inspired by the slice operator of ECMAScript
4 (ES4), which was deprecated in 2014, and that of Python.</t>
            <section numbered="false" toc="exclude" anchor="informal-introduction">
              <name>Informal Introduction</name>
              <t>This section is non-normative.</t>
              <t>Array indexing is a way of selecting a particular element of an array using
a 0-based index.
For example, the expression <tt>[0]</tt> selects the first element of a non-empty array.</t>
              <t>Negative indices index from the end of an array.
For example, the expression <tt>[-2]</tt> selects the last but one element of an array with at least two elements.</t>
              <t>Array slicing is inspired by the behaviour of the <tt>Array.prototype.slice</tt> method
of the JavaScript language as defined by the ECMA-262 standard <xref target="ECMA-262"/>,
with the addition of the <tt>step</tt> parameter, which is inspired by the Python slice expression.</t>
              <t>The array slice expression <tt>[start:end:step]</tt> selects elements at indices starting at <tt>start</tt>,
incrementing by <tt>step</tt>, and ending with <tt>end</tt> (which is itself excluded).
So, for example, the expression <tt>[1:3]</tt> (where <tt>step</tt> defaults to <tt>1</tt>)
selects elements with indices <tt>1</tt> and <tt>2</tt> (in that order) whereas
<tt>[1:5:2]</tt> selects elements with indices <tt>1</tt> and <tt>3</tt>.</t>
              <t>When <tt>step</tt> is negative, elements are selected in reverse order. Thus,
for example, <tt>[5:1:-2]</tt> selects elements with indices <tt>5</tt> and <tt>3</tt>, in
that order and <tt>[::-1]</tt> selects all the elements of an array in
reverse order.</t>
              <t>When <tt>step</tt> is <tt>0</tt>, no elements are selected.
(This is the one case that differs from the behaviour of Python, which
raises an error in this case.)</t>
              <t>The following section specifies the behaviour fully, without depending on
JavaScript or Python behaviour.</t>
            </section>
            <section numbered="false" toc="exclude" anchor="detailed-semantics">
              <name>Detailed Semantics</name>
              <t>An array selector is either an array slice or an array index, which is defined
in terms of an array slice.</t>
              <t>A slice expression selects a subset of the elements of the input array, in
the same order
as the array or the reverse order, depending on the sign of the <tt>step</tt> parameter.
It selects no nodes from a node that is not an array.</t>
              <t>A slice is defined by the two slice parameters, <tt>start</tt> and <tt>end</tt>, and
an iteration delta, <tt>step</tt>.
Each of these parameters is
optional. <tt>len</tt> is the length of the input array.</t>
              <t>The default value for <tt>step</tt> is <tt>1</tt>.
The default values for <tt>start</tt> and <tt>end</tt> depend on the sign of <tt>step</tt>,
as follows:</t>
              <table>
                <name>Default array slice start and end values</name>
                <thead>
                  <tr>
                    <th align="left">Condition</th>
                    <th align="left">start</th>
                    <th align="left">end</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">step &gt;= 0</td>
                    <td align="left">0</td>
                    <td align="left">len</td>
                  </tr>
                  <tr>
                    <td align="left">step &lt; 0</td>
                    <td align="left">len - 1</td>
                    <td align="left">-len - 1</td>
                  </tr>
                </tbody>
              </table>
              <t>Slice expression parameters <tt>start</tt> and <tt>end</tt> are not directly usable
as slice bounds and must first be normalized.
Normalization for this purpose is defined as:</t>
              <artwork><![CDATA[
FUNCTION Normalize(i, len):
  IF i >= 0 THEN
    RETURN i
  ELSE
    RETURN len + i
  END IF
]]></artwork>
              <t>The result of the array indexing expression <tt>[i]</tt> applied to an array
of length <tt>len</tt> is defined to be the result of the array
slicing expression <tt>[i:Normalize(i, len)+1:1]</tt>.</t>
              <t>Slice expression parameters <tt>start</tt> and <tt>end</tt> are used to derive slice bounds <tt>lower</tt> and <tt>upper</tt>.
The direction of the iteration, defined
by the sign of <tt>step</tt>, determines which of the parameters is the lower bound and which
is the upper bound:</t>
              <artwork><![CDATA[
FUNCTION Bounds(start, end, step, len):
  n_start = Normalize(start, len)
  n_end = Normalize(end, len)

  IF step >= 0 THEN
    lower = MIN(MAX(n_start, 0), len)
    upper = MIN(MAX(n_end, 0), len)
  ELSE
    upper = MIN(MAX(n_start, -1), len-1)
    lower = MIN(MAX(n_end, -1), len-1)
  END IF

  RETURN (lower, upper)
]]></artwork>
              <t>The slice expression selects elements with indices between the lower and
upper bounds.
In the following pseudocode, the <tt>a(i)</tt> construct expresses the
0-based indexing operation on the underlying array.</t>
              <artwork><![CDATA[
IF step > 0 THEN

  i = lower
  WHILE i < upper:
    SELECT a(i)
    i = i + step
  END WHILE

ELSE if step < 0 THEN

  i = upper
  WHILE lower < i:
    SELECT a(i)
    i = i + step
  END WHILE

END IF
]]></artwork>
              <t>When <tt>step = 0</tt>, no elements are selected and the result array is empty.</t>
              <t>To be valid, the slice expression parameters <bcp14>MUST</bcp14> be in the I-JSON
range of exact values, see <xref target="synsem-overview"/>.</t>
            </section>
          </section>
        </section>
        <section anchor="descendant-selector">
          <name>Descendant Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-6">
            <name>Syntax</name>
            <t>The descendant selector starts with a double dot <tt>..</tt> and can be
followed by an object member name (similar to the <tt>dot-selector</tt>),
by an <tt>index-selector</tt> acting on objects or arrays, or by a wild card.</t>
            <sourcecode type="abnf"><![CDATA[
descendant-selector = ".." ( dot-member-name      /  ; ..<name>
                             index-selector       /  ; ..[<index>]
                             index-wild-selector  /  ; ..[*]
                             "*"                     ; ..*
                           )
]]></sourcecode>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-6">
            <name>Semantics</name>
            <t>The <tt>descendant-selector</tt> selects the node and all its descendants.</t>
            <t>In the resultant nodelist:
* nodes occur before their children, and
* nodes of an array occur in array order.</t>
            <t>Children of an object may occur in any order, since JSON objects are unordered.</t>
          </section>
        </section>
        <section anchor="list-selector">
          <name>List Selector</name>
          <t>The list selector allows combining member names, array indices, and
slices in a single selector.</t>
          <t>Note: The list selector was called "union selector" in
<xref target="JSONPath-orig"/>, as it was intended to solve use cases addressed by
the union selector in XPath.
However, the term "union" has the connotation of a set operation that involves
merging input sets while avoiding duplicates, so the concept was
renamed into "list selector".</t>
          <section numbered="false" toc="exclude" anchor="syntax-7">
            <name>Syntax</name>
            <t>The list selector is syntactically related to the
<tt>index-selector</tt> and the <tt>slice-selector</tt>.
It contains two or more entries, separated by commas.</t>
            <sourcecode type="abnf"><![CDATA[
list-selector  = "[" S list-entry 1*(S "," S list-entry) S "]"

list-entry     =  ( quoted-member-name /
                    element-index      /
                    slice-index
                  )
]]></sourcecode>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-7">
            <name>Semantics</name>
            <t>A list selector selects the nodes that are selected by at least one of
the selector entries in the list and yields the concatenation of the
lists (in the order of the selector entries) of nodes selected by the
selector entries.
Note that any node selected in more than one of the selector entries is kept
as many times in the node list.</t>
            <t>To be valid, integer values in the <tt>element-index</tt> and <tt>slice-index</tt>
components <bcp14>MUST</bcp14> be in the I-JSON range of exact values, see
<xref target="synsem-overview"/>.</t>
          </section>
        </section>
        <section anchor="filter-selector">
          <name>Filter Selector</name>
          <section numbered="false" toc="exclude" anchor="syntax-8">
            <name>Syntax</name>
            <t>The filter selector has the form <tt>[?&lt;expr&gt;]</tt>. It works via iterating over structured values, i.e. arrays and objects.</t>
            <sourcecode type="abnf"><![CDATA[
filter-selector    = "[" S "?" S boolean-expr S "]"
]]></sourcecode>
            <t>During iteration process each array element or object member is visited and its value -- accessible via symbol <tt>@</tt> -- or one of its descendants -- uniquely defined by a relative path -- is tested against a boolean expression <tt>boolean-expr</tt>.</t>
            <t>The current item is selected if and only if the result is <tt>true</tt>.</t>
            <sourcecode type="abnf"><![CDATA[
boolean-expr     = logical-or-expr
logical-or-expr  = logical-and-expr *(S "||" S logical-and-expr)
                                                      ; disjunction
                                                      ; binds less tightly than conjunction
logical-and-expr = basic-expr *(S "&&" S basic-expr)  ; conjunction
                                                      ; binds more tightly than disjunction

basic-expr   = exist-expr /
               paren-expr /
               relation-expr
exist-expr   = [neg-op S] path                          ; path existence or non-existence
path         = rel-path / json-path
rel-path     = "@" *(S (dot-selector / index-selector))
paren-expr   = [neg-op S] "(" S boolean-expr S ")"    ; parenthesized expression
neg-op       = "!"                                    ; not operator

relation-expr = comp-expr /                           ; comparison test
                regex-expr                            ; regular expression test

comp-expr    = comparable S comp-op S comparable
comparable   = number / string-literal /              ; primitive ...
               true / false / null /                  ; values only
               path                                   ; path value
comp-op      = "==" / "!=" /                          ; comparison ...
               "<"  / ">"  /                          ; operators
               "<=" / ">="
number       = int [ frac ] [ exp ]                   ; decimal number
frac         = "." 1*DIGIT                            ; decimal fraction
exp          = "e" [ "-" / "+" ] 1*DIGIT              ; decimal exponent
true         = %x74.72.75.65                          ; true
false        = %x66.61.6c.73.65                       ; false
null         = %x6e.75.6c.6c                          ; null

regex-expr   = (path / string-literal) S regex-op S regex
regex-op     = "=~"                                   ; regular expression match
regex        = string-literal                         ; I-Regexp
]]></sourcecode>
            <t>Notes:</t>
            <ul spacing="normal">
              <li>Parentheses can be used with <tt>boolean-expr</tt> for grouping. So filter selection syntax in the original proposal <tt>[?(&lt;expr&gt;)]</tt> is naturally contained in the current lean syntax <tt>[?&lt;expr&gt;]</tt> as a special case.</li>
              <li>Comparisons are restricted to primitive values (such as number, string, <tt>true</tt>, <tt>false</tt>, <tt>null</tt>). Comparisons with complex values will fail, i.e. no selection occurs.
<!-- issue: comparison with structured value -->
              </li>
              <li>Data types are not implicitly converted in comparisons.
So <tt>"13 == '13'"</tt> selects no node.</li>
              <li>A member or element value by itself in a Boolean context is
interpreted as <tt>false</tt> only if it does not exist.
Otherwise it is interpreted as <tt>true</tt>.
To be more specific about the actual value, explicit comparisons are necessary. This existence test -- as an exception to the general rule -- also works with structured values.</li>
              <li>The regular expressions in the string-literals on the right-hand
side of <tt>=~</tt> are as defined in <xref target="I-D.draft-bormann-jsonpath-iregexp"/>.
Regular expression tests can be applied to JSON string values
(<xref section="7" sectionFormat="of" target="RFC8259"/>) only
(on the left-hand side of <tt>=~</tt>); they yield false otherwise.</li>
              <li>Alphabetic characters in ABNF are case-insensitive, so "e" can be either "e" or "E".</li>
              <li>false, null, true are lower-case only (case-sensitive).</li>
            </ul>
            <t>The following table lists filter expression operators in order of precedence from highest (binds most tightly) to lowest (binds least tightly).</t>
            <!-- FIXME: Should the syntax column be split between unary and binary operators? -->

<table>
              <name>Filter expression operator precedence</name>
              <thead>
                <tr>
                  <th align="center">Precedence</th>
                  <th align="center">Operator type</th>
                  <th align="center">Syntax</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="center">5</td>
                  <td align="center">Grouping</td>
                  <td align="center">
                    <tt>(...)</tt></td>
                </tr>
                <tr>
                  <td align="center">4</td>
                  <td align="center">Logical NOT</td>
                  <td align="center">
                    <tt>!</tt></td>
                </tr>
                <tr>
                  <td align="center">3</td>
                  <td align="center">Relations</td>
                  <td align="center">
                    <tt>==</tt> <tt>!=</tt><br/><tt>&lt;</tt> <tt>&lt;=</tt> <tt>&gt;</tt> <tt>&gt;=</tt><br/><tt>=~</tt><br/><tt> in </tt></td>
                </tr>
                <tr>
                  <td align="center">2</td>
                  <td align="center">Logical AND</td>
                  <td align="center">
                    <tt>&amp;&amp;</tt></td>
                </tr>
                <tr>
                  <td align="center">1</td>
                  <td align="center">Logical OR</td>
                  <td align="center">
                    <tt>||</tt></td>
                </tr>
              </tbody>
            </table>
          </section>
          <section numbered="false" toc="exclude" anchor="semantics-8">
            <name>Semantics</name>
            <t>The <tt>filter-selector</tt> works with arrays and objects exclusively. Its result might be a list of <em>zero</em>, <em>one</em>, <em>multiple</em> or <em>all</em> of their element or member values then. Applied to other value types, it will select nothing.</t>
            <t>Some examples:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">JSON</th>
                  <th align="center">Query</th>
                  <th align="center">Result</th>
                  <th align="left">Comment</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>{"a":1,"b":2}</tt><br/><tt>[2,3,4]</tt></td>
                  <td align="center">
                    <tt>$[?@]</tt></td>
                  <td align="center">
                    <tt>[1,2]</tt><br/><tt>[2,3,4]</tt></td>
                  <td align="left">Same as <tt>$.*</tt> or <tt>$[*]</tt></td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>./.</tt></td>
                  <td align="center">
                    <tt>$[?@==2]</tt></td>
                  <td align="center">
                    <tt>[2]</tt><br/><tt>[2]</tt></td>
                  <td align="left">Select by value.</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>{"a":{"b":{"c":{}}}</tt></td>
                  <td align="center">
                    <tt>$[?@.b]</tt><br/><tt>$[?@.b.c]</tt></td>
                  <td align="center">
                    <tt>[{"b":{"c":{}}]</tt></td>
                  <td align="left">Existence</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>{"key":false}</tt></td>
                  <td align="center">
                    <tt>$[?index(@)=='key']</tt><br/><tt>$[?index(@)==0]</tt></td>
                  <td align="center">
                    <tt>[false]</tt><br/><tt>[]</tt></td>
                  <td align="left">Select object member</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>[3,4,5]</tt></td>
                  <td align="center">
                    <tt>$[?index(@)==2]</tt><br/><tt>$[?index(@)==17]</tt></td>
                  <td align="center">
                    <tt>[5]</tt><br/><tt>[]</tt></td>
                  <td align="left">Select array element</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>{"a":{"b":{5},c:0}}</tt></td>
                  <td align="center">
                    <tt>$[?@.b==5 &amp;&amp; !@.c]</tt></td>
                  <td align="center">
                    <tt>[{"b":{5},c:0}]</tt></td>
                  <td align="left">Existence</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
      </section>
      <section anchor="normalized-paths">
        <name>Normalized Paths</name>
        <t>A Normalized Path is a JSONPath with restricted syntax that identifies a node by providing a query that results in exactly that node. For example,
the JSONPath expression <tt>$.book[?(@.price&lt;10)]</tt> could select two values with Normalized Paths
<tt>$['book'][3]</tt> and <tt>$['book'][5]</tt>. For a given JSON document, there is a one to one correspondence between the document's
nodes and the Normalized Paths that identify these nodes.</t>
        <t>A JSONPath implementation may output Normalized Paths instead of, or in addition to, the values identified by these paths.</t>
        <t>Since bracket notation is more general than dot notation, it is used to construct Normalized Paths.
Single quotes are used to delimit string member names. This reduces the number of characters that
need escaping when Normalized Paths appear as strings (which are delimited with double quotes) in JSON documents.</t>
        <t>The syntax of Normalized Paths is restricted so that there is one and only one way of representing any
given Normalized Path. Putting this another way, for any two distinct Normalized Paths, a JSON document exists
that will yield distinct results when the Normalized Paths are applied to it.</t>
        <t>Certain characters are escaped, in one and only one way; all other characters are unescaped.</t>
        <sourcecode type="abnf"><![CDATA[
normalized-path           = root-selector *(normal-index-selector)
normal-index-selector     = "[" (normal-quoted-member-name / normal-element-index) "]"
normal-quoted-member-name = %x27 *normal-single-quoted %x27 ; 'string'
normal-single-quoted      = normal-unescaped /
                            ESC normal-escapable
normal-unescaped          = %x20-26 /                       ; omit control codes
                            %x28-5B /                       ; omit '
                            %x5D-10FFFF                     ; omit \
normal-escapable          = ( %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
                                ; b /         ;  BS backspace U+0008
                                ; t /         ;  HT horizontal tab U+0009
                                ; n /         ;  LF line feed U+000A
                                ; f /         ;  FF form feed U+000C
                                ; r /         ;  CR carriage return U+000D
                                "'" /         ;  ' apostrophe U+0027
                                "\" /         ;  \ backslash (reverse solidus) U+005C
                                (%x75 normal-hexchar) ;  certain values u00XX U+00XX
                            )
normal-hexchar            = "0" "0"
                            (
                              ("0" %x30-37) / ; "00"-"07"
                              ("0" %x62) /    ; "0b"      ; omit U+0008-U+000A
                              ("0" %x65-66) /  ; "0e"-"0f" ; omit U+000C-U+000D
                              ("1" normal-HEXDIG)
                            )
normal-HEXDIG             = DIGIT / %x61-66   ; "0"-"9", "a"-"f"
normal-element-index      = "0" / (DIGIT1 *DIGIT) ; non-negative decimal integer
]]></sourcecode>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <section anchor="registration-of-media-type-applicationjsonpath">
        <name>Registration of Media Type application/jsonpath</name>
        <t>IANA is requested to register the following media type <xref target="RFC6838"/>:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>jsonpath</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See the Security Considerations section of RFCXXXX.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>RFCXXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Applications that need to convey queries in JSON data</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>Person &amp; email address to contact for further information:
   iesg@ietf.org</t>
        <dl>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>JSONPath WG</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
          <dt>Provisional registration? (standards tree only):</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>This section gives security considerations, as required by <xref target="RFC3552"/>.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau">
              <organization/>
            </author>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC7493" target="https://www.rfc-editor.org/info/rfc7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="I-D.draft-bormann-jsonpath-iregexp" target="https://www.ietf.org/archive/id/draft-bormann-jsonpath-iregexp-03.txt">
          <front>
            <title>I-Regexp: An Interoperable Regexp Format</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Tim Bray">
              <organization>Textuality</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document specifies I-Regexp, a flavor of regular expressions
   that is limited in scope with the goal of interoperation across many
   different regular-expression libraries.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-jsonpath-iregexp-03"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <author fullname="B. Korver" initials="B." surname="Korver">
              <organization/>
            </author>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak.  This document provides guidelines to RFC authors on how to write a good Security Considerations section.   This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC6901" target="https://www.rfc-editor.org/info/rfc6901">
          <front>
            <title>JavaScript Object Notation (JSON) Pointer</title>
            <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan">
              <organization/>
            </author>
            <author fullname="K. Zyp" initials="K." surname="Zyp">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <date month="April" year="2013"/>
            <abstract>
              <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6901"/>
          <seriesInfo name="DOI" value="10.17487/RFC6901"/>
        </reference>
        <reference anchor="JSONPath-orig" target="https://goessner.net/articles/JsonPath/">
          <front>
            <title>JSONPath — XPath for JSON</title>
            <author initials="S." surname="Gössner" fullname="Stefan Gössner">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <date year="2007" month="February" day="21"/>
          </front>
        </reference>
        <reference anchor="XPath" target="https://www.w3.org/TR/2010/REC-xpath20-20101214">
          <front>
            <title>XML Path Language (XPath) 2.0 (Second Edition)</title>
            <author fullname="Anders Berglund" initials="A." surname="Berglund">
              <organization/>
            </author>
            <author fullname="Scott Boag" initials="S." surname="Boag">
              <organization/>
            </author>
            <author fullname="Don Chamberlin" initials="D." surname="Chamberlin">
              <organization/>
            </author>
            <author fullname="Mary Fernandez" initials="M." surname="Fernandez">
              <organization/>
            </author>
            <author fullname="Michael Kay" initials="M." surname="Kay">
              <organization/>
            </author>
            <author fullname="Jonathan Robie" initials="J." surname="Robie">
              <organization/>
            </author>
            <author fullname="Jerome Simeon" initials="J." surname="Simeon">
              <organization/>
            </author>
            <date day="14" month="December" year="2010"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-xpath20-20101214"/>
        </reference>
        <reference anchor="E4X">
          <front>
            <title>Information technology — ECMAScript for XML (E4X) specification</title>
            <author>
              <organization>ISO</organization>
            </author>
            <date year="2006"/>
          </front>
          <seriesInfo name="ISO/IEC 22537:2006" value=""/>
        </reference>
        <reference anchor="SLICE" target="https://github.com/tc39/proposal-slice-notation">
          <front>
            <title>Slice notation</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ECMA-262" target="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf">
          <front>
            <title>ECMAScript Language Specification, Standard ECMA-262, Third Edition</title>
            <author>
              <organization>Ecma International</organization>
            </author>
            <date year="1999" month="December"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="inspired-by-xpath">
      <name>Inspired by XPath</name>
      <t>This appendix is informative.</t>
      <t>At the time JSONPath was invented, XML was noted for the availability of
powerful tools to analyse, transform and selectively extract data from
XML documents.
<xref target="XPath"/> is one of these tools.</t>
      <t>In 2007, the need for something solving the same class of problems for
the emerging JSON community became apparent, specifically for:</t>
      <ul spacing="normal">
        <li>Finding data interactively and extracting them out of <xref target="RFC8259"/>
JSON values without special scripting.</li>
        <li>Specifying the relevant parts of the JSON data in a request by a
client, so the server can reduce the amount of data in its response,
minimizing bandwidth usage.</li>
      </ul>
      <t>(Note that XPath has evolved since 2007, and recent versions even
nominally support operating inside JSON values.
This appendix only discusses the more widely used version of XPath
that was available in 2007.)</t>
      <t>JSONPath picks up the overall feeling of XPath, but maps the concepts
to syntax (and partially semantics) that would be familiar to someone
using JSON in a dynamic language.</t>
      <t>E.g., in popular dynamic programming languages such as JavaScript,
Python and PHP, the semantics of the XPath expression</t>
      <artwork><![CDATA[
/store/book[1]/title
]]></artwork>
      <t>can be realized in the expression</t>
      <artwork><![CDATA[
x.store.book[0].title
]]></artwork>
      <t>or, in bracket notation,</t>
      <artwork><![CDATA[
x['store']['book'][0]['title']
]]></artwork>
      <t>with the variable x holding the argument.</t>
      <t>The JSONPath language was designed to:</t>
      <ul spacing="normal">
        <li>be naturally based on those language characteristics;</li>
        <li>cover only the most essential parts of XPath 1.0;</li>
        <li>be lightweight in code size and memory consumption;</li>
        <li>be runtime efficient.</li>
      </ul>
      <section anchor="xpath-overview">
        <name>JSONPath and XPath</name>
        <t>JSONPath expressions apply to JSON values in the same way
as XPath expressions are used in combination with an XML document.
JSONPath uses <tt>$</tt> to refer to the root node of the argument, similar
to XPath's <tt>/</tt> at the front.</t>
        <t>JSONPath expressions move further down the hierarchy using <em>dot notation</em>
(<tt>$.store.book[0].title</tt>)
or the <em>bracket notation</em>
(<tt>$['store']['book'][0]['title']</tt>), a lightweight/limited, and a more
heavyweight syntax replacing XPath's <tt>/</tt> within query expressions.</t>
        <t>Both JSONPath and XPath use <tt>*</tt> for a wildcard.
The descendant operator <tt>..</tt>, borrowed from <xref target="E4X"/>, is similar to XPath's <tt>//</tt>.
The array slicing construct <tt>[start:end:step]</tt> is unique to JSONPath,
inspired by <xref target="SLICE"/> from ECMASCRIPT 4.</t>
        <t>Filter expressions are supported via the syntax <tt>?(&lt;boolean expr&gt;)</tt> as in</t>
        <artwork><![CDATA[
$.store.book[?(@.price < 10)].title
]]></artwork>
        <t><xref target="tbl-xpath-overview"/> extends <xref target="tbl-overview"/> by providing a comparison
with similar XPath concepts.</t>
        <table anchor="tbl-xpath-overview">
          <name>XPath syntax compared to JSONPath</name>
          <thead>
            <tr>
              <th align="left">XPath</th>
              <th align="left">JSONPath</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">
                <tt>$</tt></td>
              <td align="left">the root XML element</td>
            </tr>
            <tr>
              <td align="left">
                <tt>.</tt></td>
              <td align="left">
                <tt>@</tt></td>
              <td align="left">the current XML element</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/</tt></td>
              <td align="left">
                <tt>.</tt> or <tt>[]</tt></td>
              <td align="left">child operator</td>
            </tr>
            <tr>
              <td align="left">
                <tt>..</tt></td>
              <td align="left">n/a</td>
              <td align="left">parent operator</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//</tt></td>
              <td align="left">
                <tt>..</tt></td>
              <td align="left">nested descendants (JSONPath borrows this syntax from E4X)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>*</tt></td>
              <td align="left">
                <tt>*</tt></td>
              <td align="left">wildcard: All XML elements regardless of their names</td>
            </tr>
            <tr>
              <td align="left">
                <tt>@</tt></td>
              <td align="left">n/a</td>
              <td align="left">attribute access: JSON values do not have attributes</td>
            </tr>
            <tr>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">subscript operator used to iterate over XML element collections and for predicates</td>
            </tr>
            <tr>
              <td align="left">
                <tt>|</tt></td>
              <td align="left">
                <tt>[,]</tt></td>
              <td align="left">Union operator (results in a combination of node sets); called list operator in JSONPath, allows combining member names, array indices, and slices</td>
            </tr>
            <tr>
              <td align="left">n/a</td>
              <td align="left">
                <tt>[start:end:step]</tt></td>
              <td align="left">array slice operator borrowed from ES4</td>
            </tr>
            <tr>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">
                <tt>?()</tt></td>
              <td align="left">applies a filter (script) expression</td>
            </tr>
            <tr>
              <td align="left">seamless</td>
              <td align="left">n/a</td>
              <td align="left">expression engine</td>
            </tr>
            <tr>
              <td align="left">
                <tt>()</tt></td>
              <td align="left">n/a</td>
              <td align="left">grouping</td>
            </tr>
          </tbody>
        </table>
        <!-- note that the weirdness about the vertical bar above is intentional -->

<t>For further illustration, <xref target="tbl-xpath-equivalents"/> shows some XPath expressions
and their JSONPath equivalents.</t>
        <table anchor="tbl-xpath-equivalents">
          <name>Example XPath expressions and their JSONPath equivalents</name>
          <thead>
            <tr>
              <th align="left">XPath</th>
              <th align="left">JSONPath</th>
              <th align="left">Result</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>/store/book/author</tt></td>
              <td align="left">
                <tt>$.store.book[*].author</tt></td>
              <td align="left">the authors of all books in the store</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//author</tt></td>
              <td align="left">
                <tt>$..author</tt></td>
              <td align="left">all authors</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/store/*</tt></td>
              <td align="left">
                <tt>$.store.*</tt></td>
              <td align="left">all things in store, which are some books and a red bicycle</td>
            </tr>
            <tr>
              <td align="left">
                <tt>/store//price</tt></td>
              <td align="left">
                <tt>$.store..price</tt></td>
              <td align="left">the prices of everything in the store</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//book[3]</tt></td>
              <td align="left">
                <tt>$..book[2]</tt></td>
              <td align="left">the third book</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//book[last()]</tt></td>
              <td align="left">
                <tt>$..book[-1]</tt></td>
              <td align="left">the last book in order</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//book[position()&lt;3]</tt></td>
              <td align="left">
                <tt>$..book[0,1]</tt><br/><tt>$..book[:2]</tt></td>
              <td align="left">the first two books</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//book[isbn]</tt></td>
              <td align="left">
                <tt>$..book[?(@.isbn)]</tt></td>
              <td align="left">filter all books with isbn number</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//book[price&lt;10]</tt></td>
              <td align="left">
                <tt>$..book[?(@.price&lt;10)]</tt></td>
              <td align="left">filter all books cheaper than 10</td>
            </tr>
            <tr>
              <td align="left">
                <tt>//*</tt></td>
              <td align="left">
                <tt>$..*</tt></td>
              <td align="left">all elements in XML document; all member values and array elements contained in input value</td>
            </tr>
          </tbody>
        </table>
        <t>XPath has a lot more functionality (location paths in unabbreviated syntax,
operators and functions) than listed in this comparison.  Moreover, there are
significant differences in how the subscript operator works in XPath and
JSONPath:</t>
        <ul spacing="normal">
          <li>Square brackets in XPath expressions always operate on the <em>node
set</em> resulting from the previous path fragment. Indices always start
at 1.</li>
          <li>With JSONPath, square brackets operate on the <em>object</em> or <em>array</em>
addressed by the previous path fragment. Array indices always start
at 0.</li>
        </ul>
      </section>
    </section>
    <section anchor="json-pointer">
      <name>JSON Pointer</name>
      <t>This appendix is informative.</t>
      <t>JSONPath is not intended as a replacement for, but as a more powerful
companion to, JSON Pointer <xref target="RFC6901"/>. The purposes of the two standards
are different.</t>
      <t>JSON Pointer is for identifying a single value within a JSON document whose
structure is known.</t>
      <t>JSONPath can identify a single value within a JSON document, for example by
using a Normalized Path. But JSONPath is also a query syntax that can be used
to search for and extract multiple values from JSON documents whose structure
is known only in a general way.</t>
      <t>A Normalized JSONPath can be converted into a JSON Pointer by converting the syntax,
without knowledge of any JSON document. The inverse is not generally true: a numeric
path component in a JSON Pointer may identify a member of a JSON object or may index an array.
For conversion to a JSONPath query, knowledge of the structure of the JSON document is
needed to distinguish these cases.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This specification is based on <contact fullname="Stefan Gössner"/>'s
original online article defining JSONPath <xref target="JSONPath-orig"/>.</t>
      <t>The books example was taken from
http://coli.lili.uni-bielefeld.de/~andreas/Seminare/sommer02/books.xml
-- a dead link now.</t>
      <!--  LocalWords:  JSONPath XPath nodelist
 -->

</section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="M." surname="Mikulicic" fullname="Marko Mikulicic">
        <organization>InfluxData, Inc.</organization>
        <address>
          <postal>
            <street/>
            <city>Pisa</city>
            <region/>
            <code/>
            <country>IT</country>
          </postal>
          <phone/>
          <email>mmikulicic@gmail.com</email>
        </address>
      </contact>
      <contact initials="E." surname="Surov" fullname="Edward Surov">
        <organization>TheSoul Publishing Ltd.</organization>
        <address>
          <postal>
            <street/>
            <city>Limassol</city>
            <region/>
            <code/>
            <country>Cyprus</country>
          </postal>
          <phone/>
          <email>esurov.tsp@gmail.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
KiFTn54h2xbNhG6OA6qYkCoGJKhRBAUvbMrl2XbPUVich2EirEG+wCnRwHYM
6zcBhh73lwiiQo0rrC4vI80GyHMAlmkIcGWOK5yMiTqClJGH2VnI683DKYfu
NkpEUY4BGlgwztI898yaA7F8OzqL0kUe0xGAxwzIfDnXHAXjz2iCyhmTikim
Y4yHs4d8RxCfI2WB5oECRXB0Tp4AUIDcMOMoCgHMSP5rKSbxVKl3kjK3FqiG
MXk3zMxWERa6SJBPiogOgIB9coqqH4+4vkDg1mKD+nOYgpg7gTOJCQjROWEa
0lERMBIHMDfBKA7baOKHv3waMFnSaMZ05i1gC5Jv5yjbtxDi8l4qRa6tbWqj
DNJXm9BZhyirPtY14VsHdC+Z1prGuLw5oomdHn43NOhPqARE2JMdtp4ht4uU
c13vrJLIklys96JhOwjHgA+OHa2oPR7ELlRSUwcTap/Xat3z/gYf7zsfaXPo
j9L088fusU8GFX7lyclK3KFWJayPYDSfw5qGPq5RS2vHH9ewMfjbha/U3tqx
tIhC3AK4VIV0VtABpzxK8OgwE85kwsEte4DAJaTnfGadQ2NjtOrkF7NRGqvh
+pBYSOJlYTdeaK4bz9nEE6EJxSt4pYU+esfHMEpluk0Qx1ixVDKhKp3DLBSo
gPf9oXSTlxwuHdFxTITX5omhVYuX5mppZjrgrskG54lCfPgRsD0rBlBlAIR9
fjzUw7YMJ2g3pnNSnsGu5XHqkSEDZTGRJ9EZ16O24ZTNI2GO4IzAU9N6MPHg
Vx6haQHLh3PhKWjNkALysHUV7op0JNQ2o6qHrcLgaWg0XO9FFCMXV910+WKO
JB0VOlHA7chE/Nh8CvgUhwGfY89aQ1bV1SHwj83nPtC1caieql635aLz5WUx
ijuGAlzbTMJfFsCMqNQiIM6uFlg01wbDuCpf8udK7RHTMKfZKD9X3lWn8ll6
oJ9Dq0ghKp8rgsVQh+rrr/1QL89X9DJeZMR5f3NH1IvPtqqPx6a3K5ZSy330
bR/sJdkIlh6j+jS0t+s390L7vdpLwvKevdO/sZf1aifQi6ZHAyItjniwwZTD
SBNAD6BgDBtLUDgSfcNGlExgW+Tci7Ugppd8MWL0NZM2UKSfcnHCEkpVk/Z8
t7ViLB/b1W6uRCo2HQhJA/5lxIe9rSNpSzcCOksaREn0MJZI5JVNSr999amX
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

-->

</rfc>
