Использовать заполнители в ямле

Есть ли способ использовать заполнители в ямле, как это:

foo: &FOO <>: type: number default: <> bar: - *FOO propname: "some_prop" default: "some default" 

контекст

  • Версия YAML 1.2
  • пользователь хочет включить переменные заполнители в YAML

проблема

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

пример

Рассмотрим следующий пример YAML. Это хорошо сформированный синтаксис YAML, однако он использует (нестандартные) фигурные скобки с встроенными выражениями.

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

 part01_customer_info: cust_fname: "Homer" cust_lname: "Himpson" cust_motto: "I love donuts!" cust_email: [email protected] part01_government_info: govt_sales_taxrate: 1.15 part01_purchase_info: prch_unit_label: "Bacon-Wrapped Fancy Glazed Donut" prch_unit_price: 3.00 prch_unit_quant: 7 prch_product_cost: "{{prch_unit_price * prch_unit_quant}}" prch_total_cost: "{{prch_product_cost * govt_sales_taxrate}}" part02_shipping_info: cust_fname: "{{cust_fname}}" cust_lname: "{{cust_lname}}" ship_city: Houston ship_state: Hexas part03_email_info: cust_email: "{{cust_email}}" mail_subject: Thanks for your DoughNutz order! mail_notes: | We want the mail_greeting to have all the expected values with filled-in placeholders (and not curly-braces). mail_greeting: | Greetings {{cust_fname}} {{cust_lname}}! We love your motto "{{cust_motto}}" and we agree with you! Your total purchase price is {{prch_total_cost}} Thank you for your order! 

объяснение

  • Замены, отмеченные в GREEN , легко доступны в стандартном YAML, используя анкеры, псевдонимы и ключи слияния .
  • Замены, отмеченные в YELLOW , технически доступны в стандартном YAML, но не без объявления пользовательского типа или какого-либо другого механизма привязки.
  • Замены, отмеченные в RED , недоступны в стандартном YAML и требуют использования какого-либо строкового шаблона (например, str.format python, например).

Изображение, объясняющее различные типы переменных замещений в YAML

Детали

Часто запрашиваемой функцией YAML является возможность вставлять произвольные переменные, которые поддерживают произвольные перекрестные ссылки и выражения, относящиеся к другому контенту в том же (или транслированном) YAML-файле.

YAML поддерживает привязки и псевдонимы, но эта функция не поддерживает произвольное размещение заполнителей и выражений в любом месте текста YAML. Они работают только с узлами YAML.

Библиотеки аддонов YAML

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

обходные

  • Используйте YAML в сочетании с системой шаблонов, например Jinja2 или Twig
  • Использовать библиотеку расширений YAML
  • Используйте функции стиля sprintf или str.format с языка хостинга

Смотрите также

  • Строчная интерполяция в YAML
  • как ссылаться на YAML «настройка» из другого места в том же файле YAML?
  • Использовать YAML с переменными
  • Как включить файл YAML внутри другого?
  • Передача переменных внутри rails интернационализации yml-файла
  • Может ли один объект YAML ссылаться на другой?
  • есть ли способ ссылаться на константу в ямле с рельсами?
  • https://learnxinyminutes.com/docs/yaml/
Давайте будем гением компьютера.