Skip to main content

YAML

1. What is the difference between single and double quote YAML strings?

  • YAML double-quoted strings are the only style that can express arbitrary strings, by using \ escape characters, such as \" to escape double quotes ", \\ to escape backslashes \, and a single backslash \ can be used as a continuation character for double-quoted strings.
  • YAML single-quoted strings differ from YAML double-quoted strings in that \ and " can be used freely without escaping, but two single-quotes '' are used to escape single-quote ' characters.

For the following example, the contents of the three string variables are the same.

string1: 'here '' s to "quotes"'
string2: "here's to \"quotes\""
string3: here's to "quotes"

Note: KCL's strategy for outputting YAML strings is to output unquoted strings or double-quoted strings preferentially when single quotes appear in the string content, and output single-quoted strings in other cases to avoid the burden of understanding.

For more details, please refer to YAML Spec v1.2

2. What is the meaning of symbols such as | - + > in YAML?

When using KCL multi-line strings (triple quote strings), the output YAML often carries some special tokens, such as |, -, + and >, etc. These tokens usually are the representation method of YAML multi-line string, such as the following KCL code:

data = """This is a KCL multi line string (the first line)
This is a KCL multi line string (the second line)
This is a KCL multi line string (the third line)


"""
var = 1

The output YAML is

data: |+
This is a KCL multi line string (the first line)
This is a KCL multi line string (the second line)
This is a KCL multi line string (the third line)


var: 1
  • | represents block style, which is used to represent a multi-line string, where all newlines in the string represent the real newlines.
  • > represents folding style, in which all newlines in the string will be replaced by spaces.
  • + and - are used to control the use of newlines at the end of strings. The default is to keep a single newline at the end of the string. If we want to remove all newlines, we can put a - after the style indicator | or >. If we want to keep the newline at the end, we need to put a + after | or >.

For more details, please refer to YAML Multiline String and YAML Spec v1.2

3. What is the meaning of numbers that appear after symbols | - + > such as |1 and |2 in YAML?

Numbers represent explicit indentation indicators in YAML. For long strings in YAML, YAML usually the first non-blank line determines the indentation level of the string, and when the first non-blank line is preceded by a non-leading character, such as a newline, we must use explicit indent indicators to specify the indent level of the content, such as |1 and |2 etc.

For example, for the following KCL code:

longStringStartWithEndline = """
This is the second line
This is the third line
"""

longStringStartWithEndline: |2

This is the second line
This is the third line
  • Writing long strings from the first line.
longString = """This is the second line
This is the third line
"""
  • Writing long strings with line continuation characters.
longString = """\
This is the second line
This is the third line
"""

The YAML output by the above two methods is:

longString: |
This is the second line
This is the third line

For more details, please refer to YAML Spec v1.2