2017-08-21 19 views
0

私は、このJSON持っている:

{ 
    "categories": [ 
    { 
     "id": 1, 
     "name": "cat1", 
     "topics": [ 
     { 
      "$ref": "#/topics/1" 
     } 
     ] 
    } 
    ], 
    "topics": [ 
    { 
     "id": 1, 
     "name": "top1" 
    } 
    ] 
} 

を、私はそれを検証するために、次のスキーマを書いた:

{ 
    "definitions": { 
    "category": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string" 
      }, 
      "topics": { 
      "type": "array" 
      "items": { "$ref": "#/definitions/topic" } 
      } 
     } 
     }, 
     "topic": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string" 
      } 
     } 
     } 
    }, 
    "type": "object", 
    "properties": { 
    "categories": { 
     "items": { "$ref": "#/definitions/category" }, 
     "type": "array" 
    }, 
    "topics": { 
     "items": { "$ref": "#/definitions/topic" }, 
     "type": "array" 
    } 
    } 
} 

私が使用よく使われるオンラインバリデーターのこのスキーマでは、#/topics/5#/ttt/555のような無効な参照は検出されません。 このスキーマを使用して参照を検証できますか?ライブラリーやサービスを教えてもらえますか?

答えて

1

現在、これはJSONスキーマの範囲外です。 @erosbの提案はまだ検討中であるが、近いうちに予定されているdraft-07では考慮されていない。十分な需要があれば、ドラフト08のために考慮されるかもしれない。それはプロジェクトの範囲の大幅な拡大であり、それが他のものが対処されている間に保留されている理由です。

一部のバリデーターでは、独自の拡張キーワードを簡単に定義できます。これは、好きなことをする良い方法です。 JSONポインタを適用するライブラリがあり、何かを指しているかどうかを調べることができます。 @ erosbの提案をどこかに実装すれば、その問題についてコメントして、それがどのように機能するかを教えていただければ幸いです。

1

達成しようとしていることを正しく理解しているかどうかはわかりません。 "topics"配列の項目がJSON参照("$ref"、JSONポインタ付き)でなければならないとします。そして、ポイントされたオブジェクトはスキーマ"#/definitions/topic"と一致する必要があります。

これが当てはまる場合、現在はjsonスキーマで表現する方法がないため、最新のバージョンであっても、文字列はjsonポインタである必要がありますが、作成することはできません参照されるオブジェクトの型が何であるべきかに関する制限。

昨年の私はmade a suggestionでこの問題に対処していましたが、フィードバックが混ざっているためにやや固まってしまいました。

関連する問題