YAML ( ver § Historia y nombre ) es un lenguaje de serialización de datos legible por humanos . Se usa comúnmente para archivos de configuración y en aplicaciones donde se almacenan o transmiten datos. YAML apunta a muchas de las mismas aplicaciones de comunicaciones que el Lenguaje de marcado extensible (XML), pero tiene una sintaxis mínima que difiere intencionalmente de SGML . [1] Utiliza sangría estilo Python para indicar anidamiento, y un formato más compacto que usa para listas y mapas [1] para que los archivos JSON sean válidos YAML 1.2. [2][...]
{...}
Extensiones de nombre de archivo | .yaml , .yml |
---|---|
Tipo de medio de Internet | No registrado |
Versión inicial | 11 de mayo de 2001 |
Último lanzamiento | 1.2 (tercera edición) (1 de octubre de 2009 ) |
Tipo de formato | Intercambio de datos |
¿ Formato abierto ? | sí |
Sitio web | yaml |
Se permiten tipos de datos personalizados, pero YAML codifica de forma nativa escalares (como cadenas , enteros y flotantes ), listas y matrices asociativas (también conocidas como mapas, diccionarios o hashes). Estos tipos de datos se basan en el lenguaje de programación Perl , aunque todos los lenguajes de programación de alto nivel de uso común comparten conceptos muy similares. [ cita requerida ] La sintaxis centrada en dos puntos, utilizada para expresar pares clave-valor , está inspirada en los encabezados de correo electrónico como se define en RFC 822 , y el separador de documentos ---
se tomó prestado de MIME ( RFC 2046 ). Las secuencias de escape se reutilizan desde C y el ajuste de espacios en blanco para cadenas de varias líneas está inspirado en HTML . Las listas y los hashes pueden contener listas y hashes anidados, formando una estructura de árbol ; Los gráficos arbitrarios se pueden representar mediante alias YAML (similar a XML en SOAP ). [1] YAML está diseñado para leerse y escribirse en secuencias, una función inspirada en SAX . [1]
El soporte para leer y escribir YAML está disponible para muchos lenguajes de programación. [3] Algunos editores de código fuente como Emacs [4] y varios entornos de desarrollo integrados [5] [6] [7] tienen características que facilitan la edición de YAML, como plegar estructuras anidadas o resaltar automáticamente los errores de sintaxis.
La extensión de nombre de archivo oficial recomendada para archivos YAML ha sido .yaml
[8] desde 2006. [9]
Historia y nombre
YAML ( / j æ m əl / , rimas con camello [2] ) fue propuesto por primera vez por Clark Evans en 2001, [10] que la diseñó junto con Ingy red del punto [11] y Oren Ben-Kiki. [11] Originalmente se decía que YAML significaba Otro lenguaje de marcado , [12] porque fue lanzado en una era que vio una proliferación de lenguajes de marcado para presentación y conectividad (HTML, XML, SGML, etc.). Su nombre inicial fue pensado como una referencia irónica [13] al panorama tecnológico, haciendo referencia a su propósito como lenguaje de marcado con otro constructo, pero luego se reutilizó como YAML Ain't Markup Language , un acrónimo recursivo , para distinguir su propósito como orientado a datos, en lugar de marcado de documentos.
Diseño
Sintaxis
Una hoja de trucos y especificaciones completas están disponibles en el sitio oficial. [14] La siguiente es una sinopsis de los elementos básicos.
YAML acepta todo el conjunto de caracteres Unicode, excepto algunos caracteres de control , y puede estar codificado en cualquiera de UTF-8 , UTF-16 o UTF-32 . (Aunque UTF-32 no es obligatorio, es necesario que un analizador sea compatible con JSON ). [15]
- La sangría de espacios en blanco se utiliza para denotar estructura; sin embargo, los caracteres de tabulación no están permitidos como parte de esa sangría.
- Los comentarios comienzan con el signo de número (
#
), pueden comenzar en cualquier lugar de una línea y continuar hasta el final de la línea. Los comentarios deben estar separados de otros tokens mediante espacios en blanco. [16] Si aparecen # caracteres dentro de una cadena, entonces son#
literales de signo de número ( ). - Los miembros de la lista se indican con un guión inicial (
-
) con un miembro por línea.- También se puede especificar una lista encerrando el texto entre corchetes (
[...]
) con cada entrada separada por una coma .
- También se puede especificar una lista encerrando el texto entre corchetes (
- Una matriz asociativa entrada se representa usando dos puntos del espacio en forma clave: valor con una entrada por línea. YAML requiere que los dos puntos vayan seguidos de un espacio para que los valores escalares como, por
http://www.wikipedia.org
lo general, puedan representarse sin necesidad de estar entre comillas.- Se puede utilizar un signo de interrogación delante de una clave, en la forma "? Clave: valor" para permitir que la clave contenga guiones iniciales, corchetes, etc., sin comillas.
- Una matriz asociativa también se puede especificar mediante texto entre llaves (
{...}
), con claves separadas de los valores por dos puntos y las entradas separadas por comas (los espacios no son necesarios para mantener la compatibilidad con JSON).
- Las cadenas (un tipo de escalar en YAML) normalmente no están entre comillas, pero pueden estar entre comillas dobles (
"
) o comillas simples ('
).- Dentro de las comillas dobles, los caracteres especiales se pueden representar con secuencias de escape de estilo C que comienzan con una barra invertida (
\
). Según la documentación, el único escape octal admitido es\0
. - Dentro de las comillas simples, la única secuencia de escape admitida es una comilla simple doblada (
''
) que denota la comilla simple como en'don''t'
.
- Dentro de las comillas dobles, los caracteres especiales se pueden representar con secuencias de escape de estilo C que comienzan con una barra invertida (
- Los escalares de bloque están delimitados con sangría con modificadores opcionales para conservar (
|
) o doblar (>
) nuevas líneas. - Varios documentos dentro de una sola secuencia están separados por tres guiones (
---
).- Opcionalmente, tres puntos (
...
) terminan un documento dentro de una secuencia.
- Opcionalmente, tres puntos (
- Los nodos repetidos se indican inicialmente con un ampersand (
&
) y luego se hace referencia a ellos con un asterisco (*
). - Los nodos se pueden etiquetar con un tipo o etiqueta con un signo de exclamación doble (
!!
) seguido de una cadena, que se puede expandir en un URI. - Los documentos YAML en una secuencia pueden estar precedidos por 'directivas' compuestas por un signo de porcentaje (
%
) seguido de un nombre y parámetros delimitados por espacios. Se definen dos directivas en YAML 1.1:- La directiva% YAML se utiliza para identificar la versión de YAML en un documento determinado.
- La directiva% TAG se utiliza como atajo para prefijos URI. Estos atajos se pueden utilizar en etiquetas de tipo de nodo.
Se reservan dos caracteres de sigilo adicionales en YAML para una posible especificación futura: el signo arroba ( @
) y la tilde inversa ( `
).
Componentes básicos
YAML ofrece un estilo "en línea" para denotar matrices y listas asociativas. Aquí hay una muestra de los componentes.
El formato de bloque convencional usa un guión + espacio para comenzar un nuevo elemento en la lista.
--- # Películas favoritas - Casablanca - North by Northwest - The Man Who Wasn't There
El formato en línea opcional está delimitado por coma + espacio y entre corchetes (similar a JSON ). [17]
--- # Lista de compras [ leche , pastel de calabaza , huevos , jugo ]
Las claves están separadas de los valores por dos puntos + espacio. Los bloques con sangría, comunes en los archivos de datos YAML, usan sangría y nuevas líneas para separar los pares clave / valor. Los bloques en línea, comunes en los flujos de datos YAML, usan coma + espacio para separar los pares clave / valor entre llaves.
--- # Nombre del bloque con sangría : John Smith edad : 33 --- # Bloque en línea { nombre : John Smith , edad : 33 }
Las cadenas no requieren comillas. Hay dos formas de escribir cadenas de varias líneas, una conservando las líneas nuevas (usando el |
carácter) y otra que dobla las líneas nuevas (usando el >
carácter), ambas seguidas por un carácter de línea nueva.
datos : | Había una vez un hombre alto de Ealing que se subió a un autobús a Darjeeling. En la puerta decía: "Por favor, no se siente en el suelo". Así que se sentó con cuidado en el techo.
De forma predeterminada, la sangría inicial (de la primera línea) y el espacio en blanco final se eliminan, aunque se puede especificar explícitamente otro comportamiento.
datos : > El texto envuelto se plegará en un solo párrafo Las líneas en blanco indican saltos de párrafo
El texto plegado convierte las líneas nuevas en espacios y elimina los espacios en blanco iniciales.
--- # The Smiths - { nombre : John Smith , edad : 33 } - nombre : Mary Smith edad : 27 - [ nombre , edad ]: [ Rae Smith , 4 ] # secuencias como claves son compatibles --- # Personas, por género hombres : [ John Smith , Bill Jones ] mujeres : - Mary Smith - Susan Williams
Los objetos y las listas son componentes importantes en yaml y se pueden mezclar. El primer ejemplo es una lista de objetos clave-valor, todas las personas de la familia Smith. El segundo los enumera por género; es un objeto de valor-clave que contiene dos listas.
Componentes avanzados
Dos características que distinguen a YAML de las capacidades de otros lenguajes de serialización de datos son las estructuras [18] y la tipificación de datos.
Las estructuras YAML permiten el almacenamiento de varios documentos dentro de un solo archivo, el uso de referencias para nodos repetidos y el uso de nodos arbitrarios como claves. [18]
Para mayor claridad, compacidad y evitar errores de entrada de datos, YAML proporciona anclajes de nodo (uso &
) y referencias (uso *
). Las referencias al ancla funcionan para todos los tipos de datos (consulte la referencia de envío en el ejemplo siguiente).
A continuación se muestra un ejemplo de una cola en un secuenciador de instrumentos en el que dos pasos se reutilizan repetidamente sin describirse completamente cada vez.
--- # Protocolos de secuenciador para cirugía ocular con láser - paso : & id001 # define la etiqueta de anclaje & id001 instrumento : Lasik 2000 pulseEnergía : 5.4 pulseDuración : 12 repeticiones : 1000 puntos Tamaño : 1 mm- paso : & id002 instrumento : Lasik 2000 pulso Energía : 5.0 pulso Duración : 10 repeticiones : 500 puntos Tamaño : 2 mm - paso : * id001 # se refiere al primer paso (con ancla & id001) - paso : * id002 # se refiere al segundo paso - paso : * id002
La escritura de datos explícita rara vez se ve en la mayoría de los documentos YAML, ya que YAML detecta automáticamente los tipos simples. Los tipos de datos se pueden dividir en tres categorías: básicos, definidos y definidos por el usuario. Los núcleos son los que se espera que existan en cualquier analizador (por ejemplo, flotantes, ints, cadenas, listas, mapas, ...). Muchos tipos de datos más avanzados, como los datos binarios, se definen en la especificación YAML pero no se admiten en todas las implementaciones. Finalmente, YAML define una forma de extender las definiciones de tipos de datos localmente para acomodar clases, estructuras o primitivas definidas por el usuario (por ejemplo, flotantes de precisión cuádruple).
YAML detecta automáticamente el tipo de datos de la entidad, pero a veces uno quiere convertir el tipo de datos explícitamente. La situación más común es donde una cadena de una sola palabra que parece un número, booleano o etiqueta requiere desambiguación rodeándola con comillas o usando una etiqueta de tipo de datos explícita.
--- una : 123 # un entero b : "123" # una cadena, desambiguado por comillas c : 123.0 # un flotador d : !! flotador 123 # también a través de un flotador tipo de datos explícito con el prefijo (!!) e : ! ! str 123 # una cadena, eliminada por el tipo explícito f : !! str Sí # una cadena a través del tipo explícito g : Sí # un booleano Verdadero (yaml1.1), cadena "Sí" (yaml1.2) h : Sí, tenemos No bananas # una cadena, "Sí" y "No" sin ambigüedad por contexto.
No todas las implementaciones de YAML tienen todos los tipos de datos definidos por especificación. Estos tipos incorporados usan un prefijo de sigilo de doble exclamación ( !!
). Los particularmente interesantes que no se muestran aquí son los conjuntos, mapas ordenados, marcas de tiempo y hexadecimales. A continuación, se muestra un ejemplo de datos binarios codificados en base64 .
--- imagen : !! binario | R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs =
Muchas implementaciones de YAML pueden admitir tipos de datos definidos por el usuario para la serialización de objetos. Los tipos de datos locales no son tipos de datos universales, pero se definen en la aplicación mediante la biblioteca del analizador YAML. Los tipos de datos locales utilizan un solo signo de exclamación ( !
).
--- myObject : ! MyClass { Nombre : Joe , edad : 15 }
Ejemplo
La jerarquía de la estructura de datos se mantiene mediante la sangría del contorno.
--- recepción : Oz-Ware Factura de Compra Fecha : 2012-08-06 cliente : nombre apellido : Dorothy FAMILY_NAME : Galeartículos : - part_no : A4786 descrip : cubo de agua (Lleno) Precio : 1,47 Cantidad : 4 - part_no : E1628 descrip : de tacón alto "Ruby" Zapatillas tamaño : 8 Precio : 133,7 Cantidad : 1facturar a : & id001 calle : | 123 Tornado Alley Suite 16 Ciudad : Este de Centerville estado : KSenvío a : * id001entrega especial : > Siga el camino de ladrillos amarillos hasta la Ciudad Esmeralda. No prestes atención al hombre detrás de la cortina. ...
Tenga en cuenta que las cadenas no requieren delimitación entre comillas. El número específico de espacios en la sangría no es importante siempre que los elementos paralelos tengan la misma justificación a la izquierda y los elementos anidados jerárquicamente tengan sangría adicional. Este documento de muestra define una matriz asociativa con 7 claves de nivel superior: una de las claves, "elementos", contiene una lista de 2 elementos, cada uno de los cuales es en sí mismo una matriz asociativa con claves diferentes. Se muestran los datos relacionales y la eliminación de la redundancia: el contenido de la matriz asociativa "enviar a" se copia del contenido de la matriz asociativa "facturar a" como lo indican las etiquetas anchor ( &
) y reference ( *
). Se pueden agregar líneas en blanco opcionales para facilitar la lectura. Pueden existir varios documentos en un solo archivo / flujo y están separados por ---
. Se ...
puede usar un opcional al final de un archivo (útil para señalar el final de las comunicaciones transmitidas sin cerrar la tubería).
Características
Delimitación con sangría
Debido a que YAML se basa principalmente en la sangría del contorno para la estructura, es especialmente resistente a la colisión del delimitador . La insensibilidad de YAML a las comillas y llaves en valores escalares significa que uno puede incrustar documentos XML, JSON o incluso YAML dentro de un documento YAML simplemente sangrando en un literal de bloque (usando |
o >
):
--- ejemplo : > HTML entra en YAML sin mensaje de modificación : |
"Tres siempre es mayor que dos,
incluso para valores grandes de dos" --Autor desconocido
fecha : 2007-06-01
YAML se puede colocar en JSON entre comillas y escapando de todas las comillas interiores. YAML puede ser colocado en XML escapando caracteres reservados ( <
, >
, &
, '
, "
) y convertir los espacios en blanco, o colocándolo en un CDATA sección.
Modelos de datos no jerárquicos
A diferencia de JSON, que solo puede representar datos en un modelo jerárquico con cada nodo secundario con un solo padre, YAML también ofrece un esquema relacional simple que permite hacer referencia a repeticiones de datos idénticos desde dos o más puntos en el árbol en lugar de ingresar de forma redundante en esos puntos. Esto es similar a la función IDREF integrada en XML. [19] El analizador YAML luego expande estas referencias en las estructuras de datos completamente pobladas que implican cuando se leen, por lo que cualquier programa que esté usando el analizador no tiene que ser consciente de un modelo de codificación relacional, a diferencia de los procesadores XML, que no expanden las referencias. . Esta expansión puede mejorar la legibilidad al tiempo que reduce los errores de entrada de datos en los archivos de configuración o protocolos de procesamiento donde muchos parámetros permanecen iguales en una serie secuencial de registros, mientras que solo algunos varían. Un ejemplo es que los registros de "envío a" y "facturación" en una factura son casi siempre los mismos datos.
Consideraciones prácticas
YAML está orientado a líneas y, por lo tanto, a menudo es sencillo convertir la salida no estructurada de los programas existentes al formato YAML y, al mismo tiempo, conservar gran parte del aspecto del documento original. Debido a que no hay etiquetas de cierre, llaves o comillas para equilibrar, generalmente es fácil generar YAML bien formados directamente a partir de declaraciones de impresión distribuidas dentro de programas poco sofisticados. Asimismo, los delimitadores de espacios en blanco facilitan el filtrado rápido y sucio de archivos YAML utilizando los comandos orientados a líneas en grep, AWK, Perl, Ruby y Python.
En particular, a diferencia de los lenguajes de marcado, los fragmentos de líneas YAML consecutivas tienden a ser documentos YAML bien formados. Esto hace que sea muy fácil escribir analizadores que no tienen que procesar un documento en su totalidad (por ejemplo, equilibrar las etiquetas de apertura y cierre y navegar entre comillas y caracteres de escape) antes de que comiencen a extraer registros específicos dentro. Esta propiedad es particularmente conveniente cuando se itera en una sola pasada sin estado, sobre registros en un archivo cuya estructura de datos completa es demasiado grande para almacenarla en la memoria, o para los cuales reconstituir la estructura completa para extraer un elemento sería prohibitivamente costoso.
Contrariamente a la intuición, aunque su delimitación con sangría puede parecer que complica las jerarquías profundamente anidadas, YAML maneja sangrías tan pequeñas como un solo espacio, y esto puede lograr una mejor compresión que los lenguajes de marcado. Además, la sangría extremadamente profunda se puede evitar por completo: 1) volviendo al "estilo en línea" (es decir, formato similar a JSON) sin la sangría; o 2) usar anclajes relacionales para desenrollar la jerarquía a una forma plana que el analizador YAML reconstituirá de forma transparente en la estructura de datos completa. [ cita requerida ]
Seguridad
YAML es puramente un lenguaje de representación de datos y, por lo tanto, no tiene comandos ejecutables. [20] Si bien la validación y el análisis seguro son intrínsecamente posibles en cualquier lenguaje de datos, la implementación es un error tan notorio que la falta de YAML de un lenguaje de comando asociado puede ser un beneficio de seguridad relativo.
Sin embargo, YAML permite etiquetas específicas del idioma para que un analizador que admita esas etiquetas pueda crear objetos locales arbitrarios. Cualquier analizador YAML que permita la ejecución de una instanciación de objetos sofisticados abre la posibilidad de un ataque de inyección. Los analizadores de Perl que permiten la carga de objetos de clases arbitrarias crean los llamados valores "bendecidos". El uso de estos valores puede desencadenar un comportamiento inesperado, por ejemplo, si la clase utiliza operadores sobrecargados. Esto puede llevar a la ejecución de código Perl arbitrario. [ cita requerida ]
La situación es similar para los analizadores de Python o Ruby. Según la documentación de PyYAML: [21]
Tenga en cuenta que la capacidad de construir un objeto Python arbitrario puede ser peligrosa si recibe un documento YAML de una fuente que no es de confianza, como Internet. La función
yaml.safe_load
limita esta capacidad a objetos Python simples como números enteros o listas. [...]PyYAML le permite construir un objeto Python de cualquier tipo. Incluso se pueden construir instancias de clases de Python usando la
!!python/object
etiqueta.
Procesamiento y representación de datos
La especificación YAML identifica un documento de instancia como una "Presentación" o "flujo de caracteres". [22] Las estructuras lógicas primarias en un documento de instancia YAML son escalares, secuencias y mapeos. [23] La especificación YAML también indica algunas restricciones básicas que se aplican a estas estructuras lógicas primarias. Por ejemplo, de acuerdo con la especificación, las claves de mapeo no tienen orden. En todos los casos en los que el orden de los nodos sea significativo, se debe utilizar una secuencia. [24]
Además, al definir la conformidad para los procesadores YAML, la especificación YAML define dos operaciones principales: volcado y carga . Todos los procesadores compatibles con YAML deben proporcionar al menos una de estas operaciones y, opcionalmente, pueden proporcionar ambas. [25] Finalmente, la especificación YAML define un modelo de información o "gráfico de representación", que debe crearse durante el procesamiento tanto para las operaciones de descarga como para las de carga , aunque esta representación no necesita estar disponible para el usuario a través de una API. [26]
Comparación con otros formatos de serialización
Comparación con JSON
La sintaxis JSON es una base de la versión 1.2 de YAML, que fue promulgada con el propósito expreso de hacer que YAML "cumpla con JSON como un subconjunto oficial". [2] Aunque las versiones anteriores de YAML no eran estrictamente compatibles, [27] las discrepancias rara vez se notaban, y la mayoría de los documentos JSON pueden ser analizados por algunos analizadores YAML como Syck. [28] Esto se debe a que la estructura semántica de JSON es equivalente al "estilo en línea" opcional de escribir YAML. Si bien las jerarquías extendidas se pueden escribir en estilo en línea como JSON, este no es un estilo YAML recomendado, excepto cuando ayuda a la claridad.
YAML tiene muchas características adicionales que faltan en JSON, incluidos comentarios, tipos de datos extensibles, anclajes relacionales, cadenas sin comillas y tipos de mapeo que preservan el orden de las claves.
Comparación con TOML
Por un lado, YAML es mucho más complejo en comparación con TOML : se señaló que la especificación YAML tenía 23.449 palabras, mientras que la especificación TOML tenía solo 3.339 palabras. [29] Por otro lado, YAML es menos detallado, más DRY , sintácticamente menos ruidoso, y la jerarquía de un documento es obvia por la sangría [30] .
Comparación con XML
YAML carece de la noción de atributos de etiqueta que se encuentran en XML. En su lugar, YAML tiene declaraciones de tipos extensibles (incluidos tipos de clases para objetos).
YAML en sí no tiene descriptores de esquema de documento definidos por el lenguaje XML que permitan, por ejemplo, que un documento se autovalide. Sin embargo, existen varios lenguajes de descriptores de esquema definidos externamente para YAML (por ejemplo , Doctrine , Kwalify y Rx) que cumplen esa función. Además, la semántica proporcionada por las declaraciones de tipos definidos por el lenguaje de YAML en el propio documento YAML con frecuencia relaja la necesidad de un validador en situaciones simples y comunes. Además, YAXML , que representa estructuras de datos YAML en XML, permite que los importadores de esquemas XML y los mecanismos de salida como XSLT se apliquen a YAML.
La comparación de formatos de serialización de datos proporciona una comparación más completa de YAML con otros formatos de serialización.
Software (emisores y analizadores)
Para estructuras de datos fijas, los archivos YAML se pueden generar simplemente usando comandos de impresión que escriben tanto los datos como la decoración específica de YAML. Sin embargo, para volcar datos jerárquicos variados o complejos, es preferible un emisor YAML dedicado . De manera similar, los archivos YAML simples (por ejemplo, pares clave-valor) se analizan fácilmente con expresiones regulares. Para estructuras de datos más complejas o variables, se recomienda un analizador YAML formal .
Existen emisores y analizadores YAML para muchos lenguajes populares. La mayoría de ellos están escritos en el propio idioma nativo. Algunos son enlaces de lenguaje de la biblioteca de C libyaml ; pueden correr más rápido. Solía haber otra biblioteca de C, llamada Syck , escrita y huérfana por qué los afortunados son rígidos : no se mantiene, no hay un paquete de fuentes autorizadas y el sitio web ha sido secuestrado. Por lo tanto, la única biblioteca C recomendable es libyaml . Fue desarrollado originalmente por Kirill Simonov. En 2018, los nuevos mantenedores Ian Cordasco e Ingy döt Net reanudaron el desarrollo . [31]
Los programadores de C ++ pueden elegir entre la biblioteca de C libyaml y la biblioteca de C ++ libyaml-cpp . Ambos tienen bases de código completamente independientes y API completamente diferentes . La biblioteca libyaml-cpp todavía tiene un número de versión principal de 0, lo que indica que la API puede cambiar en cualquier momento, como sucedió después de la versión 0.3. Hay una implementación centrada en la gramática escrita en C #, con el objetivo de extensiones para los elementos anidados. [32]
Algunas implementaciones de YAML, como YAML.pm de Perl, cargarán un archivo completo (flujo) y lo analizarán en masa . Otras implementaciones como PyYaml son perezosas e iteran sobre el siguiente documento solo a pedido. Para archivos muy grandes en los que se planea manejar los documentos de forma independiente, la creación de instancias de todo el archivo antes del procesamiento puede ser prohibitivo. Por lo tanto, en YAML.pm, ocasionalmente uno debe dividir un archivo en documentos y analizarlos individualmente. YAML lo hace fácil, ya que esto simplemente requiere dividir en el marcador de final de documento, que se define como tres puntos en una línea por sí mismos. Este marcador está prohibido en su contenido. [33]
Crítica
YAML ha sido criticado por sus importantes espacios en blanco , características confusas, valores predeterminados inseguros y su especificación compleja y ambigua: [29] [34] [35]
- Los archivos de configuración pueden ejecutar comandos o cargar contenidos sin que los usuarios se den cuenta. [29]
- Editar archivos YAML grandes es difícil, ya que los errores de sangría pueden pasar desapercibidos. [29]
- La detección automática de tipos es una fuente de errores. Por ejemplo, sin comillas
Yes
yNO
se convierten en valores booleanos; los números de versión del software se pueden convertir a flotantes. [29] [36] - Los archivos truncados a menudo se interpretan como YAML válido debido a la ausencia de terminadores.
- La complejidad del estándar condujo a implementaciones inconsistentes y a que el lenguaje no fuera portátil. [29] [37]
Los defectos y la complejidad percibidos de YAML han llevado a la aparición de alternativas más estrictas como StrictYAML y NestedText . [36]
Ver también
- Comparación de formatos de serialización de datos
- Lenguaje de marcado ligero
Referencias
- ^ a b c d "Otro lenguaje de marcado (YAML) 1.0 / Borrador de trabajo" . 10 de diciembre de 2001.
- ^ a b c "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "El sitio web oficial de YAML" . yaml.org .
- ^ "Modo Yaml" . EmacsWiki. 2015-06-12 . Consultado el 5 de diciembre de 2016 .
- ^ aukaost. "Pretty YAML - Paquetes - Control de paquetes" . Packagecontrol.io . Consultado el 5 de diciembre de 2016 .
- ^ "yaml | Complementos, paquetes y productos de Eclipse - Eclipse Marketplace" . Marketplace.eclipse.org . Consultado el 5 de diciembre de 2016 .
- ^ Ruth Kusterer. "NetBeans IDE - Ruby y Ruby on Rails Development" . Netbeans.org . Consultado el 5 de diciembre de 2016 .
- ^ "YAML no es lenguaje de marcado" . yaml.org .
- ^ "YAML no es lenguaje de marcado" . web.archive.org . 24 de septiembre de 2006.
- ^ Evans, Clark (11 de mayo de 2001). "Borrador YAML 0.1" . Yahoo! Grupos de tecnología: sml-dev . Consultado el 21 de marzo de 2019 .
- ^ a b "YAML no es lenguaje de marcado: Acerca de" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "Otro lenguaje de marcado (YAML) 1.0" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "Otro lenguaje de marcado (YAML) 1.0" . stackoverflow.com . Consultado el 24 de marzo de 2021 .
- ^ " Tarjeta de referencia YAML 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "Aplicaciones de gestión basadas en la nube" . JigoCloud.com . Archivado desde el original el 17 de septiembre de 2016 . Consultado el 28 de septiembre de 2016 .
- ^ a b "Especificación de estructuras YAML 1.2" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "Lenguaje de marcado extensible (XML) 1.0 (segunda edición)" . W3.org . Consultado el 27 de mayo de 2015 .
- ^ Una etiqueta de "rendimiento" propuesta proporcionaría cálculos aritméticos simples.
- ^ "Documentación PyYAML, cargando YAML" . Pyyaml.org . Consultado el 28 de septiembre de 2016 .
- ^ "No es Markup Language (YAML) versión 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ Las estructuras lógicas adicionales de uso opcional se enumeran en el repositorio de tipos YAML. "Tipos independientes del idioma para YAML versión 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .Los tipos etiquetados en el repositorio de tipos YAML son opcionales y, por lo tanto, no son esenciales para los procesadores YAML conformes. "El uso de estas etiquetas no es obligatorio".
- ^ "YAML no es lenguaje de marcado (YAML) versión 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "No es Markup Language (YAML) versión 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "YAML no es lenguaje de marcado (YAML) versión 1.1" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ Las incompatibilidades fueron las siguientes: JSON permite conjuntos de caracteres extendidos como UTF-32 y tenía una sintaxis de escape de caracteres Unicode incompatible con respecto a YAML; YAML requería un espacio después de separadores como coma, igual y dos puntos, mientras que JSON no lo hace. Algunas implementaciones no estándar de JSON amplían la gramática para incluir
/*...*/
comentariosde Javascript. El manejo de estos casos extremos puede requerir un preprocesamiento ligero del JSON antes de analizarlo como YAML en línea. Consulte también [1] . - ^ Analizando JSON con SYCK . Tenga en cuenta que, por ejemplo, el analizador YAML de Symfony no admite saltos de línea dentro de las estructuras [] o {}, lo cual es una gran incompatibilidad con JSON.
- ^ a b c d e f Tournoij, Martin (4 de septiembre de 2016). "YAML: probablemente no tan bueno después de todo" . Consultado el 16 de mayo de 2019 .
- ^ ¿Qué pasa con TOML?
- ^ [email protected], correo del 27 de junio de 2018.
- ^ "Gramática YAML para Lexepars" .
- ^ "YAML no es lenguaje de marcado (YAML) Versión 1.2 # 9.1.2 Marcadores de documento" . YAML.org . Consultado el 29 de mayo de 2019 .
- ^ "Eso es mucho YAML" . Consultado el 16 de mayo de 2019 .
- ^ "YAML apesta" . Consultado el 16 de mayo de 2019 .
- ^ a b "El problema de Noruega: por qué StrictYAML se niega a escribir implícitamente y usted también" . Consultado el 3 de junio de 2020 .
- ^ "Matriz de prueba YAML" .
enlaces externos
- Página web oficial