Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 1. If field names do not contain dots (.), then only use dots to represent nested fields.
  • 2. If field names contain dots, then:
    • wrap the field name with a backtick pair (`...`) by
      • adding an opening backtick at the beginning of the field name (beginning of path, or after a dot)
      • adding a closing backtick at the end of the field name (end of the path, or before the next dot)
    • if a field is wrapped and doesn't contain dots, is processed the same way: field name within the wrapping backticks is used
  • 3. If field name includes backticks, then:
    • if the backticks are in a wrapping position (opening or closing a field name), then need to be escaped with backslash
      • Backslashes (/) do not need to be escaped. If backslash happen to be part of the field name and before a backtick to be escaped, then add another backslash.
    • else, backticks do not require escape
  • 4. If wrapping backtick pairs are incomplete, Connect configuration must fail fast to avoid getting ambiguous paths deployed.

Examples

Scenario
Field name
Nested structPath
Nested path
  1. Normal (no dots or backticks on field names)
foo.bar.baz
foo:
foo:
  bar:
    baz: val
OK: foo.bar.baz
2. Field names including dots
foo
.`bar.baz`
:
  bar.baz: val
OK: foo.`bar.baz`
2.1 Using backticks within a field name without dots
foo
.`bar`.bazfoo
:
  bar:
    baz: val
OK: foo.`bar`.baz
OK: foo.bar.baz
ERROR: foo.`bar.baz: no pair
ERROR: foo.bar`.baz: no pair
3. Field names including backticks
3. Field names including backticksfoo.ba`r.baz
foo.`ba`r`.baz
foo:
  ba`r:
    baz: val
OK: foo.ba`r.baz
OK: foo.`ba`r`.baz
3.1. Field names including backticks at wrapping position
foo
.`bar
:
  bar`.`baz: val
OK: foo.`bar\`.\`baz`
ERROR: foo.`bar\`.`baz`:
  bar`.`baz: val
 no pair
ERROR: foo.`bar`.`baz`: valid but different path (see 2.1)
3.2. Field names including dots and backticks between a backtick pair
foo:
  b`ar.baz: val
OK: foo.`b`ar.baz`
3.3. Field names including backslash and backticks at wrapping position
foo:
 
  
b`ar
bar\`.
baz
`baz: val
OK: foo.`bar\\`.\`baz`
3.
3
4. Field names wrapped by backticks
foo
.``bar``.bazfoo
:
  `bar`:
      baz: val
OK: foo.``bar``.baz
ERROR: foo.`bar`.baz: valid but different path (see 2.1)

Affected SMTs

These SMTs will include support for nested structure:

...