Use marcadores de posición en yaml

¿Hay alguna forma de usar marcadores de posición en yaml como este?

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

Contexto

  • YAML versión 1.2
  • el usuario desea incluir marcadores de posición variables en YAML

Problema

  • YAML no admite nativamente marcadores de posición variables
  • Los anclajes y alias permiten cierto nivel de abstracción e indirección, pero estos no funcionan como marcadores de posición variables que se pueden insertar en regiones arbitrarias a lo largo del texto YAML. Deben colocarse como nodos YAML separados
  • Hay algunas bibliotecas complementarias que admiten marcadores de posición de variables arbitrarios, pero no son parte de la especificación YAML nativa

Ejemplo

Considere el siguiente ejemplo YAML. Es una syntax de YAML bien formada, sin embargo, utiliza marcadores de posición con llave rizada (no estándar) con expresiones incrustadas.

Las expresiones incrustadas no producen el resultado deseado en YAML, porque no son parte de la especificación YAML nativa, pero ayudan a ilustrar qué está disponible con YAML estándar y qué no.

 part01_customer_info: cust_fname: "Homer" cust_lname: "Himpson" cust_motto: "I love donuts!" cust_email: homer@himpson.org 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! 

Explicación

  • Las sustituciones marcadas en VERDE están disponibles en YAML estándar, utilizando anclajes, alias y claves de combinación .
  • Las sustituciones marcadas en AMARILLO están técnicamente disponibles en YAML estándar, pero no sin una statement de tipo personalizado o algún otro mecanismo de enlace.
  • Las sustituciones marcadas en ROJO no están disponibles en YAML estándar, y requieren el uso de algún tipo de plantilla de cadena (como str.format de str.format , por ejemplo).

Imagen que explica los diferentes tipos de sustitución de variables en YAML

Detalles

Una característica que se solicita con frecuencia para YAML es la capacidad de insertar marcadores de posición de variables arbitrarios que admitan referencias cruzadas arbitrarias y expresiones que se relacionan con el otro contenido en el mismo (o transcrito) archivo YAML.

YAML admite anclas y alias, pero esta función no admite la colocación arbitraria de marcadores de posición y expresiones en ningún lugar del texto YAML. Solo funcionan con nodos YAML.

Bibliotecas de complemento YAML

Hay bibliotecas de extensión YAML, pero estas no son parte de la especificación YAML nativa.

Soluciones provisionales

  • Use YAML junto con un sistema de plantilla, como Jinja2 o Twig
  • Use una biblioteca de extensiones YAML
  • Use la funcionalidad de estilo sprintf o str.format del lenguaje de hospedaje

Ver también

  • Interpolación de cadenas en YAML
  • cómo hacer referencia a una “configuración” de YAML desde otro lugar en el mismo archivo YAML?
  • Use YAML con variables
  • ¿Cómo puedo incluir un archivo YAML dentro de otro?
  • Pasar variables dentro del archivo yml de internacionalización de Rails
  • ¿Puede un objeto YAML referirse a otro?
  • ¿Hay alguna manera de hacer referencia a una constante en un yaml con Rails?
  • https://learnxinyminutes.com/docs/yaml/