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 ( 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] :
- ser comprensible para una persona;
- admitir estructuras de datos similares a los lenguajes de programación ;
- ser portátil entre lenguajes de programación;
- usar un modelo de datos sólido para admitir herramientas convencionales;
- soporte de procesamiento de flujo ;
- ser expresivo y extensible;
- 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] :
- Los elementos 2 y 3 se intercambian
- el elemento 5 se reemplazó con "YAML admite el procesamiento de un solo paso"
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
- ↑ información-mime-compartida - GitLab .
- ↑ 1 2 Rieles - GitHub .
- ↑ información-mime-compartida - GitLab .
- ↑ información-mime-compartida - GitLab .
- ↑ Evans K. YAML Borrador 0.1 - Yahoo! .
- ↑ 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.
- ↑ 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.
- ↑ 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. (indefinido)
- ↑ 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. (indefinido)
- Validador YAML . - Validador YAML.