目次 |
|
JSON(JavaScript Object Notation)スキーマは、メディアタイプapplication/schema+jsonを定義します。これは、JSONデータの構造を定義するためのJSONベースのフォーマットです。JSONスキーマは、特定のアプリケーションに必要なJSONデータとその使用方法に関する規約を提供します。JSONスキーマは、JSONデータの検証、ドキュメント化、ハイパーリンクナビゲーション、およびインタラクション制御を定義することを目的としています。
このインターネットドラフトは、BCP 78およびBCP 79の規定に完全に準拠してIETFに提出されます。
インターネットドラフトは、インターネットエンジニアリングタスクフォース(IETF)、その分野、およびそのワーキンググループの作業文書です。他のグループもインターネットドラフトとして作業文書を配布する場合があることに注意してください。
インターネットドラフトは、最大6か月間有効なドラフト文書であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。インターネットドラフトを参照資料として使用したり、「進行中の作業」として以外の方法で引用したりすることは不適切です。
現在のインターネットドラフトのリストは、http://www.ietf.org/ietf/1id-abstracts.txtからアクセスできます。
インターネットドラフトシャドウディレクトリのリストは、http://www.ietf.org/shadow.htmlからアクセスできます。
このインターネットドラフトは、2010年6月8日に期限切れになります。
著作権(c)2009 IETF Trustおよび文書作成者として識別されている人物。全著作権所有。
この文書は、BCP 78およびこの文書の発行日に有効なIETF文書に関するIETFトラストの法的規定(http://trustee.ietf.org/license-info)の対象となります。これらの文書は、この文書に関するあなたの権利と制限を説明しているので、注意深く確認してください。この文書から抽出されたコードコンポーネントには、トラスト法的規定のセクション4.eに記載されているSimplified BSD Licenseのテキストが含まれている必要があり、BSD Licenseに記載されているように保証なしで提供されます。
1. はじめに
2. 表記規則
3. 概要
3.1. 用語
3.2. 設計上の考慮事項
4. スキーマ/インスタンスの関連付け
4.1. 自己記述型スキーマ
5. コアスキーマ定義
5.1. type
5.2. properties
5.3. items
5.4. optional
5.5. additionalProperties
5.6. requires
5.7. minimum
5.8. maximum
5.9. minimumCanEqual
5.10. maximumCanEqual
5.11. minItems
5.12. maxItems
5.13. pattern
5.14. maxLength
5.15. minLength
5.16. enum
5.17. title
5.18. description
5.19. format
5.20. contentEncoding
5.21. default
5.22. maxDecimal
5.23. disallow
5.24. extends
6. ハイパースキーマ
6.1. links
6.1.1. リンク記述オブジェクト
6.2. fragmentResolution
6.2.1. ドット区切りフラグメント解決
6.3. root
6.4. readonly
6.5. pathStart
6.6. mediaType
6.7. alternate
7. セキュリティに関する考慮事項
8. IANAに関する考慮事項
8.1. リンク関係のレジストリ
9. 参考文献
9.1. 規範的な参考文献
9.2. 参考情報
付録A. 変更履歴
付録B. 未解決の問題
目次 |
JSON(JavaScript Object Notation)スキーマは、JSONデータの構造を定義するためのJSONメディアタイプです。JSONスキーマは、特定のアプリケーションに必要なJSONデータとその使用方法に関する規約を提供します。JSONスキーマは、JSONデータの検証、ドキュメント化、ハイパーリンクナビゲーション、およびインタラクション制御を定義することを目的としています。
目次 |
この文書のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、RFC 2119に記載されているとおりに解釈されます。
目次 |
JSONスキーマは、他のJSONドキュメントの構造を記述するためのメディアタイプapplication/schema+jsonを定義します。JSONスキーマはJSONベースであり、許容値、説明、および他のリソースとの関係の解釈に関してJSONドキュメントの構造を記述するための機能が含まれています。
JSONスキーマフォーマットは、いくつかの個別の定義に分かれています。最初の定義はコアスキーマ仕様です。この定義は、主にJSON構造を記述し、構造内の有効な要素を指定することに関係しています。2番目の定義はハイパースキーマ仕様であり、ハイパーリンクとして解釈できる構造内の要素を定義することを目的としています。ハイパースキーマはJSONスキーマに基づいて構築され、他のJSONドキュメントのハイパーリンク構造を記述します。これにより、ユーザーエージェントはスキーマに基づいてJSONドキュメントを正常にナビゲートできます。
累積的にJSONスキーマは、プロパティ値に必要なタイプと制約を定義し、リソースを記述し、表現内のハイパーリンクを決定する目的でプロパティ値の意味を定義するために使用できるメタドキュメントとして機能します。
製品を記述するJSONスキーマの例は次のようになります
{ "name":"Product", "properties":{ "id":{ "type":"number", "description":"Product identifier" }, "name":{ "description":"Name of the product", "type":"string" }, "price":{ "type": "number", "minimum":0 }, "tags":{ "optional":true, "type":"array", "items":{ "type":"string" } } }, "links":[ { "rel":"full", "href":"{id}" }, { "rel":"comments", "href":"comments/?id={id}" } ] }
このスキーマは、インスタンスJSONドキュメントのプロパティとその必須プロパティ(id、name、およびprice)、およびオプションのプロパティ(tags)を定義します。これは、インスタンスJSONドキュメントのリンク関係も定義します。
目次 |
この仕様では、スキーマはJSONスキーマ定義を示すために使用され、インスタンスはスキーマが記述および検証するJSONオブジェクトまたは配列を指します。
目次 |
JSONスキーマメディアタイプは、データを含むJSON表現の構造を規定しようとするのではなく、JSON表現の解釈と検証方法を柔軟に伝えるための個別のフォーマットを提供します。これにより、ユーザーエージェントは許容可能な構造を適切に理解し、JSONドキュメント内のハイパーリンク情報を推定できます。この仕様はプロトコルを定義していません。基盤となるプロトコル(HTTPなど)は、クライアントサーバーインターフェースのセマンティクス、JSON表現にリンクされたリソース表現の取得、およびそれらのリソースの変更を十分に定義する必要があります。このフォーマットの目標は、RESTアーキテクチャを活用する既存のプロトコルを使用して、さまざまなサービスの既存のJSON表現で利用可能な既存の情報を活用できるように、JSON構造を十分に記述することです。
目次 |
JSONスキーマインスタンスは、「describedby」関係によってスキーマに関連付けられます。ここで、スキーマは関係のターゲットとして定義されます。インスタンス表現は、application/jsonメディアタイプまたはその他のサブタイプである可能性があります。したがって、インスタンス表現がスキーマへの関係をどのように指定するかを指示することは、このドキュメントの規範的な範囲を超えています(このドキュメントはJSONスキーマメディアタイプのみを具体的に定義しているため)。ただし、インスタンスはスキーマを指定することをお勧めします。これにより、ユーザーエージェントはインスタンス表現を解釈でき、メッセージは自己記述的な特性を保持でき、インスタンスデータに関する帯域外情報の必要性を回避できます。JSONインスタンス(またはインスタンスのコレクション)の構造の意味を記述するスキーマへの関係を宣言するには、2つの方法が推奨されます。「describedby」という名前のMIMEタイプパラメータ、または「describedby」という関係を持つリンクヘッダーを使用する必要があります。
Content-Type: application/json; describedby=http://json.com/my-hyper-schema
または、ヘッダーを提供するプロトコル(HTTPなど)によってコンテンツが転送される場合は、リンクヘッダーを使用できます。
Link: <http://json.com/my-hyper-schema>; rel="describedby"
インスタンスは、データに適用可能なすべてのスキーマを示すために、複数のスキーマを指定できます。インスタンスデータは、定義されている複数のスキーマを持つ場合があります(インスタンスデータはそれらのスキーマに対して有効である必要があります)。または、ドキュメントがインスタンスのコレクションである場合、コレクションには異なるスキーマのインスタンスが含まれる場合があります。コレクションに異種インスタンスが含まれている場合、コレクションの各アイテムにどのスキーマを適用するかを明確にするために、スキーマでpathStart属性を指定できます。
目次 |
JSONスキーマ自体は、スキーマスキーマのインスタンスです。コアスキーマの自己記述型JSONスキーマはhttps://json-schema.dokyumento.jp/schemaにあり、ハイパースキーマの自己記述はhttps://json-schema.dokyumento.jp/hyper-schemaにあります。メディアタイプの定義を持つプロトコル内で使用されるすべてのスキーマには、自己記述型ハイパースキーマ、またはこのハイパースキーマを拡張する別のスキーマを参照するMIMEパラメータを含める必要があります。
Content-Type: application/json; describedby=http://www.json-schema.org/hyper-schema
目次 |
JSONスキーマは、インスタンスのさまざまな属性を定義し、その使用方法と有効な値を定義するJSONオブジェクトです。JSONスキーマは、スキーマ属性プロパティを持つJSONオブジェクトです。JSONスキーマの文法は次のとおりです。
JSONスキーマ定義の例は次のようになります。
{"description":"A person", "type":"object", "properties": {"name": {"type":"string"}, "age" : {"type":"integer", "maximum":125}} }
JSONスキーマオブジェクトには、スキーマ属性と呼ばれる次のプロパティのいずれかを含めることができます(すべての属性はオプションです)。
目次 |
共用体型定義-型の共用体を示す2つ以上のアイテムを持つ配列。配列内の各アイテムは、単純な型定義またはスキーマです。インスタンス値は、配列内の型の定義の1つと同じ型である場合、または配列内のスキーマの1つによって有効な場合に有効です。たとえば、文字列または数値が有効であることを示すには:{"type":["string","number"]}
単純型定義-プリミティブ型または単純型を示す文字列。次の文字列を使用できます。
string-値は文字列でなければなりません。
number-値は数値でなければなりません。浮動小数点数を使用できます。
integer-値は整数でなければなりません。浮動小数点数は使用できません。これは数値型のサブセットです。
boolean-値はブール値でなければなりません。
object-値はオブジェクトでなければなりません。
array-値は配列でなければなりません。
null-値はnullでなければなりません。これは主に、共用体型を使用してnull許容性を定義できるようにするためです。
any-値はnullを含む任意の型です。プロパティが定義されていないか、このリストにない場合、任意の型の値が許容されます。他の型の値はカスタム目的で使用できますが、仕様実装の最小限のバリデーターは、不明な型の値で任意のインスタンス値を許可できます。
目次 |
これは、インスタンスオブジェクトのプロパティに対応するプロパティ定義を持つオブジェクトである、オブジェクト型定義である必要があります。インスタンス値がオブジェクトの場合、インスタンスオブジェクトのプロパティ値は、このオブジェクトのプロパティ定義に準拠する必要があります。このオブジェクトでは、各プロパティ定義の値はスキーマである必要があり、プロパティの名前は、定義するインスタンスプロパティの名前である必要があります。
目次 |
これはスキーマまたはスキーマの配列である必要があります。これがオブジェクト/スキーマであり、インスタンス値が配列の場合、配列内のすべてのアイテムはこのスキーマに準拠する必要があります。これがスキーマの配列であり、インスタンス値が配列の場合、インスタンス配列内の各位置はこの配列の対応する位置にあるスキーマに準拠する必要があります。これはタプルタイピングと呼ばれます。タプルタイピングが使用される場合、追加のアイテムは、オブジェクトの追加プロパティと同じルールを使用して、additionalProperties属性によって許可、禁止、または制約されます。
目次 |
これは、インスタンスオブジェクト内のインスタンスプロパティがオプションであることを示します。デフォルトはfalseです。
目次 |
これは、オブジェクト型定義で明示的に定義されていないすべてのプロパティのデフォルトのプロパティ定義を提供します。値はスキーマである必要があります。falseが指定された場合、追加のプロパティは許可されず、スキーマを拡張することはできません。デフォルト値は、追加のプロパティに任意の値を許可する空のスキーマです。
目次 |
これは、このプロパティが包含インスタンスオブジェクトに存在する場合、requires属性で指定されたプロパティも包含インスタンスオブジェクトに存在する必要があることを示します。このプロパティの値は、必要なプロパティ名を示す文字列です。または、値はスキーマにすることもできます。その場合、プロパティが存在する場合、包含インスタンスはスキーマによって有効である必要があります。たとえば、オブジェクト型定義が次のように定義されている場合
{ "state": { "optional":true }, "town": { "requires":"state", "optional":true } }
townプロパティが含まれている場合、インスタンスにはstateプロパティを含める必要があります。 townプロパティが含まれていない場合、stateプロパティはオプションです。
目次 |
これは、インスタンス値の型が数値の場合のインスタンスプロパティの最小値を示します。
目次 |
これは、インスタンス値の型が数値の場合のインスタンスプロパティの最小値を示します。
目次 |
最小値が定義されている場合、これはインスタンスプロパティ値が最小値と等しくなることができるかどうかを示します。
目次 |
最大値が定義されている場合、これはインスタンスプロパティ値が最大値と等しくなることができるかどうかを示します。
目次 |
これは、配列がインスタンス値である場合の配列内の値の最小数を示します。
目次 |
これは、配列がインスタンス値である場合の配列内の値の最大数を示します。
目次 |
インスタンス値が文字列の場合、これはインスタンス文字列値が有効であるために一致する必要がある正規表現を提供します。正規表現は、ECMA 262 / Perl 5の正規表現仕様に従う必要があります。
目次 |
インスタンス値が文字列の場合、これは文字列の最大長を示します。
目次 |
インスタンス値が文字列の場合、これは文字列の最小長を示します。
目次 |
これは、インスタンスプロパティに対して有効な可能な値の列挙を提供します。これは配列である必要があり、配列内の各アイテムはインスタンス値の可能な値を表します。「enum」が含まれている場合、スキーマが有効であるためには、インスタンス値はenum配列内の値の1つである必要があります。
目次 |
これは、インスタンスプロパティの簡単な説明を提供します。値は文字列である必要があります。
目次 |
これは、インスタンスプロパティの目的の完全な説明を提供します。値は文字列である必要があります。
目次 |
このプロパティは、インスタンスプロパティ値で予期されるデータのタイプ、コンテンツタイプ、またはマイクロフォーマットを示します。 format属性は、以下にリストされている値のいずれかになります。その場合、フォーマットの説明されているセマンティクスに従う必要があります。フォーマットは、プリミティブ型(文字列、整数、数値、またはブール値)に意味を与えるためにのみ使用する必要があります。バリデーターは、インスタンス値がフォーマットに準拠していることを検証する必要はありません。以下のフォーマットが定義されています
有効なMIMEメディアタイプはすべてフォーマット値として使用できます。その場合、インスタンスプロパティ値はMIMEファイルの内容を表す文字列である必要があります。
date-time - これは、UTC時間でYYYY-MM-DDThh:mm:ssZのISO 8601形式の日付である必要があります。これは、日付/タイムスタンプの推奨形式です。
date - これは、YYYY-MM-DD形式の日付である必要があります。日付部分のみを転送する必要がある場合を除き、「date」の代わりに「date-time」形式を使用することをお勧めします。
time - これは、hh:mm:ss形式の時間である必要があります。時間部分のみを転送する必要がある場合を除き、「time」の代わりに「date-time」形式を使用することをお勧めします。
utc-millisec - これは、指定された時間と1970年1月1日午前0時(UTC)との差をミリ秒単位で測定した値である必要があります。値は数値(整数または浮動小数点数)である必要があります。
regex - 正規表現。
color - これはCSSの色です(「#FF0000」または「red」など)。
style - これはCSSスタイル定義です(「color: red; background-color:#FFF」など)。
phone - これは電話番号である必要があります(形式はE.123に従う場合があります)。
uri - この値はURIである必要があります。
email - これはメールアドレスである必要があります。
ip-address - これはIPバージョン4アドレスである必要があります。
ipv6 - これはIPバージョン6アドレスである必要があります。
street-address - これは番地である必要があります。
locality - これは市町村である必要があります。
region - これは地域である必要があります(米国の州、カナダの州など)。
postal-code - これは郵便番号である必要があります。
country - これは国名である必要があります。
追加のカスタムフォーマットは、フォーマットの定義へのURLで定義できます。
目次 |
インスタンスプロパティ値が文字列の場合、これは文字列をバイナリデータとして解釈し、このスキーマプロパティで指定されたエンコーディングを使用してデコードする必要があることを示します。 RFC 2045のセクション6.1に可能な値がリストされています。
目次 |
これは、インスタンスプロパティのデフォルト値を示します。
目次 |
これは、浮動小数点数の小数点以下の最大桁数を示します。デフォルトでは最大値はありません。
目次 |
この属性は「type」属性と同じ値を取ることができますが、インスタンスがタイプに一致する場合、またはこの値が配列であり、インスタンスが配列内のタイプまたはスキーマに一致する場合、このインスタンスは無効です。
目次 |
このプロパティの値は、現在のスキーマが継承する基本スキーマを提供する別のスキーマである必要があります。継承ルールは、現在のスキーマに従って有効なインスタンスは、参照されるスキーマに従って有効である必要があるというものです。これは配列にすることもできます。その場合、インスタンスは配列内のすべてのスキーマに対して有効である必要があります。
目次 |
このセクションでは、JSONスキーマのハイパーメディア定義を定義します。 JSONスキーマによって既に提供されている属性に加えて、JSONデータに基づいてリソース間の関係をユーザーエージェントに知らせるという特定の目的で、以下の属性が指定されています。 JSONスキーマ属性と同様に、ハイパースキーマのすべての属性はオプションです。したがって、空のオブジェクトは有効な(非情報)スキーマであり、基本的にプレーンJSON(構造に制約がない)を記述します。属性を追加すると、ユーザーエージェントの情報が追加されます。
目次 |
linksプロパティの値は配列である必要があり、配列内の各アイテムはインスタンスのリンク関係を記述するリンク記述オブジェクトです。
目次 |
リンク記述オブジェクトは、スキーマのインスタンスのリンク関係を記述するために使用されます。
目次 |
「href」リンク記述プロパティの値は、関連リソースのターゲットURIを示します。インスタンスプロパティの値は、[RFC3986]に従ってURI参照として解決される必要があり、相対URIにすることができます。相対解決に使用するベースURIは、インスタンスオブジェクト(スキーマではない)の取得に使用されたURIである必要があります。また、URIはインスタンスオブジェクトのプロパティ値によってパラメーター化される場合があります。
インスタンスプロパティ値は、一致する中括弧( '{'、 '}')がゼロ個以上の文字を囲んでいるURIに代入して、展開されたURIを作成する必要があります。インスタンスプロパティ値の置換は、中括弧の間のテキストを使用して、置換する値を取得するインスタンスのプロパティ名を示すことによって解決されます。たとえば、href値が次のように定義されている場合
http://somesite.com/{id}
インスタンスオブジェクトから「id」プロパティ値の値を置き換えることによって解決されます。「id」プロパティの値が「45」の場合、展開されたURIは次のようになります。
http://somesite.com/45
一致する中括弧が中括弧の間に文字列「-this」(引用符なし)で見つかった場合、プロパティ値ではなく実際のインスタンス値を使用して中括弧を置き換える必要があります。これは、インスタンスがスカラー(文字列、ブール値、または数値)である場合にのみ使用し、オブジェクトまたは配列には使用しないでください。
目次 |
「rel」プロパティの値は、ターゲットリソースへの関係の名前を示します。ターゲットへの関係は、オブジェクトを階層内に含むトップレベルリソースだけからではなく、スキーマ(またはサブスキーマ)が適用されるインスタンスオブジェクトから具体的に解釈する必要があります。リソースJSON表現にリンクとして解釈されるプロパティを持つサブオブジェクトが含まれている場合、そのサブオブジェクトはターゲットとの関係を保持します。トップレベルリソースからのターゲットへの関係は、トップレベルJSON表現を記述するスキーマで示す必要があります。
関係の定義はメディアタイプに依存するべきではなく、ユーザーは既存の承認された関係定義(既存の関係レジストリを含む)を利用することが推奨されます(&rfc4287を参照)。ただし、JSONハイパースキーマで定義された関係のコンテキスト内での規範的解釈を明確にするために、これらの関係をここで定義します。
self - 関係値が「self」の場合、このプロパティがインスタンスオブジェクトで見つかったとき、オブジェクトはリソースを表し、インスタンスオブジェクトは指定されたURIによって識別されるターゲットリソースの完全な表現として扱われます。
full - これは、リンクのターゲットがインスタンスオブジェクトの完全な表現であることを示します。このリンクを含むオブジェクトは、完全な表現ではない場合があります。
describedby - これは、リンクのターゲットがインスタンスオブジェクトのスキーマであることを示します。これは、JSONオブジェクト階層内のオブジェクトのスキーマを具体的に示し、ポリモーフィック型のデータ構造を容易にするために使用できます。
以下の関係はスキーマ(関係における「起点」リソースとしてのスキーマ)に適用されます。
instances - これは、スキーマのインスタンスのコレクションを表すターゲットリソースを示します。
create - これは、スキーマの新しいインスタンスを作成するために使用するターゲットを示します。このリンク定義は、安全でないメソッド(POSTなど)を持つ送信リンクである必要があります(SHOULD)。
例えば、スキーマが以下のように定義されている場合
{ "links": [ { "rel": "self" "href": "{id}" }, { "rel": "up" "href": "{upId}" }, { "rel": "children" "href": "?upId={id}" } ] }
そして、インスタンスリソースのコレクションのJSON表現が以下のように取得された場合
GET /Resource/ [ { "id": "thing", "upId": "parent" }, { "id": "thing2", "upId": "parent" } ]
これは、コレクションの最初の項目について、それ自身の(self)URIが "/Resource/thing" に解決され、最初の項目の "up" 関係が "/Resource/parent" のリソースに解決されるべきであることを示します。"children" コレクションは "/Resource/?upId=thing" にあります。
目次 |
以下のプロパティは、リンク定義オブジェクトにも適用され、HTMLフォームと同様に、サーバーに送信するための追加の(多くの場合ユーザーが提供する)情報を送信する手段を提供します。
目次 |
これは、ターゲットリソースにアクセスするためにどのメソッドを使用すべきかを示します。HTTP環境では、これは "GET" または "POST" になります("PUT" や "DELETE" などの他のHTTPメソッドは、アクセスされたリソースによって明確に暗示されるセマンティクスを持っており、ここで定義する必要はありません)。これはデフォルトで "GET" です。
目次 |
存在する場合、このプロパティは、サーバーがターゲットリソースのインスタンスのコレクションに対してクエリまたは投稿をサポートするクエリメディアタイプ形式を示します。クエリは、ターゲットURIに追加して、サーバーから返されるべきリソース、またはリソースにデータを投稿するために使用されるリソース(メソッドに応じて)にプロパティベースの制約を持つコレクションをクエリするために使用できます。例えば、以下のスキーマでは
{ "links":[ { "enctype": "application/x-www-form-urlencoded", "method": "GET", "href": "/Product/", "properties":{ "name":{"description":"name of the product"} } } ] }
これは、クライアントが特定の名前を持つインスタンスをサーバーに照会できることを示します
/Product/?name=Slinky
enctypeまたはmethodが指定されていない場合、hrefプロパティで指定された単一のURIのみが定義されます。メソッドがPOSTの場合、application/jsonがデフォルトのメディアタイプです。
目次 |
これは、基本JSONスキーマ定義から継承され、同じ構造に従うことができますが、その意味は、アクション(GETクエリかPOSTボディか)に許容されるプロパティ名と値を定義するために使用されるべきです。プロパティが省略され、このフォームがスキーマの子である場合、親スキーマのプロパティはフォームアクションの基礎として使用されるべきです。
目次 |
このプロパティは、インスタンス表現内のURIのフラグメント識別子を解決するために使用するフラグメント解決プロトコルを示します。これは、インスタンスオブジェクトのURIとインスタンスオブジェクトのURIのすべての子に適用されます。デフォルトのフラグメント解決プロトコルは "dot-delimited" で、以下に定義されています。他のフラグメント解決プロトコルを使用することもできますが、このドキュメントでは定義されていません。
フラグメント識別子はRFC 2396 Sec 5に基づいており、ドキュメント内のエンティティへの参照を解決するメカニズムを定義しています。
目次 |
ドット区切りフラグメント解決プロトコルでは、フラグメント識別子は "." 文字(\x2E)で区切られた一連のプロパティ参照トークンとして解釈されます。各プロパティ参照トークンは、"." 文字を除く任意の有効なURIコンポーネント文字のシーケンスです。各プロパティ参照トークンは、フラグメント識別子の先頭から başlayarak、ターゲットJSON構造内のパス参照として解釈されるべきです。フラグメントの最終的なターゲット値は、フラグメント前のURIによって識別されるリソースの表現からJSON構造のルートから始めることで決定できます。ターゲットがJSONオブジェクトの場合、新しいターゲットは、フラグメント内の次のプロパティ参照トークンによって識別される名前を持つプロパティの値です。ターゲットがJSON配列の場合、ターゲットは、次のプロパティ参照トークン(数値でなければならない)によって定義されたインデックスを持つ配列内の項目を見つけることによって決定されます。フラグメント全体がトラバースされるまで、ターゲットは各プロパティ参照トークンに対して連続して更新されます。
プロパティ名はURIエンコードされるべきです(SHOULD)。特に、プロパティ名にある "." は、プロパティ区切り文字として解釈されないようにエンコードする必要があります。
例えば、以下のJSON表現の場合
{ "foo":{ "anArray":[ {"prop":44} ], "another prop":{ "baz":"A string" } } }
以下のフラグメント識別子は解決されます
fragment identifier resolution ------------------- ---------- # self, the root of the resource itself #foo the object referred to by the foo property #foo.another prop the object referred to by the "another prop" property of the object referred to by the "foo" property #foo.another prop.baz the string referred to by the value of "baz" property of the "another prop" property of the object referred to by the "foo" property #foo.anArray.0 the first object in the "anArray" array
目次 |
この属性は、インスタンスプロパティ値が、ユーザーエージェントの相互作用とフラグメント解決の目的で、表現のルートまたは本文として扱われるべきであることを示します(インスタンスオブジェクトの他のすべてのプロパティは、データのメタデータ記述と見なすことができます)。
目次 |
これは、インスタンスプロパティを変更してはならないことを示します。ユーザーエージェントがこのプロパティの値を変更しようとすると、サーバーによって拒否されることが想定されます。
目次 |
このプロパティ値は、スキーマのインスタンスのすべてのURIが開始する必要があるURIを示すURI参照です。インスタンスに複数のスキーマが参照されている場合、ユーザーエージェントは、インスタンスのURIがpathStartの参照URIで始まるかどうかを判断することにより、このスキーマが特定のインスタンスに適用可能かどうかを判断できます。 pathStartは[RFC3986]セクション5に従って解決する必要があります。インスタンスのURIがpathStartによって示されるURIで始まらない場合、または別のスキーマがより長く、インスタンスにも一致する開始URIを指定する場合、このスキーマはインスタンスに適用されるべきではありません。 pathStart属性を持たないスキーマは、それが参照されるすべてのインスタンスに適用可能と見なされるべきです。
目次 |
これは、このスキーマが定義しているインスタンス表現のメディアタイプを示します。
目次 |
これは、インスタンスリソースの代替JSONベースの表現の他のスキーマを定義するJSONスキーマ定義の配列です。
目次 |
この仕様はJSON形式のサブタイプであるため、セキュリティに関する考慮事項は一般にRFC 4627と同じです。ただし、追加の問題として、"self" のリンク関係がオブジェクトの完全な表現を示すために使用される場合、ターゲットURIが、"self" リンクを持つターゲットURIを含むリソース表現をリクエストするために使用されたURIと同等でないか、またはサブパスでない場合、ユーザーエージェントは、表現をターゲットURIによって示されるリソースの権威ある表現と見なすべきではありません。例えば、ハイパースキーマが以下のように定義されている場合
{ "links":[ { "rel":"self", "href":"{id}" } ] }
そして、リソースがsomesite.comからリクエストされた場合
GET /foo/
以下のレスポンスが返された場合
Content-Type: application/json; describedby=/schema-for-this-data [ {"id":"bar", "name":"This representation can be safely treated \ as authoritative "}, {"id":"/baz", "name":"This representation should not be treated as \ authoritative the user agent should make request the resource\ from "/baz" to ensure it has the authoritative representation"}, {"id":"http://othersite.com/something", "name":"This representation\ should also not be treated as authoritative and the target\ resource representation should be retrieved for the\ authoritative representation"} ]
目次 |
JSON Schemaの提案MIMEメディアタイプはapplication/schema+jsonです
タイプ名:application
サブタイプ名:schema+json
必須パラメータ:describedby
describedbyパラメータの値は、この構造(メタスキーマ)の構造を定義するために使用されるスキーマを参照するURI(相対または絶対)である必要があります。通常、値はhttps://json-schema.dokyumento.jp/hyper-schemaになりますが、ハイパースキーマのメタスキーマを拡張する他のスキーマを使用することもできます。
オプションパラメータ:pretty
prettyパラメータの値は、JSON表現を読みやすくするために追加の空白が含まれているかどうかを示すために、trueまたはfalseにすることができます。
目次 |
このレジストリは、RFC 4287に従ってIANAによって管理されており、この仕様では "full"、 "create"、 "instances" の3つの値が追加されます。新しい割り当ては、[RFC5226]に概説されているように、IESGの承認を受けます。リクエストはIANAにメールで送信する必要があり、IANAはリクエストをIESGに転送して承認をリクエストします。
目次 |
目次 |
[RFC3986] | Berners-Lee, T.、Fielding, R.、およびL. Masinter、「Uniform Resource Identifier (URI): Generic Syntax」、STD 66、RFC 3986、2005年1月(TXT、HTML、XML)。 |
[RFC2119] | Bradner, S.、「Key words for use in RFCs to Indicate Requirement Levels」、BCP 14、RFC 2119、1997年3月(TXT、HTML、XML)。 |
[RFC4287] | Nottingham, M.(編)およびR. Sayre(編)、「The Atom Syndication Format」、RFC 4287、2005年12月(TXT、HTML、XML)。 |
[RFC3339] | Klyne, G.(編)およびC. Newman、「Date and Time on the Internet: Timestamps」、RFC 3339、2002年7月(TXT、HTML、XML)。 |
[RFC2045] | Freed, N.およびN. Borenstein、「Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies」、RFC 2045、1996年11月(TXT)。 |
目次 |
[RFC4627] | Crockford, D.、「The application/json Media Type for JavaScript Object Notation (JSON)」、RFC 4627、2006年7月(TXT)。 |
[RFC2616] | Fielding, R.、Gettys, J.、Mogul, J.、Frystyk, H.、Masinter, L.、Leach, P.、および T. Berners-Lee、「ハイパーテキスト転送プロトコル -- HTTP/1.1」、RFC 2616、1999年6月 (テキスト、PS、PDF、HTML、XML)。 |
[RFC5226] | Narten, T. および H. Alvestrand、「RFC における IANA 考慮事項セクションの記述に関するガイドライン」、BCP 26、RFC 5226、2008年5月 (テキスト)。 |
[I-D.hammer-discovery] | Hammer-Lahav, E.、「リンクベースのリソース記述子ディスカバリ」、draft-hammer-discovery-03 (作業中)、2009年3月 (テキスト)。 |
[I-D.gregorio-uritemplate] | Gregorio, J.、「URI テンプレート」、draft-gregorio-uritemplate-03 (作業中)、2008年4月 (テキスト)。 |
[I-D.nottingham-http-link-header] | Nottingham, M.、「Web リンク」、draft-nottingham-http-link-header-06 (作業中)、2009年7月 (テキスト)。 |
[W3C.REC-html401-19991224] | Hors, A.、Jacobs, I.、および D. Raggett、「HTML 4.01 仕様」、World Wide Web Consortium 勧告 REC-html401-19991224、1999年12月 (HTML)。 |
目次 |
-01
-00
目次 |
リンクヘッダーよりも MIME ヘッダーを優先すべきか (または一方のみを使用すべきか)?
メディアタイプパラメータとして "profile" を使用するべきか?
"root" をスキーマ属性ではなく MIME パラメータにするべきか?
許可されている MIME メディアタイプの使用法を反映するために、"format" を "mediaType" または "contentType" に名前変更するべきか?
日付の処理方法がまだ気に入らない。
目次 |
Kris Zyp (編集者) | |
SitePen (USA) | |
530 Lytton Avenue | |
Palo Alto, CA 94301 | |
アメリカ合衆国 | |
電話番号: | +1 650 968 8787 |
メールアドレス: | [email protected] |