stringtranslate.com

YAML

YAML ( / ˈjæməl / ; ver § Historia y nombre) es unlenguaje de serialización de datoslegible por humanos . Se utiliza comúnmente paraarchivos de configuracióny en aplicaciones donde se almacenan o transmiten datos. YAML se dirige a muchas de las mismas aplicaciones de comunicaciones queel lenguaje de marcado extensible(XML), pero tiene una sintaxis mínima que difiere intencionalmente dellenguaje de marcado generalizado estándar(SGML).[3]Utilizade Pythonpara indicar anidamiento[3]y no requiere comillas alrededor de la mayoría de los valores de cadena (también admiteel estiloJSONymixto en el mismo archivo).[4][...]{...}

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. [5] [6] [7] La ​​sintaxis centrada en dos puntos, utilizada para expresar pares clave-valor , está inspirada en los encabezados de correo electrónico tal como se define en RFC  822, y el separador de documentos --- se toma prestado de MIME ( RFC  2046). Las secuencias de escape se reutilizan de 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 utilizando alias YAML (similares a XML en SOAP ). [3] YAML está pensado para ser leído y escrito en secuencias, una característica inspirada en SAX . [3]

El soporte para leer y escribir YAML está disponible para muchos lenguajes de programación. [8] Algunos editores de código fuente como Vim , [9] Emacs , [10] y varios entornos de desarrollo integrados [11] [12] [13] tienen características que facilitan la edición de YAML, como plegar estructuras anidadas o resaltar automáticamente errores de sintaxis.

La extensión de nombre de archivo recomendada oficialmente para los archivos YAML ha sido .yamldesde 2006. [14] En 2024, se habrá finalizado el tipo MIME . [1]application/yaml

Historia y nombre

YAML ( / ˈ j æ m əl / , rima con camel [4] ) fue propuesto por primera vez por Clark Evans en 2001, [15] quien lo diseñó junto con Ingy döt Net [16] y Oren Ben-Kiki. [16] Originalmente se decía que YAML significaba Yet Another Markup Language , [17] 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 [18] al panorama tecnológico, haciendo referencia a su propósito como lenguaje de marcado con el constructo yet another , pero luego fue reutilizado 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.

Versiones

Diseño

Sintaxis

Una hoja de trucos y especificaciones completas están disponibles en el sitio oficial. [19] 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 codificarse en cualquiera de los formatos UTF-8 , UTF-16 o UTF-32 . (Aunque UTF-32 no es obligatorio, es necesario para que un analizador tenga compatibilidad con JSON ). [20]

Componentes básicos

El formato de bloque convencional utiliza un guión + espacio para comenzar un nuevo elemento en la lista.

--- # Películas favoritas - Casablanca - Con la muerte en los talones - El hombre que nunca estuvo allí    

El formato en línea opcional está delimitado por coma+espacio y encerrado entre corchetes (similar a JSON ). [23]

--- # Lista de compras [ leche , pastel de calabaza , huevos , jugo ]    

Las claves se separan de los valores mediante dos puntos y un espacio. Los bloques con sangría, habituales en los archivos de datos YAML, utilizan sangría y nuevas líneas para separar los pares clave/valor. Los bloques en línea, habituales en los flujos de datos YAML, utilizan coma y espacio para separar los pares clave/valor entre llaves.

--- # Bloque sangrado nombre : 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 que conserva los saltos de línea (utilizando el |carácter ) y otra que los pliega (utilizando el >carácter ), ambas seguidas de un carácter de salto de línea.

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 te sientes en el suelo". Así que se sentó con cuidado en el techo.      

De forma predeterminada, se eliminan la sangría inicial (de la primera línea) y los espacios finales, aunque se puede especificar explícitamente otro comportamiento.

datos : > El texto ajustado se plegará en un solo párrafo      Las líneas en blanco indican saltos de párrafo. 

El texto plegado convierte las nuevas líneas en espacios y elimina los espacios iniciales.

--- # The Smiths - { nombre : John Smith , edad : 33 } - nombre : Mary Smith edad : 27 - [ nombre , edad ]: [ Rae Smith , 4 ] # Se admiten secuencias como claves --- # 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 combinar. 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 clave-valor 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 [24] y la tipificación de datos.

Las estructuras YAML permiten el almacenamiento de múltiples documentos dentro de un solo archivo, el uso de referencias para nodos repetidos y el uso de nodos arbitrarios como claves. [24]

Para mayor claridad, compacidad y para evitar errores de ingreso de datos, YAML proporciona anclas de nodo (usando &) y referencias (usando *). Las referencias a las anclas funcionan para todos los tipos de datos (vea la referencia de envío en el ejemplo a continuación).

A continuación se muestra un ejemplo de una cola en un secuenciador de instrumentos en el que se hace referencia a dos pasos sin describirlos completamente.

--- # Protocolos de secuenciador para cirugía láser ocular - paso : &id001 # define etiqueta de ancla &id001 instrumento : Lasik 2000 energía del pulso : 5,4 duración del pulso : 12 repetición : 1000 tamaño del punto : 1 mm              - paso : &id002 instrumento : Lasik 2000 energía del pulso : 5.0 duración del pulso : 10 repetición : 500 tamaño del punto : 2 mm - Instrumento1 : *id001 # se refiere al primer paso (con ancla &id001) - Instrumento2 : *id002 # se refiere al segundo paso                  

En la mayoría de los documentos YAML rara vez se observa una tipificación explícita de datos, 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 básicos son los que se espera que existan en cualquier analizador (por ejemplo, flotantes, enteros, cadenas, listas, mapas, etc.). 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. Por último, YAML define una forma de ampliar las definiciones de tipos de datos localmente para dar cabida a 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 se desea convertir el tipo de datos explícitamente. La situación más común es cuando una cadena de una sola palabra que parece un número, un valor booleano o una etiqueta requiere desambiguación rodeándola con comillas o usando una etiqueta de tipo de datos explícita.

--- a : 123 # un entero b : "123" # una cadena, desambiguada por comillas c : 123.0 # un float d : !!float 123 # también un float a través del tipo de datos explícito prefijado por (!!) e : !!str 123 # una cadena, desambiguada por el tipo explícito f : !!str # una cadena a través del tipo explícito g : # un Boolean True (yaml1.1), cadena "Yes" (yaml1.2) h : Sí, no tenemos bananas # una cadena, "Yes" y "No" desambiguadas por el contexto.                   

No todas las implementaciones de YAML tienen todos los tipos de datos definidos por la especificación. Estos tipos integrados utilizan un prefijo de signo de!! exclamación doble ( ). Los tipos particularmente interesantes que no se muestran aquí son los conjuntos, los mapas ordenados, las marcas de tiempo y los hexadecimales. Aquí hay 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, sino que se definen en la aplicación mediante la biblioteca de análisis YAML. Los tipos de datos locales utilizan un solo signo de exclamación ( !).

Ejemplo

La jerarquía de la estructura de datos se mantiene mediante sangría de contorno.

--- recibo : Factura de compra de Oz-Ware Fecha : 2012-08-06 Cliente : nombre : Dorothy apellido : Gale      Artículos : - N.º de pieza : A4786 Descripción : Cubo de agua (lleno) Precio : 1,47 Cantidad : 4          - part_no : E1628 descrip : Zapatillas de tacón alto "Ruby" talla : 8 precio : 133.7 cantidad : 1          factura a : &id001 calle : | 123 Tornado Alley Suite 16 ciudad : East Centerville estado : KS         enviar a : *id001 Entrega especial : > Sigue el camino de baldosas amarillas hasta la Ciudad Esmeralda. No hagas caso al hombre que está detrás de la cortina. ...     

Tenga en cuenta que las cadenas no requieren estar 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 estén más sangrados. Este documento de muestra define una matriz asociativa con 7 claves de nivel superior: una de las claves, "items", contiene una lista de 2 elementos, cada elemento de los cuales es en sí mismo una matriz asociativa con claves diferentes. Se muestran los datos relacionales y la eliminación de redundancia: el contenido de la matriz asociativa "ship-to" se copia del contenido de la matriz asociativa "bill-to" como lo indican las etiquetas de ancla ( &) y referencia ( *). Se pueden agregar líneas en blanco opcionales para facilitar la lectura. Pueden existir múltiples 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 un final en 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 de contorno para la estructura, es especialmente resistente a la colisión de delimitadores . 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 sangrándolo en un literal de bloque (usando |o >):

--- ejemplo : > HTML entra en YAML sin mensaje de modificación : |    <blockquote style="font: italic 1em serif"> <p>"Tres siempre es mayor que dos, incluso para valores grandes de dos"</p> <p>--Autor desconocido</p> </blockquote> fecha : 2007-06-01     

YAML se puede colocar en JSON entre comillas y escapando todas las comillas internas. YAML se puede colocar en XML escapando caracteres reservados ( <, >, &, ', ") y convirtiendo espacios en blanco, o colocándolo en una sección CDATA .

Modelos de datos no jerárquicos

A diferencia de JSON, que solo puede representar datos en un modelo jerárquico en el que cada nodo secundario tiene un único 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 del árbol en lugar de ingresarlos de manera redundante en esos puntos. Esto es similar a la función IDREF incorporada en XML. [25] 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 use el analizador no tiene que ser consciente de un modelo de codificación relacional, a diferencia de los procesadores XML, que no expanden referencias. Esta expansión puede mejorar la legibilidad al tiempo que reduce los errores de ingreso de datos en archivos de configuración o protocolos de procesamiento donde muchos parámetros permanecen iguales en una serie secuencial de registros mientras que solo varían unos pocos. Un ejemplo es que los registros "enviar a" y "facturar a" en una factura son casi siempre los mismos datos.

Consideraciones prácticas

YAML está orientado a líneas y, por lo tanto, suele ser sencillo convertir la salida no estructurada de programas existentes al formato YAML, manteniendo gran parte del aspecto del documento original. Como no hay etiquetas de cierre, llaves ni comillas que equilibrar, suele ser fácil generar YAML bien formado directamente a partir de instrucciones de impresión distribuidas dentro de programas poco sofisticados. Del mismo modo, los delimitadores de espacios en blanco facilitan el filtrado rápido y sucio de archivos YAML mediante los comandos orientados a líneas de 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 en sí mismos. Esto hace que sea muy fácil escribir analizadores que no tengan que procesar un documento en su totalidad (por ejemplo, equilibrar las etiquetas de apertura y cierre y navegar por los caracteres entrecomillados y escapados) antes de comenzar a extraer registros específicos dentro de él. Esta propiedad es particularmente conveniente cuando se itera en una sola pasada sin estado sobre los registros de un archivo cuya estructura de datos completa es demasiado grande para almacenarla en la memoria, o para el cual reconstruir la estructura completa para extraer un elemento sería prohibitivamente costoso.

Aunque parezca contra-intuitivamente, aunque su delimitación sangrada pueda 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 ya sea: 1) volviendo al "estilo en línea" (es decir, formato similar a JSON) sin la sangría; o 2) usando anclas relacionales para desenrollar la jerarquía a una forma plana que el analizador YAML reconstituirá de manera transparente en la estructura de datos completa. [26]

Seguridad

YAML es un lenguaje puramente de representación de datos y, por lo tanto, no tiene comandos ejecutables. Si bien la validación y el análisis seguro son inherentemente posibles en cualquier lenguaje de datos, la implementación es una trampa tan notoria que la falta de un lenguaje de comandos asociado en YAML puede ser un beneficio relativo para la seguridad.

Sin embargo, YAML permite etiquetas específicas del lenguaje para que un analizador que admita esas etiquetas pueda crear objetos locales arbitrarios. Cualquier analizador YAML que permita la ejecución de instancias sofisticadas de objetos abre la posibilidad de un ataque de inyección. Los analizadores Perl que permiten la carga de objetos de clases arbitrarias crean los llamados valores "bendecidos". El uso de estos valores puede provocar un comportamiento inesperado, por ejemplo, si la clase utiliza operadores sobrecargados. Esto puede llevar a la ejecución de código Perl arbitrario. [27] [ ¿ Fuente poco fiable? ]

La situación es similar para los analizadores de Python o Ruby. Según la documentación de PyYAML: [28]

Tenga en cuenta que la capacidad de construir un objeto Python arbitrario puede ser peligrosa si recibe un documento YAML de una fuente no confiable, como Internet. La función yaml.safe_loadlimita esta capacidad a objetos Python simples, como números enteros o listas. [...]

PyYAML permite construir un objeto Python de cualquier tipo. Incluso se pueden construir instancias de clases Python utilizando la !!python/objectetiqueta.

Procesamiento y representación de datos

La especificación YAML identifica un documento de instancia como una "Presentación" o "flujo de caracteres". [29] Las estructuras lógicas primarias en un documento de instancia YAML son escalares, secuencias y mapeos. [30] La especificación YAML también indica algunas restricciones básicas que se aplican a estas estructuras lógicas primarias. Por ejemplo, según la especificación, las claves de mapeo no tienen un orden. En cada caso donde el orden de los nodos es significativo, se debe utilizar una secuencia. [31]

Además, al definir la conformidad de los procesadores YAML, la especificación YAML define dos operaciones principales: dump y load . Todos los procesadores compatibles con YAML deben proporcionar al menos una de estas operaciones y, opcionalmente, pueden proporcionar ambas. [32] 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 dump como de load , aunque no es necesario que esta representación esté disponible para el usuario a través de una API. [33]

Comparación con otros formatos de serialización

Comparación con JSON

La sintaxis JSON es la base de la versión 1.2 de YAML, que se promulgó con el propósito expreso de hacer que YAML "cumpla con JSON como subconjunto oficial". [4] Aunque las versiones anteriores de YAML no eran estrictamente compatibles, [34] las discrepancias rara vez se notaban y la mayoría de los documentos JSON pueden analizarse con algunos analizadores YAML como Syck. [35] Esto se debe a que la estructura semántica de JSON es equivalente al "estilo en línea" opcional de escritura de 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 no están presentes en JSON, incluidos comentarios, tipos de datos extensibles, anclajes relacionales, cadenas sin comillas y tipos de mapeo que preservan el orden de las claves.

Debido a su concisión , la serialización y deserialización de JSON es mucho más rápida que la de YAML. [36] [37]

Comparación con TOML

TOML fue diseñado para ser un avance del formato de archivo .ini . El uso mínimo de caracteres indicadores de YAML se compara favorablemente con el requisito estricto de comillas y corchetes de TOML. [ opinión ] El uso de sangría significativa de YAML se ha contrastado con la notación de puntos de los nombres de clave y tabla de TOML para transmitir la misma estructura semántica. Las opiniones difieren sobre qué convención conduce a archivos de configuración más legibles. [38] [39]

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 los tipos de clase para objetos).

YAML en sí no tiene descriptores de esquema de documento definidos por 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 tipo definidas por 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 las 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 utilizando comandos de impresión que escriben tanto los datos como la decoración específica de YAML. Sin embargo, para volcar datos jerárquicos complejos o variables, 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 lenguaje nativo. Algunos son enlaces de lenguaje de la biblioteca C libyaml ; pueden ejecutarse más rápido. Solía ​​haber otra biblioteca C, llamada Syck , escrita y huérfana por qué la suerte se quedó atrás : no se mantiene, no hay un paquete de código fuente autorizado y el sitio web ha sido secuestrado. Por lo tanto, la única biblioteca C recomendable es libyaml . Fue desarrollada originalmente por Kirill Simonov. En 2018, el desarrollo fue reanudado por los nuevos mantenedores Ian Cordasco e Ingy döt Net. [40]

Los programadores de C++ pueden elegir entre la biblioteca de C libyaml y la biblioteca de C++ libyaml-cpp . Ambas 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ó de hecho 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. [41]

Algunas implementaciones de YAML, como YAML.pm de Perl, cargarán un archivo completo (stream) y lo analizarán en masa . Otras implementaciones como PyYaml son perezosas y solo iterarán sobre el siguiente documento cuando se lo soliciten. Para archivos muy grandes en los que se planea manejar los documentos de forma independiente, instanciar el archivo completo antes del procesamiento puede resultar prohibitivo. Por lo tanto, en YAML.pm, ocasionalmente uno debe dividir un archivo en documentos y analizarlos individualmente. YAML facilita esto, ya que simplemente requiere dividir en el marcador de fin de documento, que se define como tres puntos al comienzo de una línea seguidos de un espacio en blanco (y posiblemente un comentario). Este marcador está prohibido en el contenido. [42]

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: [43] [44] [45]

Las fallas percibidas y la complejidad de YAML han llevado al surgimiento de alternativas más estrictas como StrictYAML y NestedText. [46]

Véase también

Referencias

  1. ^ ab Polli, Roberto; Wilde, Erik; Aro, Eemeli (2024-02-21). Tipo de medio YAML (informe). Grupo de trabajo de ingeniería de Internet. Archivado desde el original el 2024-02-21 . Consultado el 2024-02-21 .
  2. ^ "yaml". Documentación para desarrolladores de Apple: Identificadores de tipo uniforme . Apple Inc . Archivado desde el original el 2023-05-22 . Consultado el 2023-05-22 .
  3. ^ abcd "Yet Another Markup Language (YAML) 1.0 / Working Draft". 10 de diciembre de 2001. Archivado desde el original el 10 de julio de 2019. Consultado el 28 de mayo de 2019 .
  4. ^ abc "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org . Archivado desde el original el 24 de enero de 2019 . Consultado el 29 de mayo de 2019 .
  5. ^ "Tipos integrados: documentación de Python 3.9.6". docs.python.org . Archivado desde el original el 2020-06-14 . Consultado el 2021-08-19 .
  6. ^ "Objetos integrados estándar - JavaScript | MDN". developer.mozilla.org . Archivado desde el original el 2021-01-19 . Consultado el 2021-08-19 .
  7. ^ corob-msft (17 de agosto de 2021). «Tipos integrados (C++)». docs.microsoft.com . Archivado desde el original el 13 de junio de 2024 . Consultado el 19 de agosto de 2021 .
  8. ^ "El sitio web oficial de YAML". yaml.org . Archivado desde el original el 2021-03-18 . Consultado el 2019-02-05 .
  9. ^ "Configuración de Vim para la edición de YAML". arthurkoziel.com . Archivado desde el original el 23 de noviembre de 2021 . Consultado el 20 de diciembre de 2021 .
  10. ^ "Modo Yaml". EmacsWiki. 12 de junio de 2015. Archivado desde el original el 8 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  11. ^ aukaost. "Pretty YAML - Paquetes - Control de paquetes". Packagecontrol.io. Archivado desde el original el 8 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  12. ^ "yaml | Complementos, paquetes y productos de Eclipse - Eclipse Marketplace". Marketplace.eclipse.org. Archivado desde el original el 8 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  13. ^ Ruth Kusterer. "NetBeans IDE - Desarrollo en Ruby y Ruby on Rails". Netbeans.org. Archivado desde el original el 19 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  14. ^ "YAML no es un lenguaje de marcado". 24 de septiembre de 2006. Archivado desde el original el 24 de septiembre de 2006.
  15. ^ Evans, Clark (11 de mayo de 2001). "YAML Draft 0.1". Grupos de tecnología de Yahoo!: sml-dev. Archivado desde el original el 2001-06-03 . Consultado el 2019-03-21 .
  16. ^ ab "YAML Ain't Markup Language: About" (YAML no es un lenguaje de marcado: información) . Archivado desde el original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  17. ^ "Yet Another Markup Language (YAML) 1.0". YAML.org . Archivado desde el original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  18. ^ "Yet Another Markup Language (YAML) 1.0". stackoverflow.com . Archivado desde el original el 23 de abril de 2021 . Consultado el 24 de marzo de 2021 .
  19. ^ "Tarjeta de referencia de YAML 1.1". YAML.org . Archivado desde el original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  20. ^ "YAML Ain't Markup Language (YAML) Version 1.2" (en inglés). YAML.org . Archivado desde el original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  21. ^ "Especificación YAML v1.2.2 Sección 6.1. Espacios de sangría". Archivado desde el original el 2023-03-12 . Consultado el 2023-03-12 .
  22. ^ "YAML Ain't Markup Language (YAML) Version 1.2" (en inglés). YAML.org . Archivado desde el original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  23. ^ "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 .
  24. ^ ab "Especificación de estructuras YAML 1.2". YAML.org . Archivado desde el original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  25. ^ "Extensible Markup Language (XML) 1.0 (Segunda edición)". W3.org . Archivado desde el original el 15 de mayo de 2022 . Consultado el 27 de mayo de 2015 .
  26. ^ "Cursos gratuitos | Introducción a YAML - Un curso práctico". Insidelearn . Archivado desde el original el 2022-08-26 . Consultado el 2022-08-04 .
  27. ^ "YAML". Teknik Informatika . 4 de agosto de 2022. Archivado desde el original el 26 de diciembre de 2022 . Consultado el 4 de agosto de 2022 .
  28. ^ "Documentación de PyYAML, carga de YAML". Pyyaml.org . Archivado desde el original el 24 de septiembre de 2016. Consultado el 28 de septiembre de 2016 .
  29. ^ "Ain't Markup Language (YAML) Versión 1.1". YAML.org . Archivado desde el original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  30. ^ En el repositorio de tipos YAML se enumeran estructuras lógicas adicionales de uso opcional. "Tipos independientes del lenguaje para YAML versión 1.1". YAML.org . Archivado desde el original el 14 de abril de 2019 . 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 compatibles. "El uso de estas etiquetas no es obligatorio".
  31. ^ "YAML Ain't Markup Language (YAML) Version 1.1" (en inglés). YAML.org . Archivado desde el original el 2024-06-13 . Consultado el 2019-05-29 .
  32. ^ "Ain't Markup Language (YAML) Versión 1.1". YAML.org . Archivado desde el original el 2024-06-13 . Consultado el 2019-05-29 .
  33. ^ "YAML Ain't Markup Language (YAML) Version 1.1" (en inglés). YAML.org . Archivado desde el original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  34. ^ Las incompatibilidades eran las siguientes: JSON permite conjuntos de caracteres extendidos como UTF-32 y tenía una sintaxis de escape de caracteres Unicode incompatible con YAML; YAML requería un espacio después de separadores como coma, igual y dos puntos, mientras que JSON no. Algunas implementaciones no estándar de JSON extienden la gramática para incluir /*...*/los comentarios de Javascript. El manejo de tales casos extremos puede requerir un preprocesamiento ligero de JSON antes de analizarlo como YAML en línea. Véase también [1] Archivado el 29 de agosto de 2013 en Wayback Machine .
  35. ^ Análisis de JSON con SYCK Archivado el 17 de septiembre de 2016 en Wayback Machine . Tenga en cuenta que, por ejemplo, el analizador YAML de Symfony no admite saltos de línea dentro de las estructuras [] o {}, lo que supone una incompatibilidad importante con JSON.
  36. ^ "YAML vs JSON vs XML en Go" . Medium . 15 de junio de 2021. Archivado desde el original el 24 de enero de 2024 . Consultado el 31 de enero de 2024 .
  37. ^ "Diferencias entre YAML y JSON". Baeldung . 9 de julio de 2020. Archivado desde el original el 7 de marzo de 2023 . Consultado el 7 de marzo de 2023 .
  38. ^ Siebenmann, Chris (30 de abril de 2019). "Mi problema con el uso de espacios en blanco en YAML". Archivado desde el original el 1 de diciembre de 2023. Consultado el 6 de octubre de 2023 .
  39. ^¿ Qué le pasa a TOML?
  40. ^ [email protected], correo del 27 de junio de 2018.
  41. ^ "Gramática YAML para Lexepars". GitHub . Archivado desde el original el 17 de septiembre de 2020 . Consultado el 20 de febrero de 2020 .
  42. ^ "YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers" (Marcadores de documentos de YAML no es un lenguaje de marcado [YAML], versión 1.2 n.° 9.1.2)". YAML.org . Archivado desde el original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  43. ^ abcde Tournoij, Martin (4 de septiembre de 2016). «YAML: probablemente no sea tan bueno después de todo». Archivado desde el original el 10 de mayo de 2019. Consultado el 16 de mayo de 2019 .
  44. ^ "Eso es mucho YAML". Archivado desde el original el 2 de marzo de 2019 . Consultado el 16 de mayo de 2019 .
  45. ^ "YAML apesta". GitHub . Archivado desde el original el 7 de abril de 2019 . Consultado el 16 de mayo de 2019 .
  46. ^ ab "El problema de Noruega: por qué StrictYAML se niega a realizar tipado implícito y usted también debería hacerlo". Archivado desde el original el 21 de febrero de 2020. Consultado el 3 de junio de 2020 .
  47. ^ "Matriz de prueba YAML". Archivado desde el original el 16 de julio de 2020. Consultado el 3 de abril de 2020 .

Enlaces externos