領収書のスキーマを作成しており、特殊な領収書の種類 (ホテルの領収書の明細など) のさまざまな詳細オブジェクトを含むコア コンセプトのマスター スキーマを作成したいと考えています。現在の実装ではoneOf
、JSON スキーマのメカニズムを活用しています。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Receipt",
"type": "object",
"properties": {
...
"amount": { "type": "number" },
"detail": {
"type": "object",
"oneOf": [
{ "$ref": "general-detail.schema.json" },
{ "$ref": "hotel-detail.schema.json" },
...
]
}
}
}
このアプローチの問題は、(tv4 を使用して) 検証すると、指定されたすべてのスキーマoneOf
がチェックされているように見え、実際にはエラーが返されることです。この影響を最小限に抑えるには、detail
プロパティを削除oneOf
し、スキーマ レベル (たとえば の外部properties
) に移動してから、各サブスキーマにルート プロパティ名を作成します。ただし、その場合でも、ホテルの領収書の種類を検証しているときにエラーが発生した場合は、「Missing required property: generalDetail」が表示されます。
だから2つの質問:
detail
私が現在行っているような汎用プロパティを使用して、oneOf
構造内の各サブスキーマをバリデーターに完全に検証させることはできますか (たとえば、oneOf
間違って使用していますか)?- それが不可能な場合は、単に「型指定された」詳細プロパティのセット (「generalDetail」、「hotelDetail」など) を持つだけで十分ですが、それらがグループであることを指定する方法はありますか?検証対象のドキュメントには、そのうちの 1 つだけが存在する必要がありますか?
ティア