2017-03-26 12 views
0

参照を持つより複雑なJSONスキーマを正しく解決しようとしています。 idプロパティは、しかし、私に多くの問題をもたらし、ドキュメントからどのように動作するかはわかりません。ここで私はまだ取得しないものです:JSONスキーマv4のidプロパティ

  • は、URIを("id": "http://some.site/my/schema.json")に制限idプロパティですまたはスキーマの一部は、任意のID("id": "foo")を持つことができますか?
  • idプロパティは階層的ですか?親スキーマがid:foo(私はidsがURisに限定されていないと仮定します)があり、子がbarの場合、子を参照する適切な方法はfoo/barですか?あるいは、idsは完全に独立していますか?
  • によって$refがスキーマを参照しているかどうかを明確に伝える方法はありますか?

答えて

1

"id"はURIです。相対URIまたは絶対URIにすることができます。相対的な場合は、親の解決スコープに対して解決されます。絶対値の場合、親スコープの影響を受けません。

念頭に置いてこれらを持つので

、心

a)において、それは「arbitary ID」することができますが、それは相対URI

B)はいとして解釈されます - 相対URIの解決それはいくらになるでしょう - )親スコープ

Cに対して起こる空"$ref"は、トップレベルのURIが相対URIであれば、仕様はあなたが何をするかで教えてくれないということ

一つのことを行います反対に解決した。実装に依存することがあります。

ベストプラクティスとして、最上位レベルで"id"を1つだけ使用し、すべての$ refをこれに相対的なものにすることをお勧めします(別の理由で良い理由がない限り)。

+0

素晴らしい要約、ありがとうございます!しかし、 'c'は何を意味しますか?空の' $ ref'がそれを行いますか?私がその質問で意味したのは、 '$ ref'を解決しようとしているときに、idによって参照されているかどうかを明確に伝える方法があるのでしょうか?しかし、URIでなければならないので、私はそうではないと思います... –

+0

"idで参照されているかどうかを明確に伝える方法はありますか" 相対URIの場合は、スコープidに対して解決されます。絶対値であれば、スコープはそれに影響しません。相対スコープで親スコープが存在しない場合、現在のドキュメントのURIに対して解決されると見なすことができます(プログラム構造のように、現在のドキュメントが未知の方法で読み込まれると、何らかの不一致が発生します)。このシナリオは、フラグメント識別子( "$ ref": "#/ definitions/Whatever"など)を使用するとほとんど発生します。#は現在のドキュメントのルートを表します。 – erosb

+0

偉大な、ありがとう! –

関連する問題