yaml

Using anchors and aliases for transcluded content

Creating an “Array of Dictionaries” table with YAML anchors as row identifiers

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34
        

Problem

  • developer wishes to express a table structure in YAML, where each row is referenced by a compact row identifier

Solution

  • use YAML anchors, by assigning an anchor identifier to each row in the table
  • in YAML, reusable “transclusion identifiers” are called anchors and aliases
  • in YAML, reusable “transclusion identifiers” consist of alphanumeric tokens preceeded by an ampersand or asterisk

Rationale

  • YAML anchors and aliases allow for increased data normalization
  • YAML anchors and aliases enforce DRY (Don’t repeat yourself)
  • in this example, a table structure can be designed and preserved which closely coincides with a database

Pitfalls

  • YAML anchors must be declared before they can be referenced by aliases
  • YAML anchors must be unique throughout the document
  • failure to specify unique anchors will cause an error on yaml.load()
  • not all YAML parsers reliably support anchors and aliases

See also

Stackoverflow YAML

Using YAML aliases to cross-reference rows from a YAML table

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34
        
    motto_table:
      - &motto001
        person:   *person001
        motto: >
          D'oh!! YAML is too complicated!

      - &motto002
        person:   *person002
        motto: >
          Bart! Listen to your father!

      - &motto003
        person:   *person003
        motto: >
          Hey! YAML is freakin' sweet!
        

Problem

  • developer wishes to cross-reference rows-with-anchors from one table and link to them with rows-as-aliases in another table

Solution

  • use YAML aliases, which cross-reference pre-defined anchors from another table
  • in YAML, reusable “transclusion identifiers” are called anchors and aliases
  • in YAML, reusable “transclusion identifiers” consist of alphanumeric tokens preceeded by an ampersand or asterisk

Rationale

  • YAML anchors and aliases allow for increased data normalization
  • YAML anchors and aliases enforce DRY (Don’t repeat yourself)
  • in this example, a table structure can be designed and preserved which closely coincides with a database
  • in this example, data entry and file sizes can be reduced

Pitfalls

  • in this specific example, yaml.load() will produce nested dictionaries
    • this is referred to as the “nested dictionaries problem”
    • under the person name-value pair, the value for person will be a sub-dictionary
    • this may be undesirable, because it breaks the uniformity of the table structure
  • failure to correctly specify aliases will result in missing data
    • (typos will create broken cross-references)
  • YAML does not support file transclusion by reference, so all aliases and anchors must exist in the same yaml file
  • not all YAML parsers reliably support anchors and aliases

See also

Stackoverflow YAML

Using YAML merge-keys to cross-reference rows from another YAML table

    ---
    person_table:
      - &person001
        fname:  homer
        lname:  simpson
        role:   dad
        age:    33

      - &person002
        fname:  marge
        lname:  simpson
        role:   mom
        age:    34

      - &person003
        fname:  peter
        lname:  griffin
        role:   dad
        age:    34
        
    motto_table:
      - &motto001
        <<: *person001
        motto: >
          D'oh!! YAML is too complicated!

      - &motto002
        <<: *person002
        motto: >
          Bart! Listen to your father!

      - &motto003
        <<: *person003
        motto: >
          Hey! YAML is freakin' sweet!
        

Problem

  • developer wishes to cross-reference rows-with-anchors from one table and link to them with rows-as-aliases in another table
  • developer wishes to avoid creating the “nested dictionaries problem”

Solution

  • use YAML aliases, with YAML merge keys
  • in YAML, reusable “transclusion identifiers” are called anchors and aliases
  • in YAML, reusable “transclusion identifiers” consist of alphanumeric tokens preceeded by an ampersand or asterisk

Rationale

  • YAML anchors and aliases allow for increased data normalization
  • YAML anchors and aliases enforce DRY (Don’t repeat yourself)
  • in this example, a table structure can be designed and preserved which closely coincides with a database
  • in this example, data entry and file sizes can be reduced

Pitfalls

  • in this specific example, yaml.load() will produce nested dictionaries
    • under the person name-value pair, the value for person will be a sub-dictionary
    • this may be undesirable, because it breaks the uniformity of the table structure
  • failure to correctly specify aliases will result in missing data
    • (typos will create broken cross-references)
  • YAML does not support file transclusion by reference, so all aliases and anchors must exist in the same yaml file
  • not all YAML parsers reliably support anchors and aliases

See also


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow