Values of Structure DataTypes are sequences of name-value pairs. In many cases the value will be an array or another Structure. There are situations where it is necessary to refer to an element within a Structure. The Structure FieldPath defines a path to a single value within a Structure.
The description for a Structure FieldPath is found in Table 9.
Table 9 – Description for a Structure FieldPath
<path> |
= <path-element> *("." <path-element>) |
<path-element> |
= <name> / <index> |
<name> |
= 1*<char> / "'" 1*<char> "'" |
<index> |
= "[" 1*DIGIT *("," 1*DIGIT) "]" |
<char> |
= UNICODE-NO-CONTROL-OR-ESCAPED / <escaped> |
<escaped> |
= ".." / "[[" |
The UNICODE-NO-CONTROL-OR-ESCAPED is a core rule that includes all UNICODE characters except for U+0027 (') and any character with a category of Cc (control codes).
Any apostrophe (U+0027 (')) in a <name> is escaped by adding an extra copy of the same character and the name shall be enclosed with apostrophes.
Any <name> may be enclosed with apostrophes. Any <name> that contains U+0027 ('), U+005B ([), U+005B (]), or U+002E (.) shall be enclosed with apostrophes.
The <name> comes from the Name of a field in the DataTypeDefinition for the Structure.
The <index> is an index in field containing an array value. If an array has multiple dimensions, then the <index> has multiple elements separated by U+002C (,).
The DataTypeDefinition for a simple Structure is found in Table 10.
Table 10 – DataTypeDefinition for a simple Structure
Field Name |
DataType |
Description |
Red |
Boolean |
Simple Boolean value. |
Yellow.One |
Int32 |
Int32 value with a special character in the name. |
Green's |
String [] |
Array of string values. |
The value for the simple Structure using JSON:
{
"Red": true,
"Yellow.One": 42,
"Green's": [ "macintosh", "fuji", "ambrosia" ]
}
Examples of FieldPaths and their values based on the simple Structure value are in Table 11.
Table 11 – Examples of FieldPaths for a Simple Structure
FieldPath |
Resolved Value |
'Yellow.One' |
42 |
'Green''s' |
["macintosh", "fuji", "ambrosia"] |
'Green''s'.[1] |
"fuji" |
Pink |
Cannot be resolved because name not found. |
'Green''s'.[6] |
Cannot be resolved because of index too large. |
'Green''s'.[TEXT] |
Cannot be resolved because of non-numeric index. |
The DataTypeDefinition for a complex Structure is found in Table 12.
Table 12 – DataTypeDefinition for a Complex Structure
Field Name |
DataType |
Description |
Apple |
SimpleStructure [] |
An array of the Structure defined in Table 10. |
[Banana] |
Structure |
Any Structure value. |
Grape |
BaseDataType |
Any value. |
The value for the complex Structure using JSON:
{
"Apple": [
{
"Red": true,
"Yellow.One": 42,
"Green's": [ "macintosh", "fuji", "ambrosia" ]
}
],
"[Banana]": {
"TypeId": "<type-id>",
"Body": {
"X": 987,
"Y": 432
},
"Grape": {
"Type": 6
"Body": [ 123, 345, 678 ]
},
}
Examples of FieldPaths and their values based on the complex Structure value are in Table 13.
Table 13 – Examples of FieldPaths in a Complex Structure
FieldPath |
Resolved Value |
Apple.[0] |
{ "Red": true, "Yellow.One": 42, "Green": [ "macintosh", "fuji", "ambrosia" ] } |
Apple.[0].'Yellow.One' |
42 |
Apple.[0].'Green''s' |
["macintosh", "fuji", "ambrosia"] |
Apple.[0].'Green''s'.[1] |
"fuji" |
'[Banana]' |
{ "TypeId": "<type-id>", "Body": { "X": 987, "Y": 432 } } |
'[Banana]'.Body |
{ "X": 987, "Y": 432 } |
'[Banana]'.Body.Y |
432 |
Grape |
{ "Type": 6 "Body": [ 123, 345, 678 ] } |
Grape.Body.[1] |
345 |