サーチ…


行識別子としてYAMLアンカーを使用して「辞書の配列」表を作成する

    ---
    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

問題

  • 開発者は、各行がコンパクトな行識別子によって参照されるYAMLの表構造を表現したい

溶液

  • YAMLアンカーを使用するには、テーブルの各行にアンカー識別子を割り当てます
  • YAMLでは、再利用可能な "transclusion identifiers"はアンカーとエイリアスと呼ばれます
  • YAMLでは、再利用可能な "transclusion identifiers"は、アンパサンドまたはアスタリスクで始まる英数字のトークン

根拠

  • YAMLアンカーとエイリアスにより、データの正規化が向上します
  • YAMLのアンカーとエイリアスはDRY強制します(繰り返しません)
  • この例では、データベースと密接に一致するテーブル構造を設計し保存することができます

落とし穴

  • 別名で参照できるようにするには、YAMLアンカーを宣言する必要があります
  • YAMLアンカーはドキュメント全体で一意でなければなりません
  • 一意のアンカーを指定しなかった場合、 yaml.load()エラーが発生します。
  • すべてのYAMLパーサーがアンカーとエイリアスを確実にサポートするわけではありません

も参照してください

YAML

YAMLエイリアスを使用してYAMLテーブルから行を相互参照する

    ---
    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!

問題

  • 開発者は1つのテーブルの行とアンカーを相互参照し、別のテーブルの別名として行をリンクしたい

溶液

  • 別のテーブルからあらかじめ定義されたアンカーを相互参照するYAMLエイリアスを使用する
  • YAMLでは、再利用可能な "transclusion identifiers"はアンカーとエイリアスと呼ばれます
  • YAMLでは、再利用可能な "transclusion identifiers"は、アンパサンドまたはアスタリスクで始まる英数字のトークン

根拠

  • YAMLアンカーとエイリアスにより、データの正規化が向上します
  • YAMLのアンカーとエイリアスはDRY強制します(繰り返しません)
  • この例では、データベースと密接に一致するテーブル構造を設計し保存することができます
  • この例では、データ入力およびファイルサイズを縮小することができます

落とし穴

  • この特定の例では、 yaml.load()はネストされた辞書を生成します
    • これは「ネストされた辞書の問題」と呼ばれ、
    • person-valueペアの下で、personの値はサブディクショナリになります
    • テーブル構造の均一性を損なうため、これは望ましくないことがあります
  • エイリアスを正しく指定しないとデータが失われます
    • (タイプミスによって相互参照が壊れてしまいます)
  • YAMLは参照によるファイルの移入をサポートしていないので、すべてのエイリアスとアンカーは同じyamlファイルに存在しなければなりません
  • すべてのYAMLパーサーがアンカーとエイリアスを確実にサポートするわけではありません

も参照してください

YAML

YAMLマージキーを使って別のYAMLテーブルから行を相互参照する

    ---
    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!

問題

  • 開発者は1つのテーブルの行とアンカーを相互参照し、別のテーブルの別名として行をリンクしたい
  • 開発者は "ネストされた辞書の問題"を避けるために、

溶液

  • YAMLエイリアスを使用し、YAMLマージキーを使用する
  • YAMLでは、再利用可能な "transclusion identifiers"はアンカーとエイリアスと呼ばれます
  • YAMLでは、再利用可能な "transclusion identifiers"は、アンパサンドまたはアスタリスクで始まる英数字のトークン

根拠

  • YAMLアンカーとエイリアスにより、データの正規化が向上します
  • YAMLのアンカーとエイリアスはDRY強制します(繰り返しません)
  • この例では、データベースと密接に一致するテーブル構造を設計し保存することができます
  • この例では、データ入力およびファイルサイズを縮小することができます

落とし穴

  • この特定の例では、 yaml.load()はネストされた辞書を生成します
    • person-valueペアの下で、personの値はサブディクショナリになります
    • テーブル構造の均一性を損なうため、これは望ましくないことがあります
  • エイリアスを正しく指定しないとデータが失われます
    • (タイプミスによって相互参照が壊れてしまいます)
  • YAMLは参照によるファイルの移入をサポートしていないので、すべてのエイリアスとアンカーは同じyamlファイルに存在しなければなりません
  • すべてのYAMLパーサーがアンカーとエイリアスを確実にサポートするわけではありません

も参照してください



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow