YAML explained

YAML
Noextcode:on
Extensions:,
Nomimecode:on
Mime:[1]
Uniform Type:public.yaml[2]
Latest Release Version:1.2 (Revision 1.2.2)
Genre:Data interchange
Standards:-->
Open:Yes

YAML (; see) is a human-readable data serialization language. It is commonly used for configuration files and in applications where data are being stored or transmitted. YAML targets many of the same communications applications as Extensible Markup Language (XML) but has a minimal syntax that intentionally differs from Standard Generalized Markup Language (SGML). It uses Python-style indentation to indicate nesting[3] and does not require quotes around most string values (it also supports JSON style and } mixed in the same file).[4]

Custom data types are allowed, but YAML natively encodes scalars (such as strings, integers, and floats), lists, and associative arrays (also known as maps, dictionaries or hashes). These data types are based on the Perl programming language, though all commonly used high-level programming languages share very similar concepts.[5] [6] [7] The colon-centered syntax, used for expressing key-value pairs, is inspired by electronic mail headers as defined in, and the document separator is borrowed from MIME . Escape sequences are reused from C, and whitespace wrapping for multi-line strings is inspired by HTML. Lists and hashes can contain nested lists and hashes, forming a tree structure; arbitrary graphs can be represented using YAML aliases (similar to XML in SOAP). YAML is intended to be read and written in streams, a feature inspired by SAX.

Support for reading and writing YAML is available for many programming languages.[8] Some source-code editors such as Vim,[9] Emacs,[10] and various integrated development environments[11] [12] [13] have features that make editing YAML easier, such as folding up nested structures or automatically highlighting syntax errors.

The official recommended filename extension for YAML files has been since 2006.[14] In 2024, the MIME type has been finalized.[1]

History and name

YAML (rhymes with camel) was first proposed by Clark Evans in 2001,[15] who designed it together with Ingy döt Net[16] and Oren Ben-Kiki.[16] Originally YAML was said to mean Yet Another Markup Language,[17] because it was released in an era that saw a proliferation of markup languages for presentation and connectivity (HTML, XML, SGML, etc). Its initial name was intended as a tongue-in-cheek reference[18] to the technology landscape, referencing its purpose as a markup language with the yet another construct, but it was then repurposed as YAML Ain't Markup Language, a recursive acronym, to distinguish its purpose as data-oriented, rather than document markup.

Versions

Version Release date
YAML 1.0 29 January 2004
YAML 1.1 18 January 2005
YAML 1.2.0 21 July 2009
YAML 1.2.1 1 October 2009
YAML 1.2.2 1 October 2021

Design

Syntax

A cheat sheet and full specification are available at the official site.[19] The following is a synopsis of the basic elements.

YAML accepts the entire Unicode character set, except for some control characters, and may be encoded in any one of UTF-8, UTF-16 or UTF-32. (Though UTF-32 is not mandatory, it is required for a parser to have JSON compatibility.)[20]

Basic components

Conventional block format uses a hyphen+space to begin a new item in list.--- # Favorite movies- Casablanca- North by Northwest- The Man Who Wasn't There

Optional inline format is delimited by comma+space and enclosed in brackets (similar to JSON).[23] --- # Shopping list[milk, pumpkin pie, eggs, juice]

Keys are separated from values by a colon+space. Indented blocks, common in YAML data files, use indentation and new lines to separate the key/value pairs. Inline Blocks, common in YAML data streams, use comma+space to separate the key/value pairs between braces.--- # Indented Block name: John Smith age: 33--- # Inline Block

Strings do not require quotation marks. There are two ways to write multi-line strings, one preserving newlines (using the | character) and one that folds the newlines (using the character), both followed by a newline character.

data: | There once was a tall man from Ealing Who got on a bus to Darjeeling It said on the door "Please don't sit on the floor" So he carefully sat on the ceiling

By default, the leading indentation (of the first line) and trailing whitespace are stripped, though other behavior can be explicitly specified.

data: > Wrapped text will be folded into a single paragraph

Blank lines denote paragraph breaksFolded text converts newlines to spaces and removes leading whitespace.

--- # The Smiths- - name: Mary Smith age: 27- [name, age]: [Rae Smith, 4] # sequences as keys are supported--- # People, by gendermen: [John Smith, Bill Jones]women: - Mary Smith - Susan Williams

Objects and lists are important components in yaml and can be mixed. The first example is a list of key-value objects, all people from the Smith family. The second lists them by gender; it is a key-value object containing two lists.

Advanced components

Two features that distinguish YAML from the capabilities of other data-serialization languages are structures[24] and data typing.

YAML structures enable storage of multiple documents within a single file, usage of references for repeated nodes, and usage of arbitrary nodes as keys.[24]

For clarity, compactness, and avoiding data entry errors, YAML provides node anchors (using) and references (using). References to the anchor work for all data types (see the ship-to reference in the example below).

Below is an example of a queue in an instrument sequencer in which two steps are referenced without being fully described.

--- # Sequencer protocols for Laser eye surgery- step: &id001 # defines anchor label &id001 instrument: Lasik 2000 pulseEnergy: 5.4 pulseDuration: 12 repetition: 1000 spotSize: 1mm

- step: &id002 instrument: Lasik 2000 pulseEnergy: 5.0 pulseDuration: 10 repetition: 500 spotSize: 2mm- Instrument1: *id001 # refers to the first step (with anchor &id001)- Instrument2: *id002 # refers to the second step

Explicit data typing is seldom seen in the majority of YAML documents since YAML autodetects simple types. Data types can be divided into three categories: core, defined, and user-defined. Core are ones expected to exist in any parser (e.g. floats, ints, strings, lists, maps, ...). Many more advanced data types, such as binary data, are defined in the YAML specification but not supported in all implementations. Finally YAML defines a way to extend the data type definitions locally to accommodate user-defined classes, structures or primitives (e.g. quad-precision floats).

YAML autodetects the datatype of the entity, but sometimes one wants to cast the datatype explicitly. The most common situation is where a single-word string that looks like a number, boolean or tag requires disambiguation by surrounding it with quotes or using an explicit datatype tag.

---a: 123 # an integerb: "123" # a string, disambiguated by quotesc: 123.0 # a floatd: !!float 123 # also a float via explicit data type prefixed by (!!)e: !!str 123 # a string, disambiguated by explicit typef: !!str Yes # a string via explicit typeg: Yes # a boolean True (yaml1.1), string "Yes" (yaml1.2)h: Yes we have No bananas # a string, "Yes" and "No" disambiguated by context.

Not every implementation of YAML has every specification-defined data type. These built-in types use a double-exclamation sigil prefix . Particularly interesting ones not shown here are sets, ordered maps, timestamps, and hexadecimal. Here is an example of base64-encoded binary data.

---picture: !!binary | R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs=

Many implementations of YAML can support user-defined data types for object serialization. Local data types are not universal data types but are defined in the application using the YAML parser library. Local data types use a single exclamation mark .

Example

Data-structure hierarchy is maintained by outline indentation.

---receipt: Oz-Ware Purchase Invoicedate: 2012-08-06customer: first_name: Dorothy family_name: Gale

items: - part_no: A4786 descrip: Water Bucket (Filled) price: 1.47 quantity: 4

- part_no: E1628 descrip: High Heeled "Ruby" Slippers size: 8 price: 133.7 quantity: 1

bill-to: &id001 street: | 123 Tornado Alley Suite 16 city: East Centerville state: KS

ship-to: *id001

specialDelivery: > Follow the Yellow Brick Road to the Emerald City. Pay no attention to the man behind the curtain....

Notice that strings do not require enclosure in quotation marks. The specific number of spaces in the indentation is unimportant as long as parallel elements have the same left justification and the hierarchically nested elements are indented further. This sample document defines an associative array with 7 top level keys: one of the keys, "items", contains a 2-element list, each element of which is itself an associative array with differing keys. Relational data and redundancy removal are displayed: the "ship-to" associative array content is copied from the "bill-to" associative array's content as indicated by the anchor and reference labels. Optional blank lines can be added for readability. Multiple documents can exist in a single file/stream and are separated by . An optional can be used at the end of a file (useful for signaling an end in streamed communications without closing the pipe).

Features

Indented delimiting

Because YAML primarily relies on outline indentation for structure, it is especially resistant to delimiter collision. YAML's insensitivity to quotation marks and braces in scalar values means one may embed XML, JSON or even YAML documents inside a YAML document by simply indenting it in a block literal (using | or):

---example: > HTML goes into YAML without modificationmessage: |

"Three is always greater than two, even for large values of two"

--Author Unknown

date: 2007-06-01

YAML may be placed in JSON by quoting and escaping all interior quotation marks. YAML may be placed in XML by escaping reserved characters and converting whitespace, or by placing it in a CDATA section.

Non-hierarchical data models

Unlike JSON, which can only represent data in a hierarchical model with each child node having a single parent, YAML also offers a simple relational scheme that allows repeats of identical data to be referenced from two or more points in the tree rather than entered redundantly at those points. This is similar to the facility IDREF built into XML.[25] The YAML parser then expands these references into the fully populated data structures they imply when read in, so whatever program is using the parser does not have to be aware of a relational encoding model, unlike XML processors, which do not expand references. This expansion can enhance readability while reducing data entry errors in configuration files or processing protocols where many parameters remain the same in a sequential series of records while only a few vary. An example being that "ship-to" and "bill-to" records in an invoice are nearly always the same data.

Practical considerations

YAML is line-oriented and thus it is often simple to convert the unstructured output of existing programs into YAML format while having them retain much of the look of the original document. Because there are no closing tags, braces, or quotation marks to balance, it is generally easy to generate well-formed YAML directly from distributed print statements within unsophisticated programs. Likewise, the whitespace delimiters facilitate quick-and-dirty filtering of YAML files using the line-oriented commands in grep, AWK, Perl, Ruby, and Python.

In particular, unlike markup languages, chunks of consecutive YAML lines tend to be well-formed YAML documents themselves. This makes it very easy to write parsers that do not have to process a document in its entirety (e.g. balancing opening and closing tags and navigating quoted and escaped characters) before they begin extracting specific records within. This property is particularly expedient when iterating in a single, stateless pass, over records in a file whose entire data structure is too large to hold in memory, or for which reconstituting the entire structure to extract one item would be prohibitively expensive.

Counterintuitively, although its indented delimiting might seem to complicate deeply nested hierarchies, YAML handles indents as small as a single space, and this may achieve better compression than markup languages. Additionally, extremely deep indentation can be avoided entirely by either: 1) reverting to "inline style" (i.e. JSON-like format) without the indentation; or 2) using relational anchors to unwind the hierarchy to a flat form that the YAML parser will transparently reconstitute into the full data structure.[26]

Security

YAML is purely a data-representation language and thus has no executable commands. While validation and safe parsing is inherently possible in any data language, implementation is such a notorious pitfall that YAML's lack of an associated command language may be a relative security benefit.

However, YAML allows language-specific tags so that arbitrary local objects can be created by a parser that supports those tags. Any YAML parser that allows sophisticated object instantiation to be executed opens the potential for an injection attack. Perl parsers that allow loading of objects of arbitrary classes create so-called "blessed" values. Using these values may trigger unexpected behavior, e.g. if the class uses overloaded operators. This may lead to execution of arbitrary Perl code.[27]

The situation is similar for Python or Ruby parsers. According to the PyYAML documentation:[28]

Note that the ability to construct an arbitrary Python object may be dangerous if you receive a YAML document from an untrusted source such as the Internet. The function limits this ability to simple Python objects like integers or lists. [...]

PyYAML allows you to construct a Python object of any type. Even instances of Python classes can be constructed using the tag.

Data processing and representation

The YAML specification identifies an instance document as a "Presentation" or "character stream".[29] The primary logical structures in a YAML instance document are scalars, sequences, and mappings.[30] The YAML specification also indicates some basic constraints that apply to these primary logical structures. For example, according to the specification, mapping keys do not have an order. In every case where node order is significant, a sequence must be used.[31]

Moreover, in defining conformance for YAML processors, the YAML specification defines two primary operations: dump and load. All YAML-compliant processors must provide at least one of these operations, and may optionally provide both.[32] Finally, the YAML specification defines an information model or "representation graph", which must be created during processing for both dump and load operations, although this representation need not be made available to the user through an API.[33]

Comparison with other serialization formats

Comparison with JSON

JSON syntax is a basis of YAML version 1.2, which was promulgated with the express purpose of bringing YAML "into compliance with JSON as an official subset".[4] Though prior versions of YAML were not strictly compatible,[34] the discrepancies were rarely noticeable, and most JSON documents can be parsed by some YAML parsers such as Syck.[35] This is because JSON's semantic structure is equivalent to the optional "inline-style" of writing YAML. While extended hierarchies can be written in inline-style like JSON, this is not a recommended YAML style except when it aids clarity.

YAML has many additional features not present in JSON, including comments, extensible data types, relational anchors, strings without quotation marks, and mapping types preserving key order.

Due to the conciseness, JSON serialization and deserialization is much faster than YAML.[36] [37]

Comparison with TOML

TOML was designed to be an advancement of the .ini file format. YAML's minimal use of indicator characters is compared favorably to TOML's strict requirement of quotation marks and square brackets. YAML's use of significant indentation has been contrasted with the dot notation of TOML's key and table names to convey the same semantic structure. Opinions differ on which convention leads to more-readable configuration files.[38]

Comparison with XML

YAML lacks the notion of tag attributes that are found in XML. Instead YAML has extensible type declarations (including class types for objects).

YAML itself does not have XML's language-defined document schema descriptors that allow, for example, a document to self-validate. However, there are several externally defined schema descriptor languages for YAML (e.g. Doctrine, Kwalify and Rx) that fulfill that role. Moreover, the semantics provided by YAML's language-defined type declarations in the YAML document itself frequently relaxes the need for a validator in simple, common situations. Additionally, YAXML, which represents YAML data structures in XML, allows XML schema importers and output mechanisms like XSLT to be applied to YAML.

Comparison of data-serialization formats provides a more comprehensive comparison of YAML with other serialization formats.

Software (emitters and parsers)

For fixed data structures, YAML files can simply be generated using print commands that write both the data and the YAML specific decoration. To dump varying, or complex, hierarchical data, however, a dedicated YAML emitter is preferable. Similarly, simple YAML files (e.g. key-value pairs) are readily parsed with regular expressions. For more complex, or varying, data structures, a formal YAML parser is recommended.

YAML emitters and parsers exist for many popular languages. Most of them are written in the native language itself. Some are language bindings of the C library libyaml; they may run faster. There used to be another C library, called Syck, written and orphaned by why the lucky stiff: it is unmaintained, there is no authoritative source bundle, and the web site has been hijacked. Hence the only recommendable C library is libyaml. It was originally developed by Kirill Simonov. In 2018, development was resumed by the new maintainers Ian Cordasco and Ingy döt Net.[39]

C++ programmers have the choice between the C library libyaml and the C++ library libyaml-cpp. Both have completely independent code bases and completely different APIs. The library libyaml-cpp still has a major version number of 0, indicating that the API may change at any moment, as happened indeed after version 0.3. There is a grammar-focused implementation written in C#, with an aim on extensions for the nested elements.[40]

Some implementations of YAML, such as Perl's YAML.pm, will load an entire file (stream) and parse it en masse. Other implementations like PyYaml are lazy and iterate over the next document only upon request. For very large files in which one plans to handle the documents independently, instantiating the entire file before processing may be prohibitive. Thus in YAML.pm, occasionally one must chunk a file into documents and parse those individually. YAML makes this easy, since this simply requires splitting on the document end marker, which is defined as three periods at the start of a line followed by a whitespace (and possible a comment). This marker is forbidden in content.[41]

Criticism

YAML has been criticized for its significant whitespace, confusing features, insecure defaults, and its complex and ambiguous specification:[42] [43] [44]

The perceived flaws and complexity of YAML has led to the emergence of stricter alternatives such as StrictYAML and NestedText.[45]

See also

External links

Notes and References

  1. YAML Media Type . Polli . Roberto . Wilde . Erik . 2024-02-21 . Internet Engineering Task Force . RFC 9512 . Aro . Eemeli . 2024-02-21 . 2024-02-21 . https://web.archive.org/web/20240221185855/https://datatracker.ietf.org/doc/rfc9512/ . live .
  2. Web site: yaml . Apple Developer Documentation: Uniform Type Identifiers . . 2023-05-22 . 2023-05-22 . https://web.archive.org/web/20230522155815/https://developer.apple.com/documentation/uniformtypeidentifiers/uttype/3551604-yaml . live .
  3. Web site: Yet Another Markup Language (YAML) 1.0 / Working Draft. 10 Dec 2001. 2019-05-28. 2019-07-10. https://web.archive.org/web/20190710131145/https://yaml.org/spec/history/2001-12-10.html. live.
  4. Web site: YAML Ain't Markup Language (YAML) Version 1.2. YAML.org. 2019-05-29. 2019-01-24. https://web.archive.org/web/20190124222648/https://yaml.org/spec/1.2/spec.html. live.
  5. Web site: Built-in Types — Python 3.9.6 documentation. 2021-08-19. docs.python.org. 2020-06-14. https://web.archive.org/web/20200614194325/https://docs.python.org/3/library/stdtypes.html. live.
  6. Web site: Standard built-in objects - JavaScript MDN. 2021-08-19. developer.mozilla.org. en-US. 2021-01-19. https://web.archive.org/web/20210119075018/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects. live.
  7. Web site: corob-msft. Built-in types (C++). 2021-08-19. docs.microsoft.com. 17 August 2021. en-us. 2024-06-13. https://web.archive.org/web/20240613135924/https://learn.microsoft.com/en-us/cpp/cpp/fundamental-types-cpp?view=msvc-170. live.
  8. Web site: The Official YAML Web Site. yaml.org. 2019-02-05. 2021-03-18. https://web.archive.org/web/20210318102345/https://yaml.org/. live.
  9. Web site: Setting up Vim for YAML editing. arthurkoziel.com. 2021-12-20. 2021-11-23. https://web.archive.org/web/20211123022602/https://www.arthurkoziel.com/setting-up-vim-for-yaml/. live.
  10. Web site: Yaml Mode . EmacsWiki . 2015-06-12 . 2016-12-05 . 2016-11-08 . https://web.archive.org/web/20161108052715/https://www.emacswiki.org/emacs/YamlMode . live .
  11. Web site: aukaost . Pretty YAML - Packages - Package Control . Packagecontrol.io . 2016-12-05 . 2016-11-08 . https://web.archive.org/web/20161108052511/https://packagecontrol.io/packages/Pretty%20YAML . live .
  12. Web site: yaml | Eclipse Plugins, Bundles and Products - Eclipse Marketplace . Marketplace.eclipse.org . 2016-12-05 . 2016-11-08 . https://web.archive.org/web/20161108133326/https://marketplace.eclipse.org/category/free-tagging/yaml . live .
  13. Web site: Ruth Kusterer . NetBeans IDE - Ruby and Ruby on Rails Development . Netbeans.org . 2016-12-05 . 2016-11-19 . https://web.archive.org/web/20161119003539/https://netbeans.org/features/ruby/index.html . dead .
  14. Web site: YAML Ain't Markup Language. September 24, 2006. https://web.archive.org/web/20060924190202/https://yaml.org/faq.html. 2006-09-24. live.
  15. Web site: YAML Draft 0.1 . Evans . Clark . May 11, 2001 . Yahoo! Tech groups: sml-dev . 2019-03-21 . https://web.archive.org/web/20010603012942/http://groups.yahoo.com/group/sml-dev/message/4710. 2001-06-03.
  16. Web site: YAML Ain't Markup Language: About . YAML.org . 2019-05-29 . 2019-04-14 . https://web.archive.org/web/20190414205219/https://yaml.org/about.html . live .
  17. Web site: Yet Another Markup Language (YAML) 1.0 . YAML.org . 2019-05-29 . 2019-04-14 . https://web.archive.org/web/20190414205247/https://yaml.org/spec/history/2001-08-01.html . live .
  18. Web site: Yet Another Markup Language (YAML) 1.0 . stackoverflow.com . 2021-03-24 . 2021-04-23 . https://web.archive.org/web/20210423212857/https://stackoverflow.com/questions/6968366/if-yaml-aint-markup-language-what-is-it . live .
  19. Web site: YAML1.1 Reference Card . YAML.org . 2019-05-29 . 2019-04-14 . https://web.archive.org/web/20190414205255/https://yaml.org/refcard.html . live .
  20. Web site: YAML Ain't Markup Language (YAML) Version 1.2. YAML.org. 2019-05-29. 2019-01-24. https://web.archive.org/web/20190124222648/https://yaml.org/spec/1.2/spec.html#id2771184. live.
  21. Web site: YAML specification v1.2.2 Section 6.1. Indentation Spaces. 2023-03-12. 2023-03-12. https://web.archive.org/web/20230312144139/https://yaml.org/spec/1.2.2/#indentation-spaces. live.
  22. Web site: YAML Ain't Markup Language (YAML) Version 1.2. YAML.org. 2019-05-29. 2019-01-24. https://web.archive.org/web/20190124222648/https://yaml.org/spec/1.2/spec.html#id2780069. live.
  23. Web site: Cloud Based Management apps . JigoCloud.com . 2016-09-28 . https://web.archive.org/web/20160917202144/http://www.jigocloud.com/en/blog/yaml-is-json . 2016-09-17 . dead .
  24. Web site: YAML 1.2 specification of Structures. YAML.org. 2019-05-29. 2019-01-24. https://web.archive.org/web/20190124222648/https://yaml.org/spec/1.2/spec.html#id2760395. live.
  25. Web site: Extensible Markup Language (XML) 1.0 (Second Edition). W3.org. 27 May 2015. 15 May 2022. https://web.archive.org/web/20220515043139/http://www.w3.org/TR/2000/REC-xml-20001006#idref. live.
  26. Web site: Free Courses Introduction to YAML - A hands -on course . 2022-08-04 . Insidelearn . en . 2022-08-26 . https://web.archive.org/web/20220826141729/https://insidelearn.com/introduction-to-yaml-a-hands-on-course . live .
  27. Web site: 2022-08-04 . YAML . 2022-08-04 . . 2022-12-26 . https://web.archive.org/web/20221226211202/http://m.kuliah-daring-mm-ign.itbk.web.id/IT/2380-2260/SnakeYAML_3344_m-kuliah-daring-mm-ign-itbk.html . dead .
  28. Web site: PyYAML Documentation, Loading YAML. Pyyaml.org. 2016-09-28. 2016-09-24. https://web.archive.org/web/20160924203235/http://pyyaml.org/wiki/PyYAMLDocumentation#LoadingYAML. live.
  29. Web site: Ain't Markup Language (YAML) Version 1.1 . YAML.org . 2019-05-29 . 2019-04-14 . https://web.archive.org/web/20190414205303/https://yaml.org/spec/current.html#id2506012 . live .
  30. Additional, optional-use, logical structures are enumerated in the YAML types repository.Web site: Language-Independent Types for YAML Version 1.1 . YAML.org . 2019-05-29 . 2019-04-14 . https://web.archive.org/web/20190414205311/https://yaml.org/type/index.html . live . The tagged types in the YAML types repository are optional and therefore not essential for conformant YAML processors. "The use of these tags is not mandatory."
  31. Web site: YAML Ain't Markup Language (YAML) Version 1.1 . YAML.org . 2019-05-29 . 2024-06-13 . https://web.archive.org/web/20240613140044/https://yaml.org/spec/1.2.2/#id2508372 . live .
  32. Web site: Ain't Markup Language (YAML) Version 1.1 . YAML.org . 2019-05-29 . 2024-06-13 . https://web.archive.org/web/20240613140044/https://yaml.org/spec/1.2.2/#id2504671 . live .
  33. Web site: YAML Ain't Markup Language (YAML) Version 1.1. YAML.org. 2019-05-29. 2019-04-14. https://web.archive.org/web/20190414205303/https://yaml.org/spec/current.html#id2504309. live.
  34. The incompatibilities were as follows: JSON allows extended character sets like UTF-32 and had incompatible unicode character escape syntax relative to YAML; YAML required a space after separators like comma, equals, and colon while JSON does not. Some non-standard implementations of JSON extend the grammar to include Javascript's comments. Handling such edge cases may require light pre-processing of the JSON before parsing as in-line YAML. See alsohttps://metacpan.org/module/JSON::XS#JSON-and-YAML .
  35. http://www.jigocloud.com/en/blog/yaml-is-json Parsing JSON with SYCK
  36. Web site: 15 June 2021 . YAML vs JSON vs XML in Go . subscription . 31 January 2024 . Medium . 24 January 2024 . https://web.archive.org/web/20240124022825/https://medium.com/geekculture/yaml-vs-json-vs-xml-in-go-bf4ebd1066f2 . live .
  37. Web site: Differences Between YAML and JSON . Baeldung . 7 March 2023 . 9 July 2020 . 7 March 2023 . https://web.archive.org/web/20230307202829/https://www.baeldung.com/yaml-json-differeneces . live .
  38. Web site: My problem with YAML's use of whitespace . Siebenmann . Chris . 2019-04-30 . 2023-10-06 . 2023-12-01 . https://web.archive.org/web/20231201100752/https://utcc.utoronto.ca/~cks/space/blog/tech/YamlWhitespaceProblem . live .
  39. yaml-core@lists.sourceforge.net, mail of June 27, 2018.
  40. Web site: YAML Grammar for Lexepars . . 2020-02-20 . 2020-09-17 . https://web.archive.org/web/20200917105202/https://github.com/DNemtsov/Lexepars.Grammars.Yaml . live .
  41. Web site: YAML Ain't Markup Language (YAML) Version 1.2 # 9.1.2 Document Markers . YAML.org . 2019-05-29 . 2019-01-24 . https://web.archive.org/web/20190124222648/https://yaml.org/spec/1.2/spec.html#id2800401 . live .
  42. Web site: Martin. Tournoij. YAML: probably not so great after all. 4 Sep 2016. 16 May 2019. 10 May 2019. https://web.archive.org/web/20190510195249/https://arp242.net/yaml-config.html. live.
  43. Web site: That's a lot of YAML. 16 May 2019. 2 March 2019. https://web.archive.org/web/20190302030219/https://noyaml.com/. live.
  44. Web site: YAML sucks. GitHub. 16 May 2019. 7 April 2019. https://web.archive.org/web/20190407140216/https://github.com/cblp/yaml-sucks. live.
  45. Web site: The Norway Problem - why StrictYAML refuses to do implicit typing and so should you . 3 June 2020 . 21 February 2020 . https://web.archive.org/web/20200221213116/https://hitchdev.com/strictyaml/why/implicit-typing-removed/ . live .
  46. Web site: YAML Test Matrix. 2020-04-03. 2020-07-16. https://web.archive.org/web/20200716003514/https://matrix.yaml.io/valid.html. live.