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
問題
- 開発者は、各行がコンパクトな行識別子によって参照されるYAMLの表構造を表現したい
溶液
- YAMLアンカーを使用するには、テーブルの各行にアンカー識別子を割り当てます
- YAMLでは、再利用可能な "transclusion identifiers"はアンカーとエイリアスと呼ばれます
- YAMLでは、再利用可能な "transclusion identifiers"は、アンパサンドまたはアスタリスクで始まる英数字のトークン
根拠
- YAMLアンカーとエイリアスにより、データの正規化が向上します
- YAMLのアンカーとエイリアスは
DRY強制します(繰り返しません) - この例では、データベースと密接に一致するテーブル構造を設計し保存することができます
落とし穴
- 別名で参照できるようにするには、YAMLアンカーを宣言する必要があります
- YAMLアンカーはドキュメント全体で一意でなければなりません
- 一意のアンカーを指定しなかった場合、
yaml.load()エラーが発生します。 - すべての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テーブルから行を相互参照する
---
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