デザイントークン フォーマット・モジュール 2025.10

最終コミュニティグループレポート

このバージョン:
https://www.w3.org/community/reports/design-tokens/2025.10/
最新発行バージョン:
https://www.designtokens.org/TR/2025.10/format/
編集者:
Louis Chenais
Kathleen McMahon
Drew Powers
Matthew Ström-Awn
Donna Vitan
著者:
Daniel Banks
Mike Kamminga
Ayesha Mazrana (Mazumdar)
James Nash
Adekunle Oduye
Kevin Powell
フィードバック:
GitHub design-tokens/community-groupプルリクエスト新しいイシューオープンイシュー

概要

本書は、異なるツール間でデザイントークンを交換するためのファイルフォーマットに関する技術仕様について記載しています。

この文書のステータス

本仕様は デザイントークン コミュニティグループ によって公開されました。W3C標準ではなく、W3C標準トラックにもありません。 W3C Community Final Specification Agreement(FSA) の下で、他の条件が適用される場合がありますのでご注意ください。 W3Cコミュニティ・ビジネスグループについてご確認ください。

このセクションは、本書が公開された時点での文書ステータスを説明しています。 他の文書が本書に取って代わることがあります。W3Cコミュニティグループレポートの一覧と本レポートの最新版は https://www.w3.org/community/reports/ で確認できます。

本書はW3Cプロセスの定義に従いDTCGによって 候補勧告として公開されています。本草案への貢献は Community Contributor License Agreement (CLA)および W3Cコミュニティグループプロセス で規定されています。

W3Cでの勧告ではありませんが、広範な合意形成を経た上で実装を目的とする仕様であることを明確にするため、この分類としています。

本仕様は安定版と見なされます。今後の更新は追って発行される仕様で提供されます。

本仕様に関する議論はGitHub Issuesをご利用ください。

1. 適合性

非規範と明記されたセクションに加えて、本仕様に記載されているすべての執筆ガイドライン、図、例、注意書きは非規範です。それ以外の本仕様の内容はすべて規範的です。

この文書におけるキーワードMAYMUSTMUST NOTSHOULDSHOULD NOTは、 BCP 14 [RFC2119] [RFC8174] に記載されている通り、すべて大文字で表示されている場合のみ、その意味で解釈されます。

2. はじめに

このセクションは非規範です。

デザイントークンとは、設計上の意思決定をプラットフォーム非依存な方法で表現する手法であり、異なる分野、ツール、技術間で共有することができます。これにより組織全体で共通の語彙を確立するのに役立ちます。

デザインシステムの管理者や利用者向けのツールエコシステムは拡大しており、デザイントークン機能を組み込んだり、その導入が有益となるケースも増えています:

デザインシステムチームは、こうしたツールを統合し、デザイントークンデータがデザイン・開発ツール間でシームレスに流れるようにすることが望まれることが多いです。

例えば:

現在、多くのツールがデザイントークンへのAPIアクセスや、ファイルとしてエクスポートする機能を提供していますが、それらはすべてツール固有です。したがって、デザインシステムチームは独自の「つなぎ」コードやワークフローを作成・維持する負担を負っています。また、異なるツールに移行する場合、その統合部分も更新が必要になります。

本仕様は、デザイントークンデータを記述する標準ファイルフォーマットを定義することで、ツール間の相互運用性を高め、デザインシステムチームの統合作業の負担を軽減することを目的としています。

3. 用語

これらの定義は、本仕様の技術的側面に焦点を当てており、デザインツールのベンダーなど実装者を対象としています。デザイナーや開発者向けの定義は、designtokens.orgで公開されています。

3.1 (デザイン)トークン

(デザイン)トークンとは、人が認識できる名前に関連付けられた情報で、最低限名前と値のペアです。

例:

名前には追加のトークンプロパティを関連付けることができます。

3.2 (デザイン)トークンプロパティ

トークン名に関連付けられる情報。

例:

必要に応じ、ツールやデザインシステムによってフォーマットを拡張するための追加メタデータを付与できます。

3.3 デザインツール

デザインツールとは、ビジュアルデザインの作成や編集を行うためのツールです。

例:

3.4 変換ツール

デザイントークンの変換ツールは、トークンデータをある形式から別の形式に変換します。

例:

3.5 ドキュメンテーションツール

ドキュメンテーションツールとは、デザイントークンの利用方法を記述するためのツールです。

例:

3.6

トークンの「型」は、その値に適用される予め定義された分類です。

例:

トークンツールは型を使って、そのトークンの用途を推論することができます。

例:

3.7 グループ

グループとは、特定のカテゴリに属するトークンの集合です。

例:

グループは任意のものとし、ツールはSHOULD NOT(すべきではない)グループからトークンの型や目的を推論するべきではありません。

3.8 エイリアス(参照)

デザイントークンの値は、他のトークンを参照することができます。同じ値に対して複数の名前、すなわちエイリアスを持つことが可能です。

以下のSass例はこの概念を表しています:

$color-palette-black: #000000;
    $color-text-primary: $color-palette-black;
    

$color-text-primaryの値は#000000です。なぜなら $color-text-primary$color-palette-blackを参照しているからです。この場合、$color-text-primary$color-palette-blackのエイリアスとも言えます。

3.9 複合(デザイン)トークン

複合デザイントークンとは、複数の名前付き子値で構成される値を持つトークンです。複合トークンは、常に一緒に適用される関連性の高いスタイルプロパティをまとめるのに役立ちます。例えば、タイポグラフィスタイルは、フォント名、フォントサイズ、行間、高さ、色などで構成できます。

こちらは複合シャドウトークンの例です:

{
    "shadow-token": {
        "$type": "shadow",
        "$value": {
        "color": {
            "$type": "color",
            "$value": {
            "colorSpace": "srgb",
            "components": [0, 0, 0],
            "alpha": 0.5,
            "hex": "#000000"
            }
        },
        "offsetX": { "value": 0.5, "unit": "rem" },
        "offsetY": { "value": 0.5, "unit": "rem" },
        "blur": { "value": 1.5, "unit": "rem" },
        "spread": { "value": 0, "unit": "rem" }
        }
    }
    }
    

4. ファイルフォーマット

デザイントークンファイルは、https://www.json.org/ の構造に準拠したJSONファイルです。

交換フォーマットとしてJSONを採用した理由:

4.1 メディアタイプ(MIMEタイプ)

デザイントークンファイルをHTTP/HTTPSで配信する場合や、メディアタイプ(旧称MIMEタイプ)の指定が必要な状況では、デザイントークンファイル用には次のMIMEタイプをSHOULDとして使用します:

ただし、すべてのデザイントークンファイルは有効なJSONファイルであるため、JSONのメディアタイプapplication/jsonとして配信MAYです。上記の、より具体的なメディアタイプが推奨され、可能な限りSHOULDとして使われます。

デザイントークンファイルを開くことのできるツールは両方のメディアタイプをMUSTサポートしなければなりません。

4.2 ファイル拡張子

デザイントークンファイルをローカルファイルシステムに保存する場合、専用のファイル拡張子を付けることで、ファイルブラウザなどで見分けやすくなります。また、ファイルアイコンや既定のアプリとの関連付けにも役立ちます。本仕様が推奨するファイル拡張子は次の通りです:

前者はより短く簡潔です。しかし、このフォーマットが広く採用・サポートされるまでの間は、後者を使うことでユーザーのお気に入りのJSONエディタでデザイントークンファイルを開きやすくなるかもしれません。

デザイントークンファイルを開けるツールは、利用可能なファイルを(たとえばファイルを開くダイアログ内で)これらの拡張子のみを表示するようMAYです。また「すべてのファイルを表示」など、これら以外も開ける選択肢を提供することが推奨されます。

デザイントークンファイルの保存に対応するツールは、保存時に推奨拡張子のいずれかをファイル名末尾にSHOULDで追加してください。

編集者注: JSONスキーマ

グループ内では、仕様を支援するためにJSON Schema追加について検討中です。

編集者注: JSONファイルのサイズ制限

JSONファイルサイズ制限に関する懸念が一部ベンダーから寄せられています。ワーキンググループは、JSON形式による制約について引き続きフィードバックを収集しています。

5. デザイントークン

5.1 名前と値

$value プロパティを持つオブジェクトはトークンです。したがって、$value はこの仕様における予約語となり、"$value" という名前のトークンは作成できません。親オブジェクトのキーがトークン名です。

トークン名は [RFC8259] で定義されている有効なJSON文字列である MUST です。

上記の例は、次のプロパティを持つデザイントークンを1つ定義しています:

名前と値はどちらも必須です。

トークン名は大文字小文字を区別します。そのため、同じグループ内で名前の大文字小文字だけが異なる2つのトークンが存在する次の例も有効です:

ただし、一部のツールでは他言語への書き出しやユーザーへの表示時に名前を変換する MAY があります。そのため、名前が大文字小文字だけ異なるトークンがあると、出力結果で同一の重複が発生することがあります。たとえば、これらのトークンをSassコードに変換する変換ツールでは、以下のような問題となる出力が生成されます:

ツールは名前の大文字小文字だけが異なるトークンがある場合、警告を表示する MAY です。

5.1.1 文字の制約

このフォーマットで定義されているすべてのプロパティはドル記号($)で始まります。この慣例は、将来バージョンで新しく導入されるプロパティにも適用されます。したがって、トークンおよびグループ名は $ で始めては MUST NOT いけません。

さらに、トークンエイリアスで使用される構文上の理由から、次の文字はトークン名やグループ名のいかなる場所にも MUST NOT で含めてはいけません:

  • {(左中括弧)
  • }(右中括弧)
  • .(ピリオド)

5.2 追加プロパティ

$value はトークンで唯一必須のプロパティですが、その他にもいくつかの追加プロパティを MAY 追加できます:

5.2.1 説明

トークンの用途を説明するプレーンテキストをオプションの $description プロパティで指定できます。ツールは MAY さまざまな形で説明を利用します。

例:

  • スタイルガイド自動生成ツールは、説明文をトークンのビジュアルプレビューと共に表示する MAY
  • IDEは入力補完時のツールチップとして説明文を表示する MAY(APIドキュメントのように)
  • デザインツールが、トークンを選択可能なUI上で説明文をツールチップや副説明として表示する MAY
  • 変換ツールが、エクスポート先のソースコード変数などに説明文をコメントとして出力する MAY

$descriptionプロパティの値はプレーンなJSON文字列で MUST です。例:

5.2.2

デザイントークンは常に明確な型を持ち、ツールはその値を確実に解釈できます。

トークンの型はオプションの $type プロパティで指定できます。$type が指定されていない場合、トークンの型は次のように MUST 判断します:

  • トークン値が参照であれば、参照先トークンの型に解決されます。
  • それ以外で親グループのいずれかに $type があれば、もっとも近い親グループの $type を継承します。
  • 親グループにも $type がない場合、トークンの型は不明となり、そのトークンは MUST 無効とみなされます。

ツールが値の中身を検査して型を推測しては MUST NOT いけません。

$type プロパティは複数の階層で指定可能です:

  • グループ階層
  • トークン階層

$type の値は本仕様の型定義で指定された値のいずれかであり、プレーンなJSON文字列で MUST です。値は大文字小文字を区別します。

例:

5.2.3 拡張

オプションの $extensions プロパティは、ツールが独自やユーザー・チーム・ベンダー固有のデータを追加するためのオブジェクトです。各ツールはベンダー固有のキーを MUST で使い、その値は任意のJSONデータ MAY とできます。

  • キーは他ベンダーとの競合可能性を避けるために SHOULD 工夫するべきで、逆ドメイン名記法 が推奨されます。
  • デザイントークンファイルを処理するツールは、自身が理解できない拡張データも MUST 保存・維持する必要があります。(例:ツールA由来の拡張データ付トークンをツールBで開く場合も、保存時にツールA由来の拡張データを必ず含めること)

このフォーマット対応間の相互運用性を保つため、チームやツールは拡張データ用途をトークンの値理解に必須ではない任意のメタデータに限定する SHOULD です。

ベンダーは拡張仕様をできる限り公開するのが望ましいです。他ツールでも逆コンパイルなしで対応できるからです。普及した拡張は今後の仕様で標準機能入りする可能性があります。

編集者注: 拡張セクション

拡張セクションはベンダー専用に限りません。すべてのトークン利用者が自身の用途で追加データをこのセクションに入れられます。

5.2.4 非推奨

$deprecated プロパティはトークンを非推奨としてマークする際、および理由の説明(任意)に MAY 使えます。非推奨の理由例:

  • 今後のデザインシステムでこのトークンが削除される予定
  • 今すぐ削除すると既存の対応が壊れる可能性がある
  • 以後このトークンの利用は推奨しない
説明
true このトークンは非推奨(理由なし)。
String このトークンは非推奨、かつその理由が説明されている。
false このトークンは非推奨でない(グループのデフォルトを上書きする場合もある)。

ツール開発者は、{button.activeBorder} のようなエイリアスを含む場合、文字列を拡張する MAY です。ツールはトークン解決や、ドキュメントやコードへのリンク、もしくはUI内で新しいトークンへのリンクやビジュアル表現をレンダリングできるかもしれません。例:「今後は {button.activeBorder} をご利用ください」は、JSでは次のように出力できます:

または

6. グループ

グループはデザイントークンを論理的なコレクションに整理し、トークンファイルに階層構造を提供します。グループは任意のものであり、ツールはグループからデザイントークンの型や用途を推測しては SHOULD NOT なりません。

6.1 グループ構造

グループは $value プロパティを含まない JSON オブジェクトとして識別されます。グループは次のものを MAY 含むことができます:

重要: $value プロパティが存在することは、そのオブジェクトがトークンであることを決定的に示します。もしオブジェクトが $value と子トークン/子グループの両方を含む場合、そのオブジェクトは同時にトークンとグループであることはできず、無効な構造になります。ツールはこれをエラーとして MUST 報告しなければなりません。

6.2 グループ内のルートトークン

グループは子トークンやネストされたグループとともに ルートトークン を含めることが MAY あります。ルートトークンはグループの基底値を提供し、バリアントや拡張を可能にします。

グループは予約名 $root をトークン名として使用することでルートトークンをサポートします:

根拠:予約トークン名として $root を使用することで、グループ参照とトークン参照の間の曖昧さを排除し、明確で一貫した構文を維持できます。$ プレフィックスはユーザー定義トークンとの命名衝突を防ぎ、仕様内の他の予約プロパティと整合します。

6.3 グループプロパティ

グループは次のプロパティを MAY 含むことができます:

プロパティ 必須 説明
$description No グループの目的を説明するプレーンな JSON 文字列
$type No グループ内で明示的に型を宣言していないトークンに対するデフォルトの型として機能します。型の継承はネストされたグループおよびそのトークンにも適用されます
$extends No 別のグループからトークンとプロパティを継承します。詳細は グループの拡張 を参照
$deprecated No グループを非推奨としてマークします。値は truefalse、または説明の文字列にできます
$extensions No ツールが独自データを追加できるベンダー固有の拡張

6.3.1 $deprecated

グループは $deprecated プロパティをオプションで含めてグループ全体を非推奨とマークすることが MAY あります。これは子トークンにも明示的に上書きされない限り適用されます。

説明
true このグループは非推奨(説明なし)
string このグループは非推奨であり、説明が付与されている
false このグループは非推奨ではない(親グループのデフォルトを上書きする可能性あり)

6.3.2 $extensions

グループは $extensions プロパティをオプションで含め、ツールが独自のユーザー・チーム・ベンダー固有のデータを追加することが MAY あります。各ツールはベンダー固有のキーを使用し、その値は任意の有効な JSON データである MAY です。

6.4 グループの拡張

グループは別のグループからトークンやプロパティを継承するためのオプション $extends プロパティを含めることが MAY あります。$extends はトークンを参照しては MUST NOT いけません。$extends プロパティは JSON Schema の $ref キーワードの構文糖衣であり、[json-schema-2020-12] に定義される同じ意味論的動作に従います。

6.4.1 JSON Schema の $ref との同等性

$extends プロパティは [json-schema-2020-12] に規定された JSON Schema の $ref キーワードと意味論的に等価です。次の 2 つのグループ定義は機能的に同一です:

$extends を使う(Design Token 構文):

{
    "button-primary": {
        "$extends": "{button}",
        "background": {
        "$value": {
            "colorSpace": "srgb",
            "components": [0.8, 0, 0.4],
            "hex": "#cc0066"
        }
        },
        "focus": {
        "$value": {
            "colorSpace": "srgb",
            "components": [1, 0.2, 0.6],
            "hex": "#ff3399"
        }
        }
    }
    }
    

$ref を使う(JSON Schema 構文):

{
    "button-primary": {
        "$ref": "#/button",
        "background": {
        "$value": {
            "colorSpace": "srgb",
            "components": [0.8, 0, 0.4],
            "hex": "#cc0066"
        }
        },
        "focus": {
        "$value": {
            "colorSpace": "srgb",
            "components": [1, 0.2, 0.6],
            "hex": "#ff3399"
        }
        }
    }
    }
    

6.4.2 参照の解決と評価

拡張の解決は次の簡潔な手順に従います:

  1. ターゲットを見つける: $extends 参照を解決してターゲットグループを特定する
  2. 継承コンテンツをコピー: ターゲットグループのすべてのトークンとプロパティで開始する
  3. ローカルの上書きを適用: 同一パスにローカルの定義がある場合は継承されたトークン/プロパティを置き換える
  4. 新規コンテンツを追加: 継承グループに存在しないローカルのトークン/プロパティを含める

これにより、継承とローカルの内容を上記の上書きルールに従って組み合わせた新しい解決済みグループが作成されます。

注意: 実装

6.4.3 継承の意味論

グループ拡張はローカルのプロパティが同一パスの継承プロパティを上書きするという 深いマージ の振る舞いに従います:

  1. 継承: 参照されたグループのすべてのトークンとプロパティが継承されます(循環参照は許可されません)
  2. 上書き: 継承グループとローカルグループが同じパスでトークンを定義している場合、ローカル定義が勝ちます
  3. 追加: 新しいパスを持つローカルのトークン/プロパティは継承されたものと共存します

上書きルール:

  • 同一パス = 上書き: 継承元とローカルの両方が同一パスでトークンを定義している場合、ローカル定義が優先されます
  • 異なるパス = マージ: 異なるパスのトークンは最終結果で共存します
  • 完全な置換: 上書き時にはトークン定義全体が置換され、プロパティごとの部分マージは行われません

input-amount の結果:

トークン 最終値
field.width "100px"(ローカル上書きが勝つ)
field.background {"colorSpace": "srgb", "components": [1, 1, 1], "hex": "#ffffff"} (継承され、ローカル上書きなし)

多段階上書きの例:

extended の結果:

トークン 最終値 由来
color "#red" 上書き
spacing "16px" 継承
border "1px solid" 追加

6.4.4 循環参照の防止

グループは循環的な継承チェーンを作成しては MUST NOT いけません。次のパターンは 無効 です:

有効な継承パターン:

6.4.5 サポートされる参照形式

$extendsデザイントークンのエイリアス と同じ参照形式をサポートします。

6.4.6 エラー条件

$extends のエラー処理は JSON Schema の $ref のエラーパターンに従います:

  • 解決不能な参照: ターゲットグループが見つからない場合
  • 無効なターゲット: 参照が非グループ(例:トークン)を指している場合
  • 循環参照: 拡張チェーンがサイクルを作る場合
  • 制約違反: ローカルプロパティが継承された制約に違反する場合

ツールは MUST JSON Schema バリデータが $ref 解決で使用するのと同様のエラー検出および報告パターンを実装しなければなりません。

6.4.7 実装ガイダンス

デザイントークン解析を実装するツールは次のいずれかを MAY 選択できます:

  1. $ref へ変換: $extends を標準 JSON Schema の $ref 構文に変換し、既存の JSON Schema ライブラリで検証を行う
  2. ネイティブ実装: $extends を直接実装し、JSON Schema の $ref 処理と同じアルゴリズムを使用する
  3. ハイブリッド: 検証に JSON Schema ライブラリを使用しながら、デザイントークン固有の参照構文を維持する

実装手法にかかわらず、意味論的な振る舞いは JSON Schema 2020-12 以降に規定される $ref と等価であることが MUST です。

6.4.8 JSON Schema 仕様との関係

本仕様は $extends を JSON Schema の $ref キーワードの構文糖衣として定義しており、デザイントークン固有の参照構文を提供しつつ等価な振る舞いを維持します。上記の深いマージ意味論は JSON Schema 2020-12 が兄弟プロパティとともに $ref を扱う方法と整合します。

JSON Schema に馴染みのある実装者向けには、$extends の動作は次と等価です:

  • "$extends": "{group}""$ref": "#/group" に変換する
  • JSON Schema 2020-12 の $ref 解決を兄弟プロパティ評価とともに適用する

ツールは MAY 次のいずれかを選択できます:

  1. 変換アプローチ: $extends$ref に変換して JSON Schema ライブラリを使用する
  2. 直接実装: 上記の深いマージ動作を直接実装する
  3. ハイブリッド: 検証に JSON Schema を使用しつつデザイントークン構文を維持する

実装手法にかかわらず、ユーザーに見える振る舞いは本仕様で説明される深いマージ意味論と一致することが MUST です。

6.5 空のグループ

グループは空(トークンやネストグループを含まない)であっても MAY かまいません。即時の目的がないように見えても、次の利点があります:

注意: トークンとグループの曖昧さ

6.6 参照と JSON Pointer 統合

中括弧構文({group.token})を使った現行のトークン参照構文は後方互換性と開発者の使いやすさのために維持されます。しかし、ツールは高度なユースケース向けに JSON Pointer 表記も MAY サポートできます。

6.6.2 JSON Pointer サポート

ツールは [rfc6901] で定義される JSON Pointer 参照を MUST サポートし、$ref プロパティを使用する必要があります:

6.7 処理ルール

6.7.1 トークン解決順序

グループを処理する際、ツールは次の解決順序に従うことが MUST です:

  1. ローカルトークン - $value プロパティを持つ直接の子
  2. ルートトークン - $root 名のトークン
  3. 拡張トークン - $extends を通じて継承されたトークン(上書きされていない場合)
  4. ネストされたグループ - 再帰的に処理

6.7.2 パスの構築

トークンパスはグループ名とトークン名をピリオド(.)で連結して構築します。予約トークン名 $root は明示的かつ曖昧さのない参照を維持するためパスに含まれます。

例:

場所 パス 注記
/color/accent/$root color.accent.$root トークンパス
/color/accent/light color.accent.light トークンパス
/color/accent トークン解決には無効だが、グループには有効

6.7.3 型の継承

型の解決は次の優先順に従います:

  1. トークンの明示的な $type プロパティ (最優先)
  2. (拡張解決後の)解決済みグループの $type プロパティ
  3. 親グループの $type プロパティ(階層を上って検索)
  4. 型が判定できない場合はトークンは無効

拡張を伴う型解決: $extends は JSON Schema の $ref 意味論に従うため、型継承の振る舞いは明示的なマージ規則ではなく制約検証によって決定されます。ローカルの型制約は継承された制約とともに JSON Schema の検証パターンに従って評価されます。

この例では、グループ extended はローカルの $type: "dimension" 制約と、参照された base グループからの適用可能な制約の両方を満たす必要があり、JSON Schema の制約解決ルールに従います。

6.7.4 循環参照検出

ツールは次での循環参照を検出してエラーを投げることが MUST です:

  • トークンのエイリアス(エイリアス参照{token}
  • グループ拡張($extends 参照)
  • JSON Pointer 参照(サポートされる場合の $ref プロパティ)

$extends の循環参照検出は JSON Schema の $ref の要件と同じです。ツールは循環検出のために JSON Schema バリデータが使うアルゴリズムを実装することを SHOULD 推奨します。

ツールはこの循環参照をグループ abc に影響するエラーとして MUST 報告しなければなりません。

6.8 移行と互換性

本仕様は既存のデザイントークンファイルとの後方互換性を考慮して設計されています。本仕様を実装するツールは:

6.9

6.9.1 ルートトークンを持つ基本グループ

6.9.2 上書きを伴うグループ拡張の例

解決済みトークン:

  • {input-amount.field.width}{ "value": 100, "unit": "px" } (上書き)
  • {input-amount.field.background}#ffffff(input から継承)

これはコンポーネントが基底コンポーネントを拡張しつつ、特定のトークンを上書きし他を継承する主要なユースケースを示します。

6.9.3 複雑な階層構造

この構造は次のトークン参照でアクセス可能なトークンを生成します:

トークン参照 解決済み値
{color.brand.$root} {"colorSpace": "srgb", "components": [0, 0.4, 0.8], "hex": "#0066cc"}
{color.brand.light} {"colorSpace": "srgb", "components": [0.2, 0.533, 0.867], "hex": "#3388dd"}
{color.semantic.success.$root} {"colorSpace": "srgb", "components": [0, 0.8, 0.4], "hex": "#00cc66"}
{color.semantic.error.dark} {"colorSpace": "srgb", "components": [0.6, 0, 0], "hex": "#990000"}

6.10 ユースケース

6.10.1 ファイル作成と構成

グループを使用することで、トークンファイルの作者はファイルをより整理しやすくなります。関連するトークンをグループにネストしてチームの命名規則やメンタルモデルと整合させることができます。手動でファイルを作成する場合、グループを使うほうが接頭辞を繰り返すフラットなトークン一覧より冗長性が少なく済みます。

例えば:

...は次のようなフラット構造より入力が簡単で読みやすい場合が多いです:

6.10.2 GUI ツール

GUI を介してトークンを選択・編集させるツールはグルーピング構造を使って、折りたたみ可能なツリービューのような段階的な開示(progressive disclosure)を表示することが MAY あります。

Figure 1 段階的開示(Progressive disclosure)グループ

6.10.3 変換ツール

トークン名は同一ファイル内で一意であることが保証されません。同じ名前が異なるグループで使われることがあります。また、変換ツールはコード内の変数のように一意に識別可能な方法でデザイントークンを出力する必要がある MAY あります。したがって、変換ツールはファイル内で一意であるためデザイントークンのパスを使用することを SHOULD です。

例えば、変換ツール のような Style Dictionary は、次のようなデザイントークンファイルを使用することがあります:

...そしてパスを連結して変数名を作成することで、次のようにSass変数として出力できます:

7. エイリアス / 参照

明示的な値を持つ代わりに、トークンは別のトークンの値を参照することができます。言い換えれば、あるトークンが別のトークンのエイリアスである場合があります。本仕様では「エイリアス」と「参照」を同義語と見なし、互換的に使用します。

エイリアスは次のような用途で有用です:

7.1 参照構文

デザイントークンは、トークンファイル内のコンテンツを参照するために異なる 2 つの構文をサポートします:

7.1.1 中括弧構文(トークン参照)

中括弧構文は完全なトークン値を参照するために設計されており、常にターゲットトークンの$valueプロパティに解決されます。

この例では、{colors.blue} は完全な色オブジェクト {"colorSpace": "srgb", "components": [0, 0.4, 0.8], "hex": "#0066cc"} に解決されます。

重要:中括弧参照は完全なトークン($value プロパティを持つオブジェクト)のみをターゲットにでき、トークン値内の個々のプロパティや任意のドキュメント位置を指すことはできません。

7.1.2 JSON Pointer 構文(必須サポート)

トークン値内の特定のプロパティやドキュメント構造の他の部分にアクセスする高度なユースケースでは、トークンは [rfc6901] で定義される JSON Pointer 表記を $ref プロパティを使ってサポートすることが MUST です。本仕様を実装するツールは JSON Pointer 構文を MUST サポートします。

この例では:

  • "$ref": "#/colors/blue/$value""{colors.blue}" と同等です
  • "$ref": "#/colors/blue/$value/components/0" は blue 色の赤成分(0)だけにアクセスします

主な違い:

側面 中括弧 {token} JSON Pointer $ref
ターゲット 完全なトークンのみ ドキュメント内の任意の位置
暗黙のパス 常に /$value を付加する 明示的なフルパスが必要
ユースケース トークン間の参照 プロパティレベルの参照
構文 {group.token} #/group/token/$value

7.2 参照の解決

ツールがトークンの実際の値を必要とする場合、参照を解決する(参照先トークンを検索してその値を取得する)ことが MUST です。ツールは参照を保持し、実際の値が必要なときのみ解決することを SHOULD です。例えば、デザインツール では、エイリアスで参照されているトークンの値が変更された場合、そのエイリアスが使用されているすべての場所に変更が反映されるべきです(SHOULD)。

7.2.1 解決アルゴリズム

中括弧参照の場合:

  1. 参照を解析: {group.token} からトークンパスを抽出する
  2. パスを分割: セグメント ["group", "token"] に変換する
  3. トークンへ移動: ターゲットトークンオブジェクトを見つける
  4. トークンを検証: ターゲットが $value プロパティを持つことを確認する
  5. トークン値を返す: $value の内容を抽出して返す
  6. サイクルを確認: 解決中の参照のスタックを維持する

JSON Pointer 参照の場合:

  1. JSON Pointer を解析: #/path/to/target からパスセグメントを抽出する
  2. ドキュメントをトラバース: 各パスセグメントを通じて移動する
  3. JSON Pointer ルールを適用:
    • 配列コンテキストの数値セグメントは配列インデックスになる
    • オブジェクトコンテキストのすべてのセグメントはプロパティ名になる
    • エスケープ文字(~0, ~1)を処理する
  4. ターゲットを検証: 最終ターゲットが存在しアクセス可能であることを確認する
  5. 値を返す: 解決された値を抽出して返す

7.2.2 連鎖参照

エイリアスは他のエイリアスを参照することが MAY あります。その場合、ツールは明示的な値を持つトークンが見つかるまで各参照をたどることが MUST です。

この例では、{semantic.link} はチェーン semantic.linksemantic.brandbase.primary をたどって、{base.primary} と同じ色値に解決されます。

7.2.3 循環参照

参照は循環しては MUST NOT です。デザイントークンファイルに循環参照が含まれる場合、そのチェーン内のすべてのトークンの値は不明となり、適切なエラーまたは警告メッセージをユーザーに表示することが SHOULD です。

ツールはこの循環参照を検出し、循環チェーン内のすべてのトークンに影響するエラーとして報告することが MUST です。

7.3 プロパティレベルの参照

JSON Pointer 構文は、複合トークン内の完全な値だけでなく特定のプロパティへの参照を可能にし、トークンの構成要素の細かい再利用をセマンティックな関係を保ちながら実現します。

重要:プロパティレベルの参照は JSON Pointer 構文($ref)を必要とし、中括弧構文では表現できません。

7.3.1 色コンポーネント参照

7.3.2 寸法コンポーネント参照

この例では:

  • layout.smallbase.spacing と同じ数値(16)を使い、単位は異なり rem を使います
  • layout.largebase.spacing と同じ単位(px)を使い、数値は異なり 32 を使います

7.3.3 タイポグラフィコンポーネント参照

この例では:

  • 両方の見出しは base.text から fontFamilylineHeight を継承します
  • 各見出しは独自の fontSizefontWeight を定義します
  • ベースのフォントファミリーや行間の変更は自動的にすべての見出しに反映されます

7.4 JSON Pointer パスの構築と解決

JSON Pointer 構文は、デザイントークンドキュメント構造内の任意の位置に直接アクセスする手段を提供し、[rfc6901] に定義された標準の JSON Pointer ルールに従います。

7.4.1 パス構築ルール

  • ルート参照: #/(ドキュメントルートを指す)
  • オブジェクトプロパティ: / は各レベルを分離する(例:#/group/token/$value
  • 配列インデックス: 配列要素に対する数値インデックス(例:#/color/$value/components/0
  • 特殊文字: JSON Pointer ルールに従ってエスケープする必要がある:
    • ~~0
    • /~1

7.4.2 トークン値アクセスパターン

デザイントークンは値を $value プロパティに格納するため、トークン値への JSON Pointer パスは予測可能なパターンに従います:

JSON Pointer 等価な中括弧参照 説明
#/colors/blue/$value {colors.blue} 完全なトークン値
#/colors/blue/$value/hex N/A 色の hex プロパティ
#/colors/blue/$value/components/0 N/A 色の最初のコンポーネント
#/colors/blue/$type N/A トークンの型メタデータ

7.4.3 JSON Pointer の解決アルゴリズム

  1. JSON Pointer を解析: #/path/to/target からパスセグメントを抽出する
  2. ドキュメントを横断: 各パスセグメントを通じて移動する
  3. JSON Pointer ルールを適用:
    • 配列コンテキストの数値セグメントは配列インデックスになる
    • オブジェクトコンテキストのすべてのセグメントはプロパティ名になる
    • エスケープ文字(~0, ~1)を処理する
  4. ターゲットを検証: 最終ターゲットが存在しアクセス可能であることを確認する
  5. 値を返す: 解決された値を抽出して返す

7.4.4 中括弧解決アルゴリズム

  1. 参照を解析: {group.token} からトークンパスを抽出する
  2. パスを分割: セグメント ["group", "token"] に変換する
  3. トークンへ移動: ターゲットトークンオブジェクトを見つける
  4. トークンを検証: ターゲットが $value プロパティを持つことを確認する
  5. トークン値を返す: $value の内容を抽出して返す
  6. サイクルを確認: 解決中の参照のスタックを維持する

7.4.5 エラー条件

ツールは次のエラーを報告することが MUST です:

  • 無効な構文: 中括弧や JSON Pointer 構文の不正
  • 解決不能なパス: ターゲットパスがドキュメント内に存在しない
  • 無効なトークン参照: 中括弧構文がトークン以外を指している場合
  • 循環参照: 自分自身に戻る参照チェーン
  • 型の不一致: 参照された値が期待される型と互換性がない場合

7.4.6 パス例

トークンパス JSON Pointer 中括弧構文
ルートトークン "primary" #/primary {primary}
ネストされたトークン #/colors/blue {colors.blue}
配列要素 #/color/components/0 サポートされていません
スペースを含むプロパティ #/brand colors/primary {brand colors.primary}
スラッシュを含むプロパティ #/my~1group/token {my/group.token}

7.5 実装ガイダンス

7.5.1 ツール開発者向け

デザイントークン解析を実装するツールは次を MUST 満たす必要があります:

  1. 中括弧構文をサポートすること — トークン間参照の主要な参照機構として
  2. JSON Pointer 構文をサポートすること — ドキュメントレベルの参照およびプロパティアクセスのため
  3. 参照ターゲットを検証すること — 中括弧は有効なトークンを、JSON Pointer は有効なドキュメント位置を指すことを確認する
  4. 参照を解決すること — 本仕様の解決アルゴリズムに従う(Resolution Algorithms
  5. 循環参照を検出すること — 解決を試みる前に検出する
  6. 参照を保持すること — メモリ/ストレージ内で参照を保持し、値が必要なときのみ解決する
  7. 参照元の変更を伝播すること — 参照されるトークンの変更をすべてのエイリアスに伝播する

7.5.2 曖昧さ解消の例

明確な解決:

参照 結果 注記
#/ambiguous/data/0 10 JSON Pointer の配列インデックス
{ambiguous.metadata.0} "Info about first item" 中括弧によるオブジェクトプロパティ参照
{ambiguous.data.0} エラー 中括弧は配列インデックスにアクセスできない
{ambiguous.metadata.2} エラー プロパティ "2" は存在しない

7.5.3 エラー条件

ツールは次のエラーを報告することが MUST です:

  • 無効な参照構文: 中括弧や JSON Pointer の構文が不正
  • 解決不能な参照: ターゲットパスが存在しない
  • 循環参照: 自分自身に戻る参照チェーン
  • 型の不一致: 参照されたプロパティの型がトークンの型と互換性がない
  • 無効なプロパティパス: 存在しないプロパティを参照しようとした場合

7.6 JSON Schema との関係

本仕様で定義された参照構文は、JSON Schema のパターンと互換性を持ちながらデザイントークンの作成ニーズに対応します:

重要:デザイントークン内の JSON Pointer 参照($ref)は JSON Schema の $ref と同じ構文に従いますが、中括弧参照({token})はトークン専用で自動的に $value を解決し、トークンのみをターゲットとする点で標準の JSON Schema 参照とは異なる意味論を持ちます。


この仕様は、単純なトークンエイリアスから高度なプロパティレベルの関係まで、作成者の使いやすさと技術的精度のバランスを実現する柔軟で標準ベースの参照手法を提供します。

8.

多くのツールは、与えられたトークンがどのような種類の値を表すかを知る必要があり、それによって適切に処理できます。翻訳ツールはトークンの型に応じてトークンを異なる方法で変換またはフォーマットする必要がある MAY ことがあります。デザインツール は、特定の型のトークンを編集するときに色選択やスライダー、テキスト入力など異なる種類の入力 UI を提示することが MAY あります。スタイルガイド生成ツールは、トークンの型に応じて異なる種類のプレビューを使うことが MAY あります。

本仕様はデザインに特化した多数の型を定義しており、すべてのデザイントークンはこれらのいずれかの型を MUST 使用しなければなりません。さらに、そのトークンの値は本仕様で定義された選択された型のルールと構文に従うことが MUST です。

トークンの型は、選択した型を指定する $type プロパティを直接与えることで設定できます。あるいは、親グループのいずれかから型を継承するか、望ましい型を持つトークンのエイリアスである場合もあります。

トークンに明示的な型が設定されていない場合、ツールはそのトークンを無効として扱い、値から他の型を推測しようとしては MUST なりません。

明示的な型が設定されているが、値が期待される構文と一致しない場合、そのトークンは無効であり、適切なエラーをユーザーに表示することが SHOULD です。言い換えれば、$type プロパティはトークンに許容される値の種類を宣言するものです。(これは Java や TypeScript のようなプログラミング言語での型付けに似ており、宣言された型と互換性のない値はコンパイルエラーになります。)

8.1

UI の色を表します。色の表現方法の詳細は Color モジュールを参照してください。

8.2 寸法

位置、幅、高さ、半径、厚さなど、UI における一方向の距離量を表します。$type プロパティは文字列 dimension に設定されていることが MUST です。値は数値の value(整数または浮動小数点)と測定の unit"px" または "rem")を含むオブジェクトであることが MUST です。

キー 必須 説明
value number Y 数値を表す整数または浮動小数点値。
unit string Y 距離の単位。サポートされる値: "px", "rem"

例:

8.2.1 検証

  • $value.unit"px" または "rem" のみ許容されます。
    • px: ビューポート上の理想化されたピクセルを表します。Android では dp、iOS では pt に相当します。翻訳ツールは必要に応じてこれらや他の同等単位へ変換することを SHOULD です。
    • rem: システムのデフォルトフォントサイズの倍数を表します(ユーザーによって設定可能な場合がある)。1rem はデフォルトフォントサイズの 100% を意味します。Android での 1rem の相当は 16sp です。すべてのプラットフォームに rem の相当があるわけではないため、翻訳ツールは既定フォントサイズ(通常 16px)を仮定して固定 px サイズへロスのある変換を行うことが MAY あります。
  • $value.value0 の場合でも $value.unit は必須です。

8.3 フォントファミリー

以下のような単純なアプローチは仕様の初期段階では適切かもしれませんが、プラットフォームや OS、ブラウザの制約により想像以上に複雑になる可能性があります。

フォント名、または優先順(最も優先されるものから順)で並べたフォント名の配列を表します。$type プロパティは文字列 fontFamily に設定されていることが MUST です。値は単一のフォント名を含む文字列、または各要素が単一フォント名である文字列の配列のいずれかであることが MUST です。

例:

8.4 フォントウェイト

フォントの太さを表します。$type プロパティは文字列 fontWeight に設定されていることが MUST です。値は [1, 1000] の範囲の数値、または下表に定義された事前定義された文字列値のいずれかである必要があります。

小さい数値はより細いウェイトを、大きい数値はより太いウェイトを表します(OpenType の wght タグ仕様に従う)。事前定義された文字列値は特定の数値へのエイリアスです。例えば 100"thin""hairline" は同一の値を表します。

数値 文字列エイリアス
100 thin, hairline
200 extra-light, ultra-light
300 light
400 normal, regular, book
500 medium
600 semi-bold, demi-bold
700 bold
800 extra-bold, ultra-bold
900 black, heavy
950 extra-black, ultra-black

[1, 1000] の範囲外の数値および大文字小文字の違いのみを伴うものを含むその他の文字列値は無効であり、ツールはこれらを拒否することが MUST です。

例:

8.5 継続時間

アニメーションやアニメーションサイクルが完了するまでにかかる時間(ミリ秒単位)を表します。$type プロパティは文字列 duration に設定されていることが MUST です。値は数値の value(整数または浮動小数点)と時間の unit"ms" または "s")を含むオブジェクトであることが MUST です。ミリ秒は 1 秒の千分の一です。

キー 必須 説明
value number Y 数値を表す整数または浮動小数点値。
unit string Y 時間の単位。サポートされる値: "ms"(ミリ秒)、"s"(秒)。

例:

8.5.1 検証

  • $value.unit"ms" または "s" のみ許容されます。

8.6 キュービックベジェ

アニメーションの期間中にプロパティの値がどのように進行するかを表し、加速、減速、バウンスのような視覚効果を作ります。$type プロパティは文字列 cubicBezier に設定されていることが MUST です。値は 4 つの数値を含む配列であることが MUST です。これらの数値は 2 点(P1, P2)を表し、それぞれ x 座標と y 座標を持ちます [P1x, P1y, P2x, P2y]。P1 と P2 の y 座標は任意の実数(範囲 [-∞, ∞])を取り得ますが、x 座標は [0, 1] の範囲に制限されます。

例:

8.7 数値

数値を表します。正の数、負の数、小数を含むことができます。数値トークンの用途例としては グラデーション停止位置 や単位を伴わない行の高さなどがあります。$type プロパティは文字列 number に設定されていることが MUST です。値は JSON の数値であることが MUST です。

8.8 追加の型

このセクションは規範的ではありません。

ここにまだ文書化されていない型としては次のようなものが含まれる可能性があります:

9. 複合型

前章で定義された color や dimension のような型はすべて単一の値を持ちます。たとえば、色トークンの値は「1つの」色です。しかし、UI デザインには複数の値の組み合わせとなる側面もあります。たとえばシャドウスタイルは、色、X と Y のオフセット、ブラー半径、スプレッド半径の組み合わせです。

すべてのシャドウスタイルは同じ要素(色、X/Y オフセットなど)を持ちますが、それぞれの値は異なります。さらに、各要素の値(「サブ値」とも呼ばれる)は常に同じ型になります。シャドウの色は常にcolor 型でなければならず、X オフセットは常にdimension 型でなければなりません。したがってシャドウスタイルはあらかじめ定義された構造に従う複数の値の組み合わせ、つまりそれ自体が「型」であり、このような型を複合型(composite types)と呼びます。

具体的には、複合型は次の特徴を持ちます:

9.1 複合型における配列のエイリアス

複合型が配列プロパティを含む場合、配列内の各要素は明示的な値か適切な型のトークンへの参照のいずれかになります。配列内の参照は単一の値に解決され、配列の展開やフラット化は行われません。これにより、配列要素の一部が参照で他が明示値であるような柔軟な構成が可能になります。

配列のエイリアスは次の原則に従います:

  1. 単一値の解決:配列内の参照は常に適切な型の単一の値に解決され、配列自体にはなりません。
  2. フラット化はしない:配列を参照する場合、参照された配列全体が参照元配列の単一要素として扱われます。
  3. 型の安全性:配列要素(明示値または参照のいずれも)がその複合型で期待されるサブ値の型に準拠している必要があります。
  4. 混合構成:配列は明示値と参照を自由に混在させることができます。

たとえば、配列値を持つシャドウトークンは、別のシャドウトークンへの参照と明示的なシャドウオブジェクトを混在させることができます:

{
    "layered-shadow": {
        "$type": "shadow",
        "$value": [
        "{base.shadow}",
        {
            "color": "{brand.accent}",
            "offsetX": { "value": 4, "unit": "px" },
            "offsetY": { "value": 4, "unit": "px" },
            "blur": { "value": 8, "unit": "px" },
            "spread": { "value": 0, "unit": "px" }
        }
        ]
    }
    }
    

型が複合型であるデザイントークンは「複合(design)トークン」と呼ばれることもあります。型以外に複合トークンは他のプロパティ($description$extensions など)を持つことができ、他のデザイントークンから参照されることもあります。

9.2 グループと複合トークンの違い

一見すると、グループと複合トークンは非常に似て見えますが、解決しようとする問題が異なるため重要な違いがあります:

9.3 ストロークスタイル

線やボーダーに適用されるスタイルを表します。$type プロパティは文字列 strokeStyle に設定されていることが MUST です。値は次のいずれかであることが MUST です:

Issue 98: Stroke style type feedback Composite Type Feedback
現在のストロークスタイル仕様は目的に適しているでしょうか?SVG の stroke-linejoinstroke-miterlimitstroke-dashoffset と同等のサブ値が必要ですか?

9.3.1 文字列値

文字列のストロークスタイル値は次の事前定義値のいずれかであることが MUST です:

  • solid
  • dashed
  • dotted
  • double
  • groove
  • ridge
  • outset
  • inset

これらの値は CSS の同等の「line style」値と同じ意味を持ちます。CSS 仕様に従い、正確なレンダリングは実装依存です。たとえば dashed スタイルでのダッシュとギャップの長さはツールによって異なる場合があります。

9.3.2 オブジェクト値

オブジェクトとして表されるストロークスタイル値は、次のプロパティを持つことが MUST です:

  • dashArray: dimension 値 および/または dimension トークンへの参照の配列。交互に現れるダッシュとギャップの長さを指定します。配列の各要素は明示的な dimension 値か dimension トークンへの参照でなければなりません。要素数が奇数の場合は、その値のリストを繰り返して偶数にします。
  • lineCap: 次のいずれかの事前定義文字列値のいずれかである必要があります:"round""butt""square"。これらは SVG の stroke-linecap と同じ意味を持ちます。

9.3.3 フォールバック

文字列値とオブジェクト値は相互排他的な表現手段です。たとえば insetgroove のような文字列値は、ボーダーの一部の領域で色を明るく/暗くする実装固有の手段を必要とするため、単純に dashArraylineCap で表現できない場合があります。逆に、正確に定義された dashArraylineCap の組合せは、実装依存であるため dasheddotted キーワードと完全に同一の見た目を保証しません。

さらに、一部のツールやプラットフォームはこの型が表現できるすべてのストロークスタイルをサポートしていない場合があります。そのため、ツールはネイティブにサポートしていない strokeStyle トークンを表示またはエクスポートする際に、サポートされている最も近い近似にフォールバックするべきです。

「最も近い近似」の選択方法は実装依存ですが、以下の例はツールがいくつかの状況で採用しうるフォールバックを示します。

9.4 ボーダー

ボーダースタイルを表します。$type プロパティは文字列 border に設定されていることが MUST です。値は次のプロパティを持つオブジェクトであることが MUST です:

Issue 99: Border type feedback Composite Type Feedback
現在のボーダー仕様は目的に適していますか?outset、border images、複数ボーダーなど、いくつかのプラットフォームやデザインツール が持つ機能に対応するために追加のサブ値が必要でしょうか?

9.5 トランジション

2 つの状態の間のアニメーション遷移を表します。$type プロパティは文字列 transition に設定されていることが MUST です。値は次のプロパティを持つオブジェクトであることが MUST です:

Issue 103: Transition type feedback Composite Type Feedback
現在のトランジション仕様は目的に適していますか?これらのトランジションパラメータは、UI のどの側面を遷移させるかや開始・終了状態を指定できない点を考慮して有用でしょうか?

9.6 シャドウ

シャドウスタイルを表します。$type プロパティは文字列 shadow に設定されていることが MUST です。値は次のいずれかであることが MUST です:

値が配列の場合、各要素は明示的なシャドウオブジェクトか別のシャドウトークンへの参照のいずれかでなければなりません。配列内の参照は単一のシャドウオブジェクトに解決され、配列のフラット化は発生しません。

各シャドウオブジェクト(明示的か参照によるものかを問わず)は次のプロパティを MUST 持ちます:

Issue 100: Shadow type feedback Composite Type Feedback
現在のシャドウ仕様は目的に適していますか?一部のツールやプラットフォームが持つような複数シャドウのサポートを追加する必要はありますか?

9.7 グラデーション

色のグラデーションを表します。$type プロパティは文字列 gradient に設定されていることが MUST です。値はグラデーションストップオブジェクトおよび/またはグラデーショントークンへの参照の配列であることが MUST です。配列の各要素は明示的なグラデーションストップオブジェクトかグラデーショントークンへの参照でなければなりません。参照は単一のグラデーションオブジェクトに解決され、配列のフラット化は行われません。

各グラデーションストップオブジェクト(明示的または参照)は次の構造を MUST 持ちます:

グラデーション軸の始点または終点(それぞれ position が 0 または 1)にストップがない場合、各端に最も近いストップの色をその端まで延長します。

Issue 101: Gradient type feedback Color Type Enhancements
現在のグラデーション仕様は目的に適していますか?線形、放射状、円錐状などのグラデーションの種類も指定する必要がありますか?

9.8 タイポグラフィ

タイポグラフィスタイルを表します。$type プロパティは文字列 typography に設定されていることが MUST です。値は次のプロパティを持つオブジェクトであることが MUST です:

Issue 102: Typography type feedback Typography Type Enhancements

現在のタイポグラフィ仕様は目的に適していますか?lineHeight サブ値に number、dimension、または新しい lineHeight 型のどれを使うべきか といった議論があります。

A. 課題の要約

B. 参考文献

B.1 規範的参照文献

[json-schema-2020-12]
JSON Schema: A Media Type for Describing JSON Documents. Draft 2020-12。Austin Wright; Henry Andrews; Ben Hutton; Greg Dennis。Internet Engineering Task Force (IETF)。2022年6月10日。 Internet-Draft。URL: https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-01
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels。S. Bradner。IETF。1997年3月。Best Current Practice。URL: https://www.rfc-editor.org/rfc/rfc2119
[rfc6901]
JavaScript Object Notation (JSON) Pointer。P. Bryan(編集);K. Zyp;M. Nottingham(編集)。IETF。2013年4月。 Proposed Standard。URL: https://www.rfc-editor.org/rfc/rfc6901
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words。B. Leiba。IETF。2017年5月。Best Current Practice。URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC8259]
The JavaScript Object Notation (JSON) Data Interchange Format。T. Bray(編集)。IETF。2017年12月。Internet Standard。URL: https://www.rfc-editor.org/rfc/rfc8259