YAML

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
YAML
公式YAMLLogo.svg
ファイル名拡張子.yaml.yml
インターネットメディアタイプ未登録
初回リリース2001年5月11日; 20年前 (2001-05-11
最新のリリース
1.2(改訂1.2.2)
2021年10月1日; 4ヶ月前 (2021-10-01
フォーマットの種類データ交換
オープンフォーマットはい
Webサイトyaml .org

YAML/ ˈjæməl /およびYAH-ml)(§履歴と名前を参照)は、人間が読める形式の データシリアル化言語です。これは通常、構成ファイルや、データが保存または送信されるアプリケーションで使用されます。YAMLは、 Extensible Markup Language (XML)と同じ通信アプリケーションの多くを対象としていますが、 SGMLとは意図的に異なる最小限の構文を備えています[1]ネストを示すためにPython[...]スタイルのインデントと、リストと{...}マップに使用するよりコンパクトな形式[1]、つまりJSONの両方を使用します。ファイルは有効なYAML1.2です。[2]

カスタムデータ型を使用できますが、YAMLはスカラー文字列整数浮動小数点数など)、リスト連想配列(マップ、辞書、ハッシュとも呼ばれます)をネイティブにエンコードします。これらのデータ型はPerlプログラミング言語に基づいていますが、一般的に使用されるすべての高級プログラミング言語は非常によく似た概念を共有しています。[3] [4] [5]キーと値のペアを表現するために使用されるコロン中心の構文は、RFC822で定義されている電子メールヘッダーとドキュメント区切り文字触発されています  ---MIMERFC 2046 )から借用されていますエスケープシーケンスCから再利用され、複数行の文字列の空白の折り返しはHTMLに触発されていますリストとハッシュには、ネストされたリストとハッシュを含めることができ、ツリー構造を形成します。任意のグラフは、YAMLエイリアスを使用して表すことができます(SOAPのXMLと同様)。[1] YAMLは、 SAXに触発された機能であるストリームでの読み取りと書き込みを目的としています[1] 

YAMLの読み取りと書き込みのサポートは、多くのプログラミング言語で利用できます。[6] Vim[7] Emacs[8]やさまざまな統合開発環境[9] [10] [11]などの一部のソースコードエディタには、ネストされた構造を折りたたんだり、自動的にYAMLを編集したりする機能があります。構文エラーを強調表示します。

YAMLファイルの公式に推奨されるファイル名拡張子.yamlは2006年以降です。 [12]

歴史と名前

YAML(/ ˈjæməl / 、ラクダ韻を踏む[ 2])は、2001年にClark Evans [13]によって最初に提案され、 IngydötNet [14]およびOrenBen -Kikiと共同で設計されました。[14]元々YAMLはさらに別のマークアップ言語を意味すると言われていました[15]。これは、プレゼンテーションと接続のためのマークアップ言語(HTML、XML、SGMLなど)が急増した時代にリリースされたためです。その最初の名前は、マークアップ言語としての目的を参照して、テクノロジーランドスケープへの簡単な参照[16]として意図されていました。さらに別の構成を使用しましたが、ドキュメントのマークアップではなくデータ指向としての目的を区別するために 再帰的頭字語であるYAML Ai n't MarkupLanguageとして再利用されました。

デザイン

構文

虎の巻と完全な仕様は公式サイトで入手できます。[17]以下は基本的な要素の概要です。

YAMLは、一部の制御文字を除くUnicode文字セット全体を受け入れ、UTF-8UTF-16、またはUTF-32のいずれかでエンコードできます(UTF-32は必須ではありませんが、パーサーにはJSON互換性が必要です。)[18]

  • 空白の インデントは、構造を示すために使用されます。ただし、そのインデントの一部としてタブ文字を使用することはできません。
  • コメントは番号記号#)で始まり、行のどこからでも開始でき、行の終わりまで続くことができます。コメントは、空白文字で他のトークンと区切る必要があります。[19] 文字列内に#文字が含まれている場合、それらは番号記号(#)リテラルです。
  • リストメンバーは、行ごとに1つのメンバーを持つ先頭のハイフン-)で示されます。
  • 連想配列エントリは、フォームキーのコロン スペースを使用して表さます。値は、1行に1つのエントリです。YAMLでは、コロンの後にスペースを続ける必要があります。これにより、のようなURLスタイルの文字列をhttp://www.wikipedia.org、引用符で囲む必要なしに表すことができます。
    • キーの前に「?key:value」の形式で疑問符を使用すると、キーに引用符なしで先頭のダッシュや角かっこなどを含めることができます。
    • 連想配列は、中括弧( )で囲まれたテキストで指定することもできます{...}。キーはコロンで値から分離され、エントリはコンマで区切られます(JSONとの互換性を維持するためにスペースは必要ありません)。
  • 文字列(YAMLのスカラーの1つのタイプ)は通常引用符で囲まれていませんが、二重引用符")または重引用符( )で囲むことができます'
    • 二重引用符内では、特殊文字は円記号( )で始まるCスタイルのエスケープシーケンスで表すことができます。ドキュメントによると、サポートされている8進エスケープはです\\0
    • 一重引用符内でサポートされているエスケープシーケンスは、二重引用符('')のみです。これは、のように一重引用符自体を示します'don''t'
  • ブロックスカラーは、改行を保持( )または折りたたむ( )ためのオプションの修飾子を使用したインデントで区切られます。|>
  • 1つのストリーム内の複数のドキュメントは、3つのハイフン---)で区切られます。
    • 3つのピリオド...)は、オプションでストリーム内のドキュメントを終了します。
  • 繰り返されるノードは、最初はアンパサンド&)で示され、その後はアスタリスク*)で参照されます。
  • ノードは、二重感嘆符!!)とそれに続く文字列を使用してタイプまたはタグでラベル付けできます。文字列はURIに展開できます。
  • ストリーム内のYAMLドキュメントの前には、パーセント記号%)とそれに続く名前とスペース区切りのパラメーターで構成される「ディレクティブ」を付けることができます。YAML1.1では2つのディレクティブが定義されています。
    • %YAMLディレクティブは、特定のドキュメント内のYAMLのバージョンを識別するために使用されます。
    • %TAGディレクティブは、URIプレフィックスのショートカットとして使用されます。これらのショートカットは、ノードタイプタグで使用できます。

YAMLでは、将来の指定に備えて、アットマーク)とバックティック( )の2つの追加の印章文字が予約されています。 @`

基本コンポーネント

YAMLは、連想配列とリストを示すための「インライン」スタイルを提供します。これがコンポーネントのサンプルです。

従来のブロック形式では、ハイフンとスペースを使用してリスト内の新しい項目を開始します。

---  #好きな映画
- カサブランカ
- ノースバイノースウェスト
- そこにいなかった男

オプションのインライン形式は、コンマとスペースで区切られ、角かっこで囲まれます(JSONと同様)。[20]

---  #ショッピングリスト
[ミルク パンプキンパイ  ジュース]

キーはコロン+スペースで値から区切られます。YAMLデータファイルで一般的なインデントされたブロックは、インデントと新しい行を使用してキーと値のペアを区切ります。YAMLデータストリームで一般的なインラインブロックでは、カンマとスペースを使用して、中かっこでキーと値のペアを区切ります。

---  #インデントされたブロック
   John Smith
  年齢 33 
---  #インラインブロック
{名前 John Smith 年齢 33 }

文字列には引用符は必要ありません。複数行の文字列を作成するには、2つの方法があります。1つは改行を保持する(|文字を使用)方法、もう1つは改行を折りたたむ(>文字を使用する)方法で、どちらも改行文字が続きます。

データ | 
   かつて、イーリングからダージリン行きのバスに乗った背の高い男がいた
   。ドアに「床に座らないでください」と書かれていたので、慎重に天井に座った。
       
       
   

デフォルトでは、(最初​​の行の)先頭のインデントと末尾の空白は削除されますが、他の動作を明示的に指定することもできます。

データ >
   ラップされたテキストは
   1つの段落に折りたたまれます
   
   

   空白行は
   段落区切りを示します

折りたたまれたテキストは、改行をスペースに変換し、先頭の空白を削除します。

---  #The Smiths- 
{ 名前John  Smith 年齢 33 } --name 
 Mary Smith年齢27- [ name age ]:[ Rae Smith 4 ] #キーとしてシーケンスがサポートされています--- #People、性別男性[ジョンスミスビルジョーンズ]女性-メアリースミス-スーザンウィリアムズ 
   
       
 
  

   
   

オブジェクトとリストはyamlの重要なコンポーネントであり、混在させることができます。最初の例は、Smithファミリーのすべての人々であるKey-Valueオブジェクトのリストです。2番目は性別ごとにそれらをリストします。これは、2つのリストを含むKey-Valueオブジェクトです。

高度なコンポーネント

YAMLを他のデータシリアル化言語の機能と区別する2つの機能は、構造[21]とデータ入力です。

YAML構造により、1つのファイル内に複数のドキュメントを保存したり、繰り返されるノードの参照を使用したり、任意のノードをキーとして使用したりできます。[21]

明確さ、コンパクトさ、およびデータ入力エラーの回避のために、YAMLはノードアンカー(を使用&)と参照(を使用)を提供します*アンカーへの参照は、すべてのデータ型で機能します(以下の例の出荷先参照を参照してください)。

以下は、インストルメントシーケンサーのキューの例です。このキューでは、毎回完全に説明することなく、2つのステップが繰り返し再利用されます。

---  #レーザー眼科手術用のシーケンサープロトコル
- ステップ  &id001                   #アンカーラベルを定義&id001
    器具レーシック      2000パルスエネルギー
    5.4パルス持続時間12繰り返し1000スポットサイズ1mm     
       
          
            

- ステップ &id002
    器具レーシック      2000パルスエネルギー
    5.0パルス持続時間10繰り返し500スポットサイズ2mm-ステップ* id001 は最初のステップを指します(アンカー&id001を使用)-ステップ* id002 #は2番目のステップを指します-ステップ* id002     
       
          
            
                     
                     
  

YAMLは単純な型を自動検出するため、明示的なデータ型はほとんどのYAMLドキュメントで見られることはめったにありません。データ型は、コア、定義済み、およびユーザー定義の3つのカテゴリに分類できます。コアは、任意のパーサー(float、int、strings、lists、mapsなど)に存在すると予想されるものです。バイナリデータなど、より高度なデータ型はYAML仕様で定義されていますが、すべての実装でサポートされているわけではありません。最後に、YAMLは、データ型定義をローカルに拡張して、ユーザー定義のクラス、構造、またはプリミティブ(たとえば、四倍精度浮動小数点数)に対応する方法を定義します。

YAMLはエンティティのデータ型を自動検出しますが、データ型を明示的にキャストしたい場合があります。最も一般的な状況は、数字、ブール値、またはタグのように見える1語の文字列を引用符で囲むか、明示的なデータ型タグを使用して、曖昧さを解消する必要がある場合です。

--- 
a  123                      #整数
b  "123"                    #文字列、引用符で明確化
c  123.0                    #a float 
d  !! float  123              #接頭辞(!!)
e  ! !str  123                #明示的な型によって明確化された文字列
f  !! str はい               #明示的な型を介した文字列
g  はい                     #ブール値True(yaml1.1)、文字列 "Yes"(yaml1.2)
h  はいバナナなし  #文字列、「はい」と「いいえ」はコンテキストによって明確にされます。

YAMLのすべての実装に、仕様で定義されたすべてのデータ型があるわけではありません。これらの組み込み型は、二重感嘆符の接頭辞(!!)を使用します。ここに示されていない特に興味深いものは、セット、順序付けられたマップ、タイムスタンプ、および16進数です。これは、 base64でエンコードされたバイナリデータ の例です。

---
画像 !!バイナリ | 
  R0lGODdhDQAIAIAAAAAAANn 
  Z2SwAAAAADQAIAAACF4SDGQ 
  ar3xxbJ9p0qa7R0YxwzaFME 
  1IAADs =

YAMLの多くの実装は、オブジェクトのシリアル化のためにユーザー定義のデータ型をサポートできます。ローカルデータ型はユニバーサルデータ型ではありませんが、YAMLパーサーライブラリを使用してアプリケーションで定義されます。ローカルデータ型は、単一の感嘆符(!)を使用します。

--- 
myObject  !myClass  {名前 Joe 年齢 15  }

データ構造の階層は、アウトラインのインデントによって維持されます。

---
領収書     Oz-Ware購入請求
        2012-08-06
顧客
    first_name    ドロシー
    family_name   強風

アイテム
    -part_no  A4786説明ウォーターバケット(充填済み)価格1.47数量4   
         
           
        

    --part_no  E1628説明ハイヒール「ルビー」スリッパサイズ8価格133.7数量1   
         
            
           
        

請求先  &id001
    通り | 
            123トルネードアレイ
            スイート16
       イーストセンタービル
      カンザス州

発送先  * id001

specialDelivery   >
    イエローブリック
    ロードをエメラルドシティまで進みます。
    カーテンの後ろの男には注意を払わないでください。
    ..。

文字列は引用符で囲む必要がないことに注意してください。インデント内のスペースの特定の数は、並列要素が同じ左揃えであり、階層的にネストされた要素がさらにインデントされている限り、重要ではありません。このサンプルドキュメントでは、7つのトップレベルキーを持つ連想配列を定義しています。キーの1つである「items」には2要素のリストが含まれ、各要素自体が異なるキーを持つ連想配列です。&リレーショナルデータと冗長性の削除が表示されます。アンカー( )および参照(*)ラベルで示されているように、「出荷先」の連想配列のコンテンツが「請求先」の連想配列のコンテンツからコピーされます。読みやすくするために、オプションの空白行を追加できます。複数のドキュメントが単一のファイル/ストリームに存在する可能性があり、で区切られ---ます。...ファイルの終わりで使用できます(パイプを閉じずにストリーミング通信の終わりを通知するのに便利です)。

機能

インデントされた区切り

YAMLは主に構造のアウトラインインデントに依存しているため、区切り文字の衝突に対して特に耐性があります。スカラー値の引用符と中括弧に対するYAMLの感度が低いということは、ブロックリテラル(|またはを使用>) でインデントするだけで、XML、JSON、さらにはYAMLドキュメントをYAMLドキュメント内に埋め込むことができることを意味します。

---
 > HTMLは変更
        メッセージなしでYAMLに入ります
| 

        <blockquote style = "font:italic 1em serif"> 
        <p> "2の値が大きい場合でも、3は常に2より大きい
           " </ p> 
        <p>-作成者不明</ p> 
        </ blockquote> 
date  2007-06-01

YAMLは、すべての内部引用符を引用符で囲んでエスケープすることにより、JSONに配置できます。YAMLは、予約文字(、、、、、)をエスケープ<>空白を変換するか、CDATAセクションに配置することXMLに配置できます。 &'"

非階層型データモデル

各子ノードが単一の親を持つ階層モデルでのみデータを表すことができるJSONとは異なり、YAMLは、同じデータの繰り返しをツリー内の2つ以上のポイントから参照できるようにする単純なリレーショナルスキームも提供します。それらのポイント。これは、XMLに組み込まれているファシリティIDREFに似ています。[22]次に、YAMLパーサーは、これらの参照を、読み込まれたときに意味する完全に入力されたデータ構造に拡張します。したがって、参照を拡張しないXMLプロセッサーとは異なり、パーサーを使用するプログラムは、リレーショナルエンコーディングモデルを認識する必要はありません。この拡張により、構成ファイルまたは処理プロトコルでのデータ入力エラーを減らしながら読みやすさを向上させることができます。この場合、一連のレコードで多くのパラメーターが同じままで、わずかなパラメーターしか変化しません。たとえば、請求書の「出荷先」レコードと「請求先」レコードは、ほとんどの場合同じデータです。

実用的な考慮事項

YAMLは行指向であるため、既存のプログラムの非構造化出力を元のドキュメントの外観の多くを保持しながらYAML形式に変換するのは簡単なことがよくあります。バランスを取るための終了タグ、中括弧、または引用符がないため、一般に、洗練されていないプログラム内の分散印刷ステートメントから直接、整形式のYAMLを生成するのは簡単です。同様に、空白の区切り文字は、grep、AWK、Perl、Ruby、およびPythonの行指向コマンドを使用して、YAMLファイルの迅速でダーティなフィルタリングを容易にします。

特に、マークアップ言語とは異なり、連続するYAML行のチャンクはそれ自体が整形式のYAMLドキュメントである傾向があります。これにより、特定のレコードの抽出を開始する前に、ドキュメント全体を処理する必要のないパーサーを簡単に作成できます(たとえば、開始タグと終了タグのバランスを取り、引用符とエスケープ文字をナビゲートします)。このプロパティは、データ構造全体が大きすぎてメモリに保持できないファイル内のレコードを1回のステートレスパスで反復する場合、または構造全体を再構成して1つのアイテムを抽出する場合に非常にコストがかかる場合に特に便利です。

直感に反して、インデントされた区切りは深くネストされた階層を複雑にするように見えるかもしれませんが、YAMLは単一のスペースと同じくらい小さいインデントを処理し、これはマークアップ言語よりも優れた圧縮を実現する可能性があります。さらに、極端に深いインデントは、次のいずれかによって完全に回避できます。1)インデントなしで「インラインスタイル」(つまり、JSONのような形式)に戻す。または2)リレーショナルアンカーを使用して階層をフラットな形式に巻き戻し、YAMLパーサーが透過的に完全なデータ構造に再構成します。[要出典]

セキュリティ

YAMLは純粋にデータ表現言語であるため、実行可能コマンドはありません。[23]検証安全な解析はどのデータ言語でも本質的に可能ですが、実装は非常に悪名高い落とし穴であるため、YAMLに関連するコマンド言語がないことは比較的セキュリティ上の利点になる可能性があります。

ただし、YAMLでは言語固有のタグを使用できるため、これらのタグをサポートするパーサーによって任意のローカルオブジェクトを作成できます。高度なオブジェクトのインスタンス化を実行できるYAMLパーサーは、インジェクション攻撃の可能性を開きます。任意のクラスのオブジェクトのロードを可能にするPerlパーサーは、いわゆる「祝福された」値を作成します。これらの値を使用すると、たとえばクラスがオーバーロードされた演算子を使用している場合など、予期しない動作が発生する可能性があります。これにより、任意のPerlコードが実行される可能性があります。[要出典]

PythonまたはRubyパーサーの場合も同様です。PyYAMLのドキュメントによると:[24]

インターネットなどの信頼できないソースからYAMLドキュメントを受け取った場合、任意のPythonオブジェクトを作成する機能が危険になる可能性があることに注意してください。この関数yaml.safe_loadは、この機能を整数やリストなどの単純なPythonオブジェクトに制限します。[...]

PyYAMLを使用すると、任意のタイプのPythonオブジェクトを作成できます。!!python/objectPythonクラスのインスタンスでさえ、タグ を使用して構築できます。

データ処理と表現

YAML仕様は、インスタンスドキュメントを「プレゼンテーション」または「文字ストリーム」として識別します。[25] YAMLインスタンスドキュメントの主要な論理構造は、スカラー、シーケンス、およびマッピングです。[26] YAML仕様は、これらの主要な論理構造に適用されるいくつかの基本的な制約も示しています。たとえば、仕様によれば、マッピングキーには順序がありません。ノードの順序が重要である場合は常に、シーケンスを使用する必要があります。[27]

さらに、YAMLプロセッサの適合性を定義する際に、YAML仕様は2つの主要な操作であるdumploadを定義します。すべてのYAML準拠のプロセッサは、これらの操作の少なくとも1つを提供する必要があり、オプションで両方を提供することもできます。[28]最後に、YAML仕様は情報モデルまたは「表現グラフ」を定義します。これは、ダンプ操作とロード操作の両方の処理中に作成する必要がありますが、この表現はAPIを介してユーザーが利用できるようにする必要はありません。[29]

他のシリアル化フォーマットとの比較

JSONとの比較

JSON構文はYAMLバージョン1.2の基礎であり、YAMLを「公式サブセットとしてJSONに準拠させる」という明確な目的で公布されました。[2]以前のバージョンのYAMLは厳密には互換性がありませんでしたが、[30]不一致が目立つことはめったになく、ほとんどのJSONドキュメントはSyckなどの一部のYAMLパーサーで解析できます。[31]これは、JSONのセマンティック構造がYAMLを記述するオプションの「インラインスタイル」と同等であるためです。拡張階層はJSONのようなインラインスタイルで記述できますが、明確にする場合を除いて、これは推奨されるYAMLスタイルではありません。

YAMLには、コメント、拡張可能なデータ型、リレーショナルアンカー、引用符のない文字列、キーの順序を保持するマッピングタイプなど、JSONに欠けている多くの追加機能があります。

TOMLとの比較

TOMLは、.iniファイル形式を進化させるために設計されました。YAML仕様は23,449ワードであると指摘されましたが、TOML仕様は3,339ワードしかありませんでした。[32]これらの追加の単語とYAMLのインデントされた構文により、 TOMLに比べて複雑でない方法で記述できます。そして、YAMLドキュメントの階層はインデントから明らかです[33]

XMLとの比較

YAMLには、XMLに見られるタグ属性の概念がありません。代わりに、YAMLには拡張可能な型宣言(オブジェクトのクラス型を含む)があります。

YAML自体には、たとえばドキュメントの自己検証を可能にするXMLの言語定義のドキュメントスキーマ記述子がありません。ただし、その役割を果たすYAML用の外部定義スキーマ記述子言語( DoctrineKwalify 、Rxなど)がいくつかあります 。さらに、YAMLドキュメント自体でYAMLの言語定義型宣言によって提供されるセマンティクスにより、単純で一般的な状況でのバリデーターの必要性が緩和されることがよくあります。さらに、XMLでYAMLデータ構造を表すYAXMLを使用すると、XMLスキーマインポーターやXSLTなどの出力メカニズムをYAMLに適用できます。

データシリアル化形式の比較により、YAMLと他のシリアル化形式のより包括的な比較が可能になります。

ソフトウェア(エミッターとパーサー)

固定データ構造の場合、YAMLファイルは、データとYAML固有の装飾の両方を書き込む印刷コマンドを使用して簡単に生成できます。ただし、変化する、または複雑な階層データをダンプするには、専用のYAMLエミッターを使用することをお勧めします。同様に、単純なYAMLファイル(キーと値のペアなど)は、正規表現を使用して簡単に解析できます。より複雑な、または変化するデータ構造の場合は、正式なYAMLパーサーをお勧めします。

YAMLエミッターとパーサーは、多くの一般的な言語に存在します。それらのほとんどは母国語自体で書かれています。いくつかはCライブラリlibyamlの言語バインディングです。彼らはより速く走るかもしれません。以前は、 Syckと呼ばれる別のCライブラリがあり、ラッキースティッフが作成され、孤立していました。これは保守されておらず、信頼できるソースバンドルがなく、Webサイトが乗っ取られています。したがって、推奨されるCライブラリはlibyamlのみです。もともとはキリル・シモノフによって開発されました。2018年に、新しいメンテナであるIanCordascoとIngydötNetによって開発が再開されまし[34]

C ++プログラマーは、CライブラリlibyamlとC ++ライブラリlibyaml-cppのどちらかを選択できます。どちらも完全に独立したコードベースと完全に異なるAPIを備えています。ライブラリlibyaml-cppのメジャーバージョン番号はまだ0です。これは、バージョン0.3以降に実際に発生したように、APIがいつでも変更される可能性があることを示しています。ネストされた要素の拡張を目的として、C#で記述された文法に焦点を当てた実装があります。[35]

PerlのYAML.pmなどのYAMLの一部の実装は、ファイル全体(ストリーム)をロードし、それをまとめて解析します。PyYamlのような他の実装は怠惰であり、要求があった場合にのみ次のドキュメントを反復処理します。ドキュメントを個別に処理することを計画している非常に大きなファイルの場合、処理する前にファイル全体をインスタンス化することは法外な場合があります。したがって、YAML.pmでは、ファイルをドキュメントにチャンクし、それらを個別に解析する必要がある場合があります。YAMLを使用すると、これが簡単になります。これは、ドキュメントの終了マーカーで分割する必要があるためです。これは、1行に3つのピリオドとして定義されます。このマーカーはコンテンツで禁止されています。[36]

批評

YAMLは、その重要な空白、紛らわしい機能、安全でないデフォルト、およびその複雑で曖昧な仕様について批判されてきました:[32] [37] [38]

  • 構成ファイルは、ユーザーが気付かないうちにコマンドを実行したり、コンテンツをロードしたりできます。[32]
  • インデントエラーが見過ごされる可能性があるため、大きなYAMLファイルの編集は困難です。[32]
  • タイプの自動検出はエラーの原因です。たとえば、引用符で囲まYesNOておらず、ブール値に変換されます。ソフトウェアのバージョン番号はfloatに変換される場合があります。[32] [39]
  • 切り捨てられたファイルは、ターミネータがないため、有効なYAMLとして解釈されることがよくあります。
  • 標準の複雑さにより、実装に一貫性がなくなり、言語が移植性を失いました。[32] [40]

YAMLの認識された欠陥と複雑さにより、StrictYAMLNestedTextなどのより厳密な代替手段が出現しました。[39]

も参照してください

参考文献

  1. ^ a b c d "Yet Another Markup Language(YAML)1.0 / WorkingDraft"2001年12月10日。
  2. ^ a b c "YAMLはマークアップ言語(YAML)バージョン1.2ではありません"YAML.org 2019年5月29日取得
  3. ^ 「組み込み型— Python3.9.6ドキュメント」docs.python.org 2021年8月19日取得
  4. ^ 「標準の組み込みオブジェクト-JavaScript | MDN」developer.mozilla.org 2021年8月19日取得
  5. ^ corob-msft。「組み込み型(C ++)」docs.microsoft.com 2021年8月19日取得
  6. ^ 「公式YAMLWebサイト」yaml.org
  7. ^ 「YAML編集用のVimのセットアップ」arthurkoziel.com
  8. ^ 「Yamlモード」EmacsWiki。2015-06-12 2016年12月5日取得
  9. ^ aukaost。「PrettyYAML-パッケージ-パッケージコントロール」Packagecontrol.io 2016年12月5日取得
  10. ^ "yaml | Eclipseプラグイン、バンドル、および製品-Eclipseマーケットプレイス"Marketplace.eclipse.org 2016年12月5日取得
  11. ^ ルースクステラー。「NetBeansIDE-RubyおよびRubyonRails開発」Netbeans.org 2016年12月5日取得
  12. ^ 「YAMLはマークアップ言語ではありません」2006年9月24日。2006年9月24日のオリジナルからアーカイブ。
  13. ^ Evans、Clark(2001年5月11日)。「YAMLドラフト0.1」Yahoo! 技術グループ:sml-dev 2019年3月21日取得
  14. ^ a b "YAMLはマークアップ言語ではありません:About"YAML.org 2019年5月29日取得
  15. ^ 「YetAnotherMarkup Language(YAML)1.0」YAML.org 2019年5月29日取得
  16. ^ 「YetAnotherMarkup Language(YAML)1.0」stackoverflow.com 2021-03-24を取得
  17. ^ 「YAML1.1リファレンスカード」YAML.org 2019年5月29日取得 
  18. ^ 「YAMLはマークアップ言語(YAML)バージョン1.2ではありません」YAML.org 2019年5月29日取得
  19. ^ 「YAMLはマークアップ言語(YAML)バージョン1.2ではありません」YAML.org 2019年5月29日取得
  20. ^ 「クラウドベースの管理アプリ」JigoCloud.com2016年9月17日にオリジナルからアーカイブされました2016年9月28日取得
  21. ^ a b "構造のYAML1.2仕様"YAML.org 2019年5月29日取得
  22. ^ 「ExtensibleMarkupLanguage(XML)1.0(Second Edition)」W3.org 2015年5月27日取得
  23. ^ 提案された「yield」タグは、単純な算術計算を提供します。
  24. ^ 「PyYAMLドキュメント、YAMLの読み込み」Pyyaml.org 2016年9月28日取得
  25. ^ 「マークアップ言語(YAML)バージョン1.1ではありません」YAML.org 2019年5月29日取得
  26. ^ 追加のオプション使用の論理構造は、YAMLタイプリポジトリに列挙されます。「YAMLバージョン1.1の言語に依存しないタイプ」YAML.org 2019年5月29日取得YAMLタイプリポジトリのタグ付きタイプはオプションであるため、準拠したYAMLプロセッサには必須ではありません。「これらのタグの使用は必須ではありません。」
  27. ^ 「YAMLはマークアップ言語(YAML)バージョン1.1ではありません」YAML.org 2019年5月29日取得
  28. ^ 「マークアップ言語(YAML)バージョン1.1ではありません」YAML.org 2019年5月29日取得
  29. ^ 「YAMLはマークアップ言語(YAML)バージョン1.1ではありません」YAML.org 2019年5月29日取得
  30. ^ 非互換性は次のとおりです。JSONはUTF-32のような拡張文字セットを許可し、YAMLと比較して互換性のないUnicode文字エスケープ構文を持っていました。YAMLでは、コンマ、等号、コロンなどの区切り文字の後にスペースが必要でしたが、JSONでは必要ありません。JSONの一部の非標準実装は、Javascriptの/*...*/コメントを含むように文法を拡張します。このようなエッジケースを処理するには、インラインYAMLとして解析する前にJSONの軽い前処理が必要になる場合があります。[1]も参照してください
  31. ^ SYCKを使用したJSONの解析たとえば、SymfonyのYAMLパーサーは、[]または{}構造内の改行をサポートしていないことに注意してください。これは、JSONとの主要な非互換性です。
  32. ^ a b c d e f Tournoij、Martin(2016年9月4日)。「YAML:結局のところそれほど素晴らしいものではないでしょう」2019年5月16日取得
  33. ^ TOMLの何が問題になっていますか?
  34. ^ yaml-core @ lists.sourceforge.net、2018年6月27日のメール。
  35. ^ 「LexeparsのYAML文法」
  36. ^ 「YAMLはマークアップ言語(YAML)バージョン1.2#9.1.2ドキュメントマーカーではありません」YAML.org 2019年5月29日取得
  37. ^ 「それはたくさんのYAMLです」2019年5月16日取得
  38. ^ 「YAMLは最悪」2019年5月16日取得
  39. ^ a b 「ノルウェーの問題-StrictYAMLが暗黙の入力を拒否する理由。そうすべきである」2020年6月3日取得
  40. ^ 「YAMLテストマトリックス」

外部リンク