Подтвердить что ты не робот

Какая польза от символа трубы в YAML?

Я новичок в yaml, и у меня есть вопрос о символе канала (|), который используется для нескольких строк. Есть ли в YAML какой-либо синтаксис, подобный приведенному ниже?

тест: | 6+

Из двух файлов YAML, представленных ниже, первый работает, а второй - нет. Я не знаю, что вызывает это.

Первый файл

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

Второй файл

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

Второй файл - это файл клиента.

Я использую XMLBeans и получаю эту ошибку:

com.esotericsoftware.yamlbeans.parser.Parser $ ParserException: строка 17, столбец 12: ожидается "конец блока", но найдено: начало отображения блока ".

4b9b3361

Ответ 1

Символ канала в конце строки в YAML означает, что любой последующий текст с отступом следует интерпретировать как многострочное скалярное значение. Смотрите спецификацию YAML.

В частности, канал указывает, что (кроме отступа) скалярное значение следует интерпретировать буквально таким образом, чтобы сохранить переводы строки. И наоборот, символ > указывает на то, что следует многострочный скалярный скаляр, означающий, что переводы строк преобразуются в пробелы. Например:

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

Часть 6+ - это индикатор отступа (явная спецификация того, сколько пробелов должно использоваться) с "индикатором сжатия" + который контролирует, как следует обрабатывать лишние пробелы в конце скалярного литерала.

Ошибка, которую вы получаете, хитрая: это потому, что отступ должен быть относительно текущего элемента уровня блока. Так что в этом случае это должно быть 4+ вместо 6+ потому что последний элемент уровня блока - это элемент массива (заданный -), и литерал имеет отступ 4 от него. Несколько удивительно final: | отображение не считается блочным элементом, даже если его значение многострочно. Это имеет смысл, если вы подумаете об этом, - это всего лишь однострочное отображение "ключ: значение". Значение просто использует специальный синтаксис для многострочных скалярных значений. Смущает, но как-то соответствует...