Есть ли способ использовать заполнители в yaml, например:
foo: &FOO
<<propname>>:
type: number
default: <<default>>
bar:
- *FOO
propname: "some_prop"
default: "some default"
Есть ли способ использовать заполнители в yaml, например:
foo: &FOO
<<propname>>:
type: number
default: <<default>>
bar:
- *FOO
propname: "some_prop"
default: "some default"
yaml.load
Рассмотрим следующий пример 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!
Замены, помеченные ЗЕЛЕНЫМ, легко доступны в стандартном YAML с использованием якорей, псевдонимов и ключей слияния.
Заметки, отмеченные ЖЕЛТЫМ, технически доступны в стандартном YAML, но не без объявления пользовательских типов или какого-либо другого механизма связывания.
Замены, отмеченные КРАСНЫМ, недоступны в стандартном YAML. Тем не менее, есть обходные пути и альтернативы; например, через форматирование строк или механизмы шаблонов строк (например, python str.format
).
Часто запрашиваемая функция для YAML - это возможность вставлять произвольные переменные заполнители, которые поддерживают произвольные перекрестные ссылки и выражения, которые относятся к другому контенту в том же (или транскрипционном) файле (ах) YAML.
YAML поддерживает привязки и псевдонимы, но эта функция не поддерживает произвольное размещение заполнителей и выражений где-либо в тексте YAML. Они работают только с узлами YAML.
YAML также поддерживает декларации пользовательских типов, однако они встречаются реже и имеют последствия для безопасности, если вы принимаете контент YAML из потенциально ненадежных источников.
Существуют библиотеки расширений YAML, но они не являются частью собственной спецификации YAML.
sprintf
или str.format
на языке хостинга