1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
```
Path = AbsolutePath / RelativePath
AbsolutePath = Root S *AdditionalElements
Root = "$"
RelativePath = S NameOrWildcard S *AdditionalElements
NameOrWildcard = Name / Wildcard
S = *( WSP / CR / LF )
AdditionalElements = (("." / "..") NameOrWildcard) / Predicate
Predicate = "[" S Expr S "]"
Name = UnquotedName / SingleQuotedName / DoubleQuotedName
Expr = RelativePath / Slice / Union / Filter
Wildcard = "*"
Name = UnquotedName / SingleQuotedName / DoubleQuotedName
UnquotedName = UnquotedNameCharacter *AdditionalUnquotedNameCharacter
SingleQuotedName = "'" *SingleQuotedNameCharacter "'"
DoubleQuotedName = '"' *DoubleQuotedNameCharacter '"'
UnquotedNameCharacter = ? any unicode character except *, spaces, '.' and '[' ?
AdditionalUnquotedNameCharacter = ? any unicode character except spaces, '.' and '[' ?
SingleQuotedNameCharacter = ? any unicode character except an unescaped "'" (single quote) ?
DoubleQuotedNameCharacter = ? any unicode character except an unescaped '"' (double quote) ?
Slice = [ SignedInteger ] ":" [ SignedInteger ] [ ":" [ NonZeroSignedInteger ] ]
Filter = "?(" FilterExpr ")"
Union = RelativePathOrFilter / "," RelativePathOrFilter *("," RelativePathOrFilter)
RelativePathOrFilter = RelativePath / Filter
```
|