Draft: draft-ietf-jsonpath-base

Commentary: This is literally just a renaming of the names in the Type column of Table 13 . I also noticed that the description does n't account for non - nodelist inputs . I 'll open another issue for that . 
 If I 'm reading the right , it looks like the term is being used to mean different things depending on which column it 's in . In column 1 ( " Type " ) or column 3 ( " Subtypes " ) , it 's referring to the type system we 're creating . In column 2 ( " Abstract Instances " ) , it 's referring to the underlying JSON(ish ) value kind , i.e. , , , etc , plus . I think having the same word to define these things can be confusing for the reader , and maybe we need something else in one of these places to indicate the distinction . We 've already done this for the type to distinguish it from the value . 
 I 'm not sure there is a really good alternative . We could use for abstract instances , but in the rest of the spec , " value " implies a JSON value , so this does n't seem quite right . 
 If " value " implies a JSON value ( corresponding to the middle column ) , then we should change the others ( the type name ) . It really is confusing . 
 In the interim , we decided to append the type names with " Type " . I will create a PR for this . 
 I 'm going to wait for to complete before going forward with this as they change the same chunk of text . 
 Thanks . That 's why I am trying to tidy up and get it merged ASAP . 
 Thanks !
Paragraph (version A):
A test expression either tests the existence of a node designated by
an embedded query (see extest) or tests the result of a function
expression (see fnex).  In the latter case, if the function
expression is of type "OptionalBoolean" or one of its subtypes, it
tests whether the result is "true"; if the function expression is of
type "OptionalNodes" or one of its subtypes, it tests whether the
result is different from "Nothing".
Paragraph (version B):
A test expression either tests the existence of a node designated by
an embedded query (see extest) or tests the result of a function
expression (see fnex).  In the latter case, if the function
expression is of type "OptionalBooleanType" or one of its subtypes,
it tests whether the result is "true"; if the function expression is
of type "OptionalNodesType" or one of its subtypes, it tests whether
the result is different from "Nothing".
Paragraph (version A):
"OptionalNodeOrValue" is an abstraction of a "comparable" (which
may appear on either side of a comparison or as a function
argument).
Paragraph (version A):
"OptionalNode" is an abstraction of a Singular Path.
Paragraph (version A):
"Value" is an abstraction of a primitive value.
Paragraph (version A):
"Boolean" is an abstraction of a primitive value that is either
"true" or "false".
Paragraph (version A):
"OptionalValue" is an abstraction of a primitive value that may
alternatively be absent ("Nothing").
Paragraph (version A):
"OptionalNodes" is an abstraction of a "filter-path" (which
appears in a test expression or as a function argument).
Paragraph (version B):
"OptionalNodeOrValueType" is an abstraction of a "comparable"
(which may appear on either side of a comparison or as a function
argument).
Paragraph (version B):
"OptionalNodeType" is an abstraction of a Singular Path.
Paragraph (version B):
"ValueType" is an abstraction of a primitive value.
Paragraph (version B):
"BooleanType" is an abstraction of a primitive value that is
either "true" or "false".
Paragraph (version B):
"OptionalValueType" is an abstraction of a primitive value that
may alternatively be absent ("Nothing").
Paragraph (version B):
"OptionalNodesType" is an abstraction of a "filter-path" (which
appears in a test expression or as a function argument).
Paragraph (version A):
"OptionalNode" is a subtype of "OptionalValue" via coercion since
the "OptionalNode" instance "Node(n)" can be coerced to the
"OptionalValue" instance "Value(v)", where "v" is the value of the
node "n".
Paragraph (version A):
"OptionalNode" is a subtype of "OptionalNodes" via coercion since
the "OptionalNode" instance "Node(n)" can be coerced to the
"OptionalNodes" instance "Nodes(l)", where "l" is a nodelist
consisting of just the node "n".
Paragraph (version B):
"OptionalNodeType" is a subtype of "OptionalValueType" via
coercion since the "OptionalNodeType" instance "Node(n)" can be
coerced to the "OptionalValueType" instance "Value(v)", where "v"
is the value of the node "n".
Paragraph (version B):
"OptionalNodeType" is a subtype of "OptionalNodesType" via
coercion since the "OptionalNodeType" instance "Node(n)" can be
coerced to the "OptionalNodesType" instance "Nodes(l)", where "l"
is a nodelist consisting of just the node "n".
Paragraph (version A):
If it occurs as a "filter-path" in a test expression, the function
is defined to have result type "OptionalNodes" or one of its
subtypes, or to have result type "OptionalBoolean" or one of its
subtypes.
Paragraph (version A):
If it occurs as a "comparable" in a comparison, the function is
defined to have result type "OptionalNodeOrValue" or one of its
subtypes.
Paragraph (version B):
If it occurs as a "filter-path" in a test expression, the function
is defined to have result type "OptionalNodesType" or one of its
subtypes, or to have result type "OptionalBooleanType" or one of
its subtypes.
Paragraph (version B):
If it occurs as a "comparable" in a comparison, the function is
defined to have result type "OptionalNodeOrValueType" or one of
its subtypes.
Paragraph (version A):
The argument is a Singular Path and the defined type of the
argument is "OptionalNode" or any type of which "OptionalNode"
is a subtype.
Paragraph (version A):
The argument is a "filter-path" or a Singular Path and the
defined type of the argument is "OptionalNodes".
Paragraph (version B):
The argument is a Singular Path and the defined type of the
argument is "OptionalNodeType" or any type of which
"OptionalNodeType" is a subtype.
Paragraph (version B):
The argument is a "filter-path" or a Singular Path and the
defined type of the argument is "OptionalNodesType".