Метка: YAML

  • YAML: шпаргалка

    YAML: шпаргалка

    YAML — это более легковесная и человекочитаемая альтернатива JSON. Лучший способ структурированной подачи информации при описании сложных систем и промптов к ИИ.

    Короткие подсказки

    Синтаксис

    • Отступы: только пробелы, табы запрещены. Обычно 2 или 4 пробела.
    • Регистр имеет значение (ключ и Ключ — разные).
    • Разделитель ключ-значение: ключ: значение.

    Объявление переменных

    ключ: значение
    число: 123
    булево: true   # Возможные значения: true, false, yes, no, on, off
    пусто: null    # Или ~

    Строки

    Без кавычек: Если нет спецсимволов (:, #, -).

      сообщение: Привет, мир!

    Одинарные кавычки (‘ ‘): Экранируют спецсимволы буквально.

      путь: 'C:\Program Files\Example'
      пример: 'Это строка с #: она не комментарий'

    Двойные кавычки (” “): Поддерживают экранирование спецсимволов.

      пример: "Перенос строки\nи табуляция\tздесь работают"

    Объекты (Словари)

    объект:
      вложенный_ключ: значение
      другой_ключ: 42

    В одну строку:

      объект: { ключ1: значение1, ключ2: значение2 }

    Списки

    список:
      - элемент1
      - элемент2
      - элемент3

    В одну строку:

      список: [элемент1, элемент2, элемент3]

    Список объектов:

      пользователи:
        - имя: Иван
          возраст: 25
        - имя: Ольга
          возраст: 30

    Многострочный текст:

    С сохранением переносов (|):

      описание: |
        Это первая строка.
        Это вторая строка.

    Без сохранения переносов (>):

      описание: >
        Это первая строка.
        Это будет
        в одной строке.

    Якоря и ссылки (переиспользование фрагментов):

    настройки_по_умолчанию: &default
      режим: продакшн
      отладка: false
    
    сервер1:
      <<: *default
      хост: server1.example.com
    
    сервер2:
      <<: *default
      хост: server2.example.com

    Комментарии

    # Это комментарий
    ключ: значение  # Встроенный комментарий

    Анкор и алиасы (переиспользование значений)

    значение_по_умолчанию: &anchor1 "Пример значения"
    
    использование1: *anchor1
    использование2: *anchor1

    Значения по умолчанию

    Слияние объектов:

      общие_настройки: &defaults
        отладка: false
        логирование: true
    
      разработка:
        <<: *defaults
        отладка: true

    Специальные значения

    • ~ или null — пустое значение.
    • .nan — не число (NaN).
    • .inf или -.inf — бесконечность.

    Пример YAML документа

    ---  # начало документа
    
    # Комментарий в YAML выглядит как-то так.
    
    ######################
    # Скалярные величины #
    ######################
    
    # Наш корневой объект (который продолжается до конца документа) будет соответствовать
    # типу map, который в свою очередь соответствует словарю, хешу или объекту в других языках.
    key: value
    another_key: Другое значение ключа.
    a_number_value: 100
    scientific_notation: 1e+12
    # Число 1 будет интерпретировано как число, а не как логический тип. Если необходимо чтобы
    # значение было интерпретировано как логическое, необходимо использовать true
    boolean: true
    null_value: null
    key with spaces: value
    
    # Обратите внимание что строки используются без кавычек, но могут и с кавычками.
    however: 'Строка заключенная в кавычки.'
    'Ключ заключенный в кавычки.': "Полезно если нужно использовать ':' в вашем ключе."
    single quotes: 'Содержит ''одну'' экранированную строку'
    double quotes: "Содержит несколько: \", \0, \t, \u263A, \x0d\x0a == \r\n, экранированных строк."
    
    # Многострочные строковые значения могут быть записаны как 'строковый блок' (используя |),
    # или как 'сложенный блок' (используя '>').
    literal_block: |
        Значение всего текста в этом блоке будет присвоено ключу 'literal_block',
        с сохранением переноса строк.
    
        Объявление продолжается до удаления отступа и выравнивания с ведущим отступом.
    
            Любые строки с большим отступом сохраняют остатки своего отступа -  
            эта строка будет содержать дополнительно 4 пробела.
    folded_style: >
        Весь блок этого текста будет значением 'folded_style', но в данном случае
        все символы новой строки будут заменены пробелами.
    
        Пустые строки будут преобразованы в перенос строки.
    
            Строки с дополнительными отступами сохраняют их переносы строк -
            этот текст появится через 2 строки.
    
    ##################
    # Типы коллекций #
    ##################
    
    # Вложения используют отступы. Отступ в 2 пробела предпочтителен (но не обязателен).
    a_nested_map:
      key: value
      another_key: Another Value
      another_nested_map:
        hello: hello
    
    # В словарях (maps) используются не только строковые значения ключей.
    0.25: a float key
    
    # Ключи также могут быть сложными, например многострочными.
    # Мы используем ? с последующим пробелом, чтобы обозначить начало сложного ключа.
    ? |
      Этот ключ
      который содержит несколько строк
    : и это его значение
    
    # YAML также разрешает соответствия между последовательностями со сложными ключами
    # Некоторые парсеры могут выдать предупреждения или ошибку
    # Пример
    ? - Manchester United
      - Real Madrid
    : [2001-01-01, 2002-02-02]
    
    # Последовательности (эквивалент списка или массива) выглядят как-то так
    # (обратите внимание что знак '-' считается отступом):
    a_sequence:
      - Item 1
      - Item 2
      - 0.5  # последовательности могут содержать различные типы.
      - Item 4
      - key: value
        another_key: another_value
      -
        - Это последовательность
        - внутри другой последовательности
      - - - Объявления вложенных последовательностей
          - могут быть сжаты
    
    # Поскольку YAML это надмножество JSON, вы можете использовать JSON-подобный 
    # синтаксис для словарей и последовательностей:
    json_map: {"key": "value"}
    json_seq: [3, 2, 1, "takeoff"]
    в данном случае кавычки не обязательны: {key: [3, 2, 1, takeoff]}
    
    ##########################
    # Дополнительные функции #
    ##########################
    
    # В YAML есть удобная система так называемых 'якорей' (anchors), которые позволяют легко
    # дублировать содержимое внутри документа. Оба ключа в примере будут иметь одинаковые значения:
    anchored_content: &anchor_name Эта строка будет являться значением обоих ключей.
    other_anchor: *anchor_name
    
    # Якоря могут использоваться для дублирования/наследования свойств
    base: &base
      name: Каждый будет иметь одинаковое имя
    
    # Регулярное выражение << называется ключом объединения независимо от типа языка.
    # Он используется, чтобы показать что все ключи одного или более словарей должны быть
    # добавлены в текущий словарь.
    
    foo: &foo
      <<: *base
      age: 10
    
    bar: &bar
      <<: *base
      age: 20
    
    # foo и bar могли бы иметь имена: Каждый из них имеет аналогичное имя
    
    # В YAML есть теги (tags), которые используются для явного объявления типов.
    explicit_string: !!str 0.5
    # В некоторых парсерах реализованы теги для конкретного языка, пример для Python
    # пример сложного числового типа.
    python_complex_number: !!python/complex 1+2j
    
    # Мы можем использовать сложные ключи с включенными в них тегами из определенного языка
    ? !!python/tuple [5, 7]
    : Fifty Seven
    # Могло бы быть {(5, 7): 'Fifty Seven'} в Python
    
    #######################
    # Дополнительные типы #
    #######################
    
    # Строки и числа не единственные величины которые может понять YAML.
    # YAML также поддерживает даты и время в формате ISO.
    datetime: 2001-12-15T02:59:43.1Z
    datetime_with_spaces: 2001-12-14 21:59:43.10 -5
    date: 2002-12-14
    
    # Тег !!binary показывает что эта строка является base64-закодированным
    # представлением двоичного объекта.
    gif_file: !!binary |
      R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
      OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
      +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
      AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
    
    # YAML может использовать объекты типа ассоциативных массивов (set), как представлено ниже:
    set:
      ? item1
      ? item2
      ? item3
    or: {item1, item2, item3}
    
    # Сеты (set) являются простыми эквивалентами словарей со значениями 
    # типа null; запись выше эквивалентна следующей:
    set2:
      item1: null
      item2: null
      item3: null
    
    ...  # конец документа

    Валидация

    Для задач по обмену информацией с людьми или промптов к ИИ, достаточно понимать основные принципы. Но YAML может использоваться в сервисах, конфигах или подобных инструментах. Тогда, ваша спецификация должна строго соответствовать формату.

    YAML Validator (проверка синтаксиса)

    Но я рекомендую валидировать все спецификации, чтобы сразу создавать корректные документы.