YAML

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 24 de diciembre de 2021; las comprobaciones requieren 4 ediciones .
YAML
Extensión .yamlo.yml
tipo MIME aplicación/x-yaml [1] [2] , texto/yaml [3] [2] y texto/x-yaml [4]
Desarrollador Clark Evans [f]
publicado 11 de mayo de 2001 [5]
Último lanzamiento 1.2.2 (1 de octubre de 2021 ) ( 2021-10-01 )
Tipo de formato El intercambio de datos
Expandido desde XML , Perl y JSON
formato abierto ?
Sitio web yaml.org

YAML ( acrónimo inglés  "Yet Another Markup Language"  - " Another Markup Language ", más tarde - acrónimo inglés recursivo "YAML Ain't Markup Language" - "YAML - not a markup language") -  formato de serialización de datos "amigable" , conceptualmente cercano a los  lenguajes de marcas , pero enfocado en la conveniencia de E/S de estructuras de datos típicas de muchos lenguajes de programación .  

La interpretación del nombre refleja la historia del desarrollo: en las primeras etapas, YAML significaba Yet Another Markup Language (" Otro lenguaje de marcado ") e incluso se posicionó como un competidor de XML , pero luego se le cambió el nombre para centrarse en  los datos , y no en el marcado del documento [6] .

Propósitos de la creación

De acuerdo con los objetivos establecidos por Clark Evans ,  YAML 1.0 tiene como objetivo [7] :

  1. ser comprensible para una persona;
  2. admitir estructuras de datos similares a los lenguajes de programación ;
  3. ser portátil entre lenguajes de programación;
  4. usar un modelo de datos sólido para admitir herramientas convencionales;
  5. soporte de procesamiento de flujo ;
  6. ser expresivo y extensible;
  7. ser fácil de implementar y usar;

Con la revisión actual de YAML (1.2), se han realizado algunos cambios en estos objetivos [8] :

Sintaxis

La sintaxis de YAML es minimalista, especialmente cuando se compara con la sintaxis de XML . La especificación indica que el estándar RFC 822 tuvo una gran influencia . A continuación se muestran ejemplos de varios componentes de marcado. Cabe señalar que tener la opción de formato de una sola línea convierte a JSON en un subconjunto válido de YAML.

Secuencias (listas)

--- # Lista de películas: secuencia en formato de bloque - Casablanca - Spellbound - Notorious --- # Lista de compras: secuencia de una sola línea [ leche , pan , huevos , jugo ]

Mapeos de nombre-valor (diccionarios)

--- # Nombre de formato de bloque : John Smith edad : 33 --- # Formato de línea única { nombre : John Smith , edad : 33 }

Bloquear literales

Los saltos de línea se conservan --- | Había un joven de Warwick que tenía motivos para sentirse eufórico porque podía, por elección, tener una erección trina jónica, corintia y dórica. Los saltos de línea desaparecen ---> El texto ajustado se doblará en un solo párrafo las líneas en blanco indican saltos de párrafo

Secuencias de comparaciones

- { nombre : John Smith , edad : 33 } - nombre : Mary Smith edad : 27

Emparejamiento a partir de secuencias

hombres : [ John Smith , Bill Jones ] mujeres : - Mary Smith - Susan Williams

Elementos principales de YAML:

  • Las transmisiones YAML usan caracteres Unicode imprimibles, tanto UTF-8 como UTF-16
  • se utilizan espacios sangrados (no se permiten tabulaciones) para indicar la estructura
  • los comentarios comienzan con un signo de almohadilla ( # ), pueden comenzar en cualquier lugar de una línea y continuar hasta el final de la línea
  • las listas se indican con un guión inicial ( - ) con un miembro de la lista por línea, o los miembros de la lista están encerrados entre corchetes ( [ ] ) y separados por una coma y un espacio ( , )
  • las matrices asociativas se representan con dos puntos seguidos de un espacio ( : ) como una clave:valor, un par clave-valor por línea o como pares encerrados entre llaves y separados por una coma y un espacio ( , )
    • una clave en una matriz asociativa puede tener como prefijo un signo de interrogación ( ? ), lo que le permite especificar una clave compleja, como una lista
  • las cadenas se escriben sin comillas, pero se pueden encerrar entre comillas simples o dobles
    • dentro de comillas dobles, se pueden usar caracteres de escape de estilo C que comiencen con una barra invertida ( \ )
  • YAML le permite especificar sustituciones usando anclas y alias (*). Ejemplo
alias : #config secuencia - &myAlias1 datakey : dataval 1 moredata : morevals 1 - &myAlias2 datakey : dataval 2 moredata : morevals 2 config : - *myAlias1 # *myAlias1 será reemplazado por [{"datakey": "dataval 1", " after analizando más datos": "morevals 1"}]
  • la especificación de tipo explícito se realiza mediante '!![indicación de tipo]'. Por ejemplo, !!str 100 analizará el valor de cadena "100" en lugar del entero 100.
  • Los valores de Fecha/Hora se especifican en el formato AAAA-MM-DD o AAAA-MM-DD HH:MM:SS. Si necesita especificar la fecha como una cadena, debe incluirla entre comillas ("2012-12-21")

Ejemplo

En algún proyecto, debe almacenar una configuración que describa el mapeo ( enlaces en inglés  ) de los comandos IRC a funciones usando expresiones regulares .

Aquí está la configuración original presentada en una tabla:

ircEvent método expresión regular
PRIVMSG nuevoUri "^http://.*"
PRIVMSG borrarUri "^eliminar.*"
PRIVMSG aleatorioUri "^aleatorio.*"

En YAML, esta configuración se puede representar de la siguiente manera:

enlaces : - ircEvent : método PRIVMSG : newUri regexp : '^http://.*' - ircEvent : método PRIVMSG : deleteUri regexp : '^delete.*' - ircEvent : método PRIVMSG : randomUri regexp : '^random.*'

o

enlaces : - { ircEvent : PRIVMSG , método : newUri , regexp : '^http://.*' } - { ircEvent : PRIVMSG , method : deleteUri , regexp : '^delete.*' } - { ircEvent : PRIVMSG , method : randomUri , expresión regular : '^random.*' }

A modo de comparación, en la representación XML, esta configuración se puede representar de la siguiente manera:

<bindings> <binding> <ircEvent> PRIVMSG </ircEvent> <method> newUri </method> <regexp> ^http://.* </regexp> </binding> <binding> <ircEvent> PRIVMSG </ircEvent > <método> deleteUri </método> <regexp> ^delete.* </regexp> </binding> <binding> <ircEvent> PRIVMSG </ircEvent> <método> randomUri </method> <regexp> ^random.* </regexp> </binding> </bindings>

o

<bindings> <binding ircEvent= "PRIVMSG" method= "newUri" regexp= "^http://.*" /> <binding ircEvent= "PRIVMSG" method= "deleteUri" regexp= "^delete.*" /> <binding ircEvent= "PRIVMSG" method= "randomUri" regexp= "^random.*" /> </bindings>

Los elementos XML anidados se pueden usar para mostrar estructuras arbitrarias, y YAML está más cerca de mostrar modelos de datos típicos de Ruby , Perl , Python , Java , lo que le permite describir combinaciones libres de secuencias, asignaciones y tipos escalares, es decir, más cerca de lo real. estructuras de datos de lenguajes de programación y no requiere diferentes convenciones DOM para mapear estructuras de datos hacia y desde documentos, como lo requiere XML .

Uso

YAML se utiliza principalmente como formato para archivos de configuración para Ruby on Rails , Docker Compose [9] , Dancer , Symfony , GAE framework , Google App Engine y Dart . Es el lenguaje principal para describir clases, recursos y manifiestos para paquetes de aplicaciones de OpenStack Murano Project . y Swagger.io . También se usa de forma predeterminada para la configuración del hogar inteligente en el sistema Home Assistant .

Véase también

Notas

  1. información-mime-compartida - GitLab .
  2. 1 2 Rieles - GitHub .
  3. información-mime-compartida - GitLab .
  4. información-mime-compartida - GitLab .
  5. Evans K. YAML Borrador 0.1 - Yahoo! .
  6. Si YAML no es un lenguaje de marcas, ¿qué es?  (Inglés) . Desbordamiento de pila (6 de agosto de 2011). Consultado el 15 de marzo de 2021. Archivado desde el original el 23 de abril de 2021.
  7. Oren Ben-Kiki, Clark Evans, Brian Ingerson. YAML no es lenguaje de marcas (YAML™) 1.0  ( 29 de enero de 2004). Consultado el 15 de marzo de 2021. Archivado desde el original el 6 de mayo de 2021.
  8. Oren Ben-Kiki, Clark Evans, Ingy punto Net. YAML no es lenguaje de marcas (YAML™) Versión 1.2 (1 de octubre de 2009). Consultado el 15 de marzo de 2021. Archivado desde el original el 24 de enero de 2019.
  9. Descripción general de Docker  Compose . Documentación de Docker (16 de marzo de 2022). Consultado el 16 de marzo de 2022. Archivado desde el original el 18 de febrero de 2020.

Enlaces

  • YAML.ORG  (inglés) . - sitio oficial. Consultado el 29 de noviembre de 2010. Archivado desde el original el 10 de febrero de 2012.
  • YAML . CustisWiki . Sistemas de información personalizados. Consultado el 29 de abril de 2006. Archivado desde el original el 10 de febrero de 2012.
  •  Validador YAML . - Validador YAML.