Указание строкового значения 'yes' в свойстве YAML - PullRequest
0 голосов
/ 06 декабря 2018

Рассмотрим следующий документ:

foo:
  bar: Yes

Согласно спецификации , это следует интерпретировать как Boolean, а не String.

Однако кажется , что этот документ дает такую ​​же интерпретацию:

foo:
  bar: 'Yes'

Если я неправильно понимаю, и 'Yes' (в кавычках) на самом деле следует понимать как Stringзначение, где в спецификации я могу найти обоснование для этого?

Однако, если я правильно интерпретирую, и эти документы эквивалентны в соответствии со спецификацией, как я могу указать строку со значением "Yes"в качестве значения свойства YAML?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

В самой последней спецификации YAML (вы ссылаетесь на что-то замененное 9 лет назад) говорится:

Правила разрешения тегов для конкретного приложения должны быть ограничены разрешением неспецифического тега «?», Чаще всегодля разрешения простых скаляров.Они могут быть сопоставлены с набором регулярных выражений, чтобы обеспечить автоматическое разрешение целых чисел, чисел с плавающей точкой, временных отметок и подобных типов.

Логическое значение является одним из этих "похожих типов".Поэтому True будет интерпретироваться как логическое значение, а "True" или 'True' (потому что это не простые скаляры) как строки.

В устаревшей спецификации YAML 1.1 Yes и On (иих противоположности (и все они в заглавных буквах, все строчные) также интерпретировались как логические значения, но это понятие было исключено из спецификации 1.2.

Таким образом, вы хотите представить строку «Да» (безкавычки) в качестве значения, и если вы уверены, что ваши данные будут прочитаны анализатором, обновленным после 2009 года, то вы можете использовать простой скаляр, одинарные кавычки, двойные кавычки или, например, литеральный скаляр блочного стиля (предполагая последовательность ссопоставления одного ключа / значения с ключом [1, 2]):

- [1, 2]: Yes
- [1, 2]: 'Yes'
- [1, 2]: "Yes"
- [1, 2]: |
    Yes

Все, кроме первого, также будут работать с анализатором, который поддерживает только стандарт YAML 1.1.Конечно, вы можете убедиться, что последующая обработка «знает» о том, что вы ожидаете, явно запустив документ с помощью директивы YAML и индикатора конца директивы

%YAML 1.2
---
0 голосов
/ 06 декабря 2018

Это зависит; -)

В YAML 1.1 тип bool определяется следующим образом:

Логическое значение представляет собой значение true / false.Логические значения отформатированы как английские слова («true» / «false», «yes» / «no» или «on» / «off») для удобства чтения и могут быть сокращены как один символ «y» / «n» или «Y ”/“ N ”.

В YAML 1.2 тип bool определен следующим образом:

Booleans: [true, True, false, FALSE]

Назначение значения Yes для ключа выполняется через кавычки:

foo: 'Yes'
bar: "Yes"

Назначение логического значения и обеспечение совместимости с будущими версиями синтаксических анализаторов YAML должно бытьсделано с

foo: false
bar: True

Вы можете поиграться с синтаксисом YAML на https://yamlvalidator.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...