Articulo de referencia

YAML

{{Cite report |url=https://datatracker.ietf.org/doc/rfc9512/ |title=YAML Media Type |last=Polli |first=Roberto |last2=Wilde |first2=Erik |date=2024-02-21 |publisher=Internet Eng...

YAML ( / ˈ j æ m əl / YAM -əl) es unlenguaje de serialización de datoslegible por humanos. Se usa comúnmente paraarchivos de configuracióny en aplicaciones donde se almacenan o transmiten datos. YAML apunta a muchas de las mismas aplicaciones de comunicación queel Lenguaje de Marcado Extensible(XML), pero tiene unasintaxisque difiere intencionalmente delLenguaje de Marcado Generalizado Estándar(SGML). [ 3 ] Usade Pythonpara indicar anidamiento [ 3 ] y no requiere comillas alrededor de la mayoría de los valores de cadena (también admiteel estiloJSONyse puede mezclar 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 hashmaps). 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 definidos 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 de YAML (similar a XML en SOAP ). [ 3 ] YAML está diseñado para ser leído y escrito en flujos , una característica inspirada en SAX . [ 3 ] --- 

Muchos lenguajes de programación ofrecen soporte para leer y escribir YAML. [ 8 ] Algunos editores de código fuente como Vim , [ 9 ] Emacs , [ 10 ] y diversos entornos de desarrollo integrados [ 11 ] [ 12 ] [ 13 ] cuentan con funciones que facilitan la edición de YAML, como el plegado de estructuras anidadas o el resaltado automático de errores de sintaxis.

La extensión de archivo recomendada oficialmente para archivos YAML se ha establecido .yamldesde 2006. [ 14 ] En 2024, se finalizó 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 (Otro lenguaje de marcado más) , [ 17 ] porque se lanzó en una era que vio una proliferación de lenguajes de marcado para presentación y conectividad (HTML, XML, SGML, etc.). Su nombre inicial pretendía ser una referencia irónica [ 18 ] al panorama tecnológico, haciendo referencia a su propósito como un lenguaje de marcado con la construcción yet another , pero luego fue reutilizado entre diciembre  de 2001 [ 19 ] y abril  de 2002 [ 20 ] como YAML Ain't Markup Language (YAML no es un lenguaje de marcado ), un acrónimo recursivo , para distinguir su propósito como orientado a datos en lugar de marcado de documentos. [ 21 ]

Versiones

Diseño

Sintaxis

Una guía rápida y la especificación completa están disponibles en el sitio oficial. [ 22 ] A continuación se presenta 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 siguientes sistemas de codificación : UTF-8 , UTF-16 o UTF-32 . (Aunque UTF-32 no es obligatorio, es necesario para que un analizador sea compatible con JSON ). [ 23 ]

  • La sangría con espacios en blanco se utiliza para indicar estructura; sin embargo, no se permiten caracteres de tabulación como parte de dicha sangría. [ 24 ]
  • Los comentarios comienzan con el signo de número ( #), pueden comenzar en cualquier parte de una línea y continuar hasta el final de la misma. Los comentarios deben estar separados de otros tokens por caracteres de espacio en blanco. [ 25 ] Si #los caracteres aparecen dentro de una cadena, entonces son #literales de signo de número ( ).
  • Los miembros de la lista se indican mediante un guion 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 .
  • Una entrada de matriz asociativa se representa usando dos puntos espacio en el formato clave: valor, con una entrada por línea. YAML requiere que los dos puntos vayan seguidos de un espacio para que las cadenas de estilo URL, como , http://www.wikipedia.orgpuedan representarse sin necesidad de ir entre comillas.
    • Se puede usar un signo de interrogación delante de una clave, en el formato "?clave: valor", para permitir que la clave contenga guiones iniciales, corchetes, etc., sin comillas.
    • También se puede especificar una matriz asociativa mediante texto encerrado entre llaves ( {...}), con las claves separadas de los valores por dos puntos y las entradas separadas por comas (no se requieren espacios para mantener la compatibilidad con JSON).
  • Las cadenas (un tipo de escalar en YAML) normalmente no van entre comillas, pero pueden ir entre comillas dobles ( "), o comillas simples ( ').
    • Dentro de las comillas dobles, los caracteres especiales pueden representarse con secuencias de escape al 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 doble ( '') que denota la comilla simple misma, como en 'don''t'.
  • Los escalares de bloque están delimitados con sangría con modificadores opcionales para preservar ( |) o plegar ( >) saltos de línea.
  • Varios documentos dentro de una misma secuencia están separados por tres guiones ( ---).
    • Tres puntos ( ...) finalizan opcionalmente un documento dentro de un flujo.
  • Los nodos repetidos se denotan inicialmente con un signo de ampersand ( &&) y posteriormente se referencian con un asterisco ( *).
  • Los nodos pueden etiquetarse con un tipo o etiqueta usando un doble signo de exclamación ( !!) seguido de una cadena, que puede expandirse en una URI.
  • Los documentos YAML en un flujo pueden ir precedidos de "directivas" compuestas por un signo de porcentaje ( %) seguido de un nombre y parámetros separados por espacios. En YAML 1.1 se definen dos directivas:
    • 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 pueden utilizarse posteriormente en etiquetas de tipo de nodo.

Componentes básicos

El formato de bloque convencional utiliza un guion y un espacio para comenzar un nuevo elemento en la lista.

--- # Películas favoritas : Casablanca , Con la muerte en los talones , El hombre que no estaba allí

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

--- # Lista de la compra [ leche , pastel de calabaza , huevos , zumo ]

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

--- # Bloque con sangría nombre : John Smith edad : 33 --- # Bloque en línea { nombre : John Smith , edad : 33 }

Las cadenas no requieren comillas. Hay dos maneras de escribir cadenas de varias líneas: una que conserva los saltos de línea (usando el |carácter) y otra que los elimina (usando 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 subió a un autobús a Darjeeling. En la puerta decía : "Por favor, no se siente en el suelo". Así que él se sentó cuidadosamente en el techo.

Por defecto, se eliminan la sangría inicial (de la primera línea) y los espacios en blanco finales, aunque se puede especificar explícitamente otro comportamiento.

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

El texto plegado convierte los saltos de línea en espacios y elimina los espacios en blanco iniciales.

--- # Los Smith - { 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 pueden combinarse. El primer ejemplo es una lista de objetos clave-valor: todas las personas de la familia Smith. El segundo las lista por género; se trata de un objeto clave-valor que contiene dos listas.

Componentes avanzados

Las características que distinguen a YAML de las capacidades de otros lenguajes de serialización de datos son las estructuras [ 27 ] y los datos y las claves compuestas.

Las estructuras YAML permiten almacenar varios documentos dentro de un solo archivo, usar referencias para nodos repetidos y usar nodos arbitrarios como claves. [ 27 ]

Para mayor claridad, concisión y para evitar errores de entrada de datos, YAML proporciona anclas de nodo (usando &) y referencias (usando *). Las referencias al ancla 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 la que se hace referencia a dos pasos sin describirlos completamente.

--- # Protocolos de secuenciación para cirugía ocular láser - paso : &id001 # define la etiqueta de anclaje &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 de pulso : 5.0 duración del pulso : 10 repetición : 500 tamaño del punto : 2 mm - Instrumento 1 : *id001 # se refiere al primer paso (con el ancla &id001) - Instrumento 2 : *id002 # se refiere al segundo paso

La tipificación explícita de datos rara vez se observa 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 básicos son aquellos que se espera que existan en cualquier analizador (por ejemplo, números de coma flotante, enteros, cadenas, listas, mapas, etc.). Muchos tipos de datos más avanzados, como los datos binarios, están definidos en la especificación YAML, pero no son compatibles con todas las implementaciones. Finalmente, YAML define una forma de extender localmente las definiciones de tipos de datos para dar cabida a clases, estructuras o primitivas definidas por el usuario (por ejemplo, números de coma flotante de precisión cuádruple).

YAML detecta automáticamente el tipo de dato de la entidad, pero a veces es necesario especificarlo explícitamente. La situación más común se da cuando una cadena de una sola palabra que parece un número, un valor booleano o una etiqueta requiere desambiguación, ya sea encerrándola entre comillas o utilizando una etiqueta de tipo de dato explícita.

--- a : 123 # un entero b : "123" # una cadena, desambiguada por comillas c : 123.0 # un flotante d : !!float 123 # también un flotante 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 booleano Verdadero (yaml1.1), cadena "Sí" (yaml1.2) h : Sí, no tenemos plátanos # una cadena, "Sí" y "No" desambiguadas por el contexto.

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

YAML admite claves compuestas, que constan de múltiples valores. Dichas claves son útiles para transformaciones de coordenadas, identificadores de múltiples campos, casos de prueba con condiciones compuestas, etc. [ 28 ]

--- # Transformación entre dos sistemas de coordenadas transform : { x : 1 , y : 2 }: { x : 3 , y : 4 } { x : 5 , y : 6 }: { x : 7 , y : 8 }

Ejemplo

La jerarquía de la estructura de datos se mantiene mediante la indentación del contorno.

--- recibo : Factura de compra de Oz-Ware fecha : 2012-08-06 cliente : nombre : Dorothy apellido : Galeartículos : - part_no : A4786 descrip : Cubo de agua (lleno) precio : 1.47 cantidad : 4- part_no : E1628 descrip : Pantuflas de tacón alto "Ruby" size : 8 price : 133.7 quantity : 1Factura a : &id001 Calle : | 123 Tornado Alley Suite 16 Ciudad : East Centerville Estado : KSenviar a : *id001specialDelivery : > Sigue el camino de baldosas amarillas hasta la Ciudad Esmeralda. No le hagas caso al hombre detrás de la cortina. ...

Tenga en cuenta que las cadenas no requieren 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 izquierda y los elementos anidados jerárquicamente tengan mayor sangría. Este documento de ejemplo 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 a su vez 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 anclaje ( &) y referencia ( *). Se pueden agregar líneas en blanco opcionales para facilitar la lectura. Varios documentos pueden existir 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 de flujo sin cerrar la tubería).

Características

Delimitación con sangría

Debido a que YAML se basa principalmente en la indentación de esquema 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 se pueden incrustar documentos XML, JSON o incluso YAML dentro de un documento YAML simplemente indentándolo en un literal de bloque (usando |o >):

--- ejemplo : > El HTML se convierte en YAML sin modificar mensaje : |<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 insertar en JSON entrecomillando y escapando todas las comillas internas. YAML se puede insertar en XML escapando los caracteres reservados ( <, >, &, ', ") y convirtiendo los espacios en blanco, o insertá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 donde cada nodo hijo tiene un único padre, YAML también ofrece un esquema relacional simple que permite que se hagan referencias a datos idénticos repetidos desde dos o más puntos en el árbol en lugar de ingresarlos redundantemente en esos puntos. Esto es similar a la funcionalidad IDREF integrada en XML. [ 29 ] El analizador YAML luego expande estas referencias en las estructuras de datos completas que implican cuando se leen, por lo que cualquier programa que utilice el analizador no tiene que estar al tanto 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 archivos de configuración o protocolos de procesamiento donde muchos parámetros permanecen iguales en una serie secuencial de registros mientras que solo unos pocos varían. Un ejemplo es que los registros "enviar a" y "facturar a" en una factura son casi siempre los mismos datos.

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 un escollo tan conocido que la falta de un lenguaje de comandos asociado en YAML puede ser una ventaja relativa en términos de seguridad.

Sin embargo, YAML permite etiquetas específicas del lenguaje, de modo que un analizador que admita dichas etiquetas puede crear objetos locales arbitrarios. Cualquier analizador YAML que permita la ejecución de instanciaciones de objetos sofisticadas 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 desencadenar un comportamiento inesperado, por ejemplo, si la clase utiliza operadores sobrecargados. Esto puede conducir a la ejecución de código Perl arbitrario. [ 30 ]

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

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". [ 32 ] Las estructuras lógicas principales en un documento de instancia YAML son escalares, secuencias y asignaciones. [ 33 ] La especificación YAML también indica algunas restricciones básicas que se aplican a estas estructuras lógicas principales. Por ejemplo, según la especificación, las claves de asignación no tienen un orden. En todos los casos en que el orden de los nodos sea significativo, se debe usar una secuencia. [ 34 ]

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. [ 35 ] Finalmente, la especificación YAML define un modelo de información o "grafo de representación", que debe crearse durante el procesamiento tanto para las operaciones de volcado como de carga , aunque esta representación no tiene por qué estar disponible para el usuario a través de una API. [ 36 ]

Comparación con otros formatos de serialización

Comparación con JSON

La sintaxis JSON es la base de YAML versión 1.2, que se promulgó con el propósito expreso de hacer que YAML "cumpla con JSON como un subconjunto oficial". [ 4 ] Aunque las versiones anteriores de YAML no eran estrictamente compatibles, [ 37 ] las discrepancias rara vez eran perceptibles, y la mayoría de los documentos JSON pueden ser analizados por algunos analizadores de YAML como Syck. [ 38 ] 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 pueden escribirse en estilo en línea como JSON, este no es un estilo YAML recomendado excepto cuando ayuda a la claridad.

YAML cuenta con muchas características adicionales que no están presentes en JSON, incluyendo 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. [ 39 ] [ 40 ]

Comparación con TOML

TOML se diseñó como una mejora del formato de archivo .ini . YAML utiliza un mínimo de caracteres indicadores en comparación con el estricto requisito de TOML de comillas y corchetes. El uso de una sangría significativa en YAML se ha contrastado con la notación de puntos de los nombres de claves y tablas de TOML para transmitir la misma estructura semántica. Existen diferentes opiniones sobre qué convención produce archivos de configuración más legibles. [ 41 ] [ 42 ]

Comparación con XML

YAML carece del concepto de atributos de etiqueta que se encuentran en XML. En cambio, YAML tiene declaraciones de tipo extensibles (incluidos tipos de clase para objetos).

YAML no posee descriptores de esquema de documento definidos por el lenguaje XML que permitan, por ejemplo, la autovalidación de un documento. Sin embargo, existen varios lenguajes de descriptores de esquema definidos externamente para YAML (como Doctrine , Kwalify y Rx) que cumplen esa función. Además, la semántica proporcionada por las declaraciones de tipo definidas por el lenguaje YAML en el propio documento YAML suele reducir la necesidad de un validador en situaciones sencillas y comunes. Adicionalmente, YAXML , que representa estructuras de datos YAML en XML, permite aplicar a YAML importadores de esquemas XML y mecanismos de salida como XSLT .

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 fácilmente mediante comandos de impresión que muestran tanto los datos como la decoración específica de YAML. Sin embargo, para volcar datos jerárquicos complejos o variables, es preferible utilizar un generador de YAML específico . Del mismo modo, 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 generadores y analizadores de YAML para muchos lenguajes populares. La mayoría están escritos en el propio lenguaje nativo. Algunos son enlaces de lenguaje de la biblioteca C libyaml ; pueden ser más rápidos. Existía otra biblioteca C, llamada Syck , escrita y abandonada por why the lucky stiff : no recibe mantenimiento, no hay un paquete de código fuente autorizado y el sitio web ha sido pirateado. Por lo tanto, la única biblioteca C recomendable es libyaml . Fue desarrollada originalmente por Kirill Simonov. En 2018, el desarrollo fue retomado por los nuevos mantenedores Ian Cordasco e Ingy döt Net. [ 43 ]

Los programadores de C++ pueden elegir entre la biblioteca C libyaml y la biblioteca C++ libyaml-cpp . Ambas tienen bases de código completamente independientes y API completamente diferentes . La biblioteca libyaml-cpp aún conserva el número de versión principal 0, lo que indica que la API puede cambiar en cualquier momento, como sucedió después de la versión 0.3. Existe una implementación centrada en la gramática escrita en C#, con el objetivo de extenderla a los elementos anidados. [ 44 ]

Algunas implementaciones de YAML, como YAML.pm de Perl, cargan un archivo completo (flujo) y lo analizan en bloque . Otras implementaciones, como PyYaml, son perezosas e iteran sobre el siguiente documento solo cuando se solicita. Para archivos muy grandes en los que se planea manejar los documentos de forma independiente, instanciar el archivo completo antes de procesarlo puede ser prohibitivo. Por lo tanto, en YAML.pm, ocasionalmente es necesario dividir un archivo en documentos y analizarlos individualmente. YAML facilita esto, ya que simplemente requiere dividir por 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. [ 45 ]

Crítica

YAML ha sido criticado por su significativo espacio en blanco , características confusas, valores predeterminados inseguros y su especificación compleja y ambigua: [ 46 ] [ 47 ] [ 48 ]

  • En lenguajes dinámicos (Python, Ruby, PHP), los archivos de configuración pueden ejecutar comandos sin que los usuarios se den cuenta:
!!python/object/apply:os.system argumentos : [ 'ls /' ]

En los lenguajes estáticos y compilados, esta instanciación es compleja de lograr y, con bastante frecuencia, no se implementa.

  • Editar archivos YAML grandes es difícil, ya que los errores de indentación pueden pasar desapercibidos. [ 46 ]
  • La autodetección de tipos es una fuente de errores. Por ejemplo, los valores sin comillas Yesse Noconvierten a booleanos; los números de versión del software podrían convertirse a números de coma flotante. [ 46 ] [ 49 ]
  • Los archivos truncados a menudo se interpretan como archivos YAML válidos debido a la ausencia de terminadores.
  • La complejidad del estándar dio lugar a implementaciones inconsistentes y a que el lenguaje no fuera portable. [ 46 ] [ 50 ]

Los defectos percibidos y la complejidad de YAML han llevado al surgimiento de alternativas más estrictas como StrictYAML y NestedText . [ 49 ]

Véase también

Referencias

  1. 1 2 Polli, Roberto; Wilde, Erik; Aro, Eemeli (2024-02-21). YAML Media Type (Informe). Internet Engineering Task Force. Archivado del original el 2024-02-21 . Recuperado el 2024-02-21 .
  2. "yaml" . Documentación para desarrolladores de Apple: Identificadores de tipo uniforme . Apple Inc. Archivado del original el 22 de mayo de 2023. Consultado el 22 de mayo de 2023 .
  3. 1 2 3 4 "Yet Another Markup Language (YAML) 1.0 / Borrador de trabajo" . 10 de diciembre de 2001. Archivado del original el 10 de julio de 2019. Recuperado el 28 de mayo de 2019 .
  4. 1 2 3 "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Archivado del 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 del original el 14 de junio de 2020. Consultado el 19 de agosto de 2021 .
  6. "Objetos integrados estándar - JavaScript | MDN" . developer.mozilla.org . Archivado del original el 19 de enero de 2021. Consultado el 19 de agosto de 2021 .
  7. corob-msft (17 de agosto de 2021). "Tipos integrados (C++)" . docs.microsoft.com . Archivado del original el 13 de junio de 2024. Consultado el 19 de agosto de 2021 .
  8. "El sitio web oficial de YAML" . yaml.org . Archivado del original el 18 de marzo de 2021. Consultado el 5 de febrero de 2019 .
  9. "Configuración de Vim para la edición de YAML" . arthurkoziel.com . Archivado del original el 23/11/2021 . Consultado el 20/12/2021 .
  10. "Modo Yaml" . EmacsWiki. 12 de junio de 2015. Archivado del original el 8 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  11. aukaost. "Pretty YAML - Packages - Package Control" . Packagecontrol.io. Archivado del 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 del original el 8 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  13. Ruth Kusterer. "NetBeans IDE - Desarrollo con Ruby y Ruby on Rails" . Netbeans.org. Archivado del original el 19 de noviembre de 2016. Consultado el 5 de diciembre de 2016 .
  14. "YAML no es lenguaje de marcado" . 24 de septiembre de 2006. Archivado del original el 24 de septiembre de 2006.
  15. Evans, Clark (11 de mayo de 2001). "YAML Draft 0.1" . Grupos de Yahoo! Tech: sml-dev. Archivado del original el 3 de junio de 2001. Consultado el 21 de marzo de 2019 .
  16. 1 2 "YAML no es lenguaje de marcado: Acerca de" . YAML.org . Archivado del 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 del 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 del original el 23 de abril de 2021. Consultado el 24 de marzo de 2021 .
  19. "Yet Another Markup Language (YAML) 1.0 — Borrador de trabajo" . YAML.org . 10 de diciembre de 2001. Archivado del original el 10 de julio de 2019. Consultado el 8 de octubre de 2025 .
  20. "YAML no es lenguaje de marcado (YAML) 1.0 — Borrador de trabajo" . YAML.org . 7 de abril de 2002. Archivado del original el 13 de enero de 2022. Consultado el 8 de octubre de 2025 .
  21. "YAML no es un lenguaje de marcado: Acerca de" . YAML.org . Archivado del original el 14 de abril de 2019. Consultado el 8 de octubre de 2025 .
  22. " Tarjeta de referencia de YAML 1.1" . YAML.org . Archivado del original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 . 
  23. "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Archivado del original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  24. "Especificación YAML v1.2.2 Sección 6.1. Espacios de sangría" . Archivado del original el 12 de marzo de 2023. Consultado el 12 de marzo de 2023 .
  25. "YAML no es lenguaje de marcado (YAML) versión 1.2" . YAML.org . Archivado del original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  26. "Aplicaciones de gestión basadas en la nube" . JigoCloud.com . Archivado del original el 17 de septiembre de 2016. Consultado el 28 de septiembre de 2016 .
  27. 1 2 "Especificación de estructuras YAML 1.2" . YAML.org . Archivado del original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  28. Wyngs, Bourumir. "serde-yaml-bw" . GitHub . Consultado el 25 de julio de 2025 .
  29. "Lenguaje de marcado extensible (XML) 1.0 (Segunda edición)" . W3.org . Archivado del original el 15 de mayo de 2022. Consultado el 27 de mayo de 2015 .
  30. "YAML" . Teknik Informatika . 4 de agosto de 2022. Archivado del original el 26 de diciembre de 2022. Consultado el 4 de agosto de 2022 .
  31. "Documentación de PyYAML, Carga de YAML" . Pyyaml.org . Archivado del original el 24 de septiembre de 2016. Consultado el 28 de septiembre de 2016 .
  32. "Ain't Markup Language (YAML) Versión 1.1" . YAML.org . Archivado del original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  33. 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 del 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 que cumplen con el estándar. "El uso de estas etiquetas no es obligatorio".
  34. "YAML no es lenguaje de marcado (YAML) versión 1.1" . YAML.org . Archivado del original el 13 de junio de 2024. Consultado el 29 de mayo de 2019 .
  35. "Ain't Markup Language (YAML) Versión 1.1" . YAML.org . Archivado del original el 13 de junio de 2024. Consultado el 29 de mayo de 2019 .
  36. "YAML no es lenguaje de marcado (YAML) versión 1.1" . YAML.org . Archivado del original el 14 de abril de 2019. Consultado el 29 de mayo de 2019 .
  37. 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. Algunas implementaciones no estándar de JSON extienden la gramática para incluir/*...*/los comentarios de JavaScript. El manejo de estos casos límite puede requerir un ligero preprocesamiento del JSON antes de analizarlo como YAML en línea. Véase también Archivado el 29 de agosto de 2013 en Wayback Machine .
  38. Análisis de JSON con SYCK Archivado el 17/09/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 importante incompatibilidad con JSON.
  39. "YAML vs JSON vs XML en Go" . Medium . 15 de junio de 2021. Archivado del original el 24 de enero de 2024. Consultado el 31 de enero de 2024 .
  40. "Diferencias entre YAML y JSON" . Baeldung . 9 de julio de 2020. Archivado del original el 7 de marzo de 2023. Consultado el 7 de marzo de 2023 .
  41. Siebenmann, Chris (30 de abril de 2019). "Mi problema con el uso de espacios en blanco en YAML" . Archivado del original el 1 de diciembre de 2023. Consultado el 6 de octubre de 2023 .
  42. ¿Qué tiene de malo TOML?
  43. yaml-core@lists.sourceforge.net, correo del 27 de junio de 2018.
  44. "Gramática YAML para Lexepars" . GitHub . Archivado del original el 17 de septiembre de 2020. Consultado el 20 de febrero de 2020 .
  45. "YAML no es lenguaje de marcado (YAML) Versión 1.2 # 9.1.2 Marcadores de documentos" . YAML.org . Archivado del original el 24 de enero de 2019. Consultado el 29 de mayo de 2019 .
  46. 1 2 3 4 Tournoij, Martin (4 de septiembre de 2016). "YAML: probablemente no tan bueno después de todo" . Archivado del original el 10 de mayo de 2019. Recuperado el 16 de mayo de 2019 .
  47. "Eso es mucho YAML" . Archivado del original el 2 de marzo de 2019. Consultado el 16 de mayo de 2019 .
  48. "YAML apesta" . GitHub . Archivado del original el 7 de abril de 2019. Consultado el 16 de mayo de 2019 .
  49. 1 2 "El problema de Noruega: por qué StrictYAML se niega a realizar tipado implícito y usted también debería hacerlo" . Archivado del original el 21 de febrero de 2020. Recuperado el 3 de junio de 2020 .
  50. "Matriz de prueba YAML" . Archivado del original el 16 de julio de 2020. Consultado el 3 de abril de 2020 .
  • Sitio web oficial