web-dev-qa-db-ja.com

JsonSchemaでは、フォーマット値は「full-date」または「date」として設定する必要がありますか?

テスト目的で jsonSchemaLint を使用できます。

フォーマットを「フルデート」に設定するこのJsonSchemaがあります。すべてのDraft-6バリデーター(Json.Net)は、スキーマを有効なものとして受け入れます。

{
  "title": "MyTestSchema",
  "type": "object",
  "properties": {
    "MyDateValue": {
      "type": "string",
      "format": "full-date",
      "description": "We expect yyyy-MM-dd"
    }
  }
}

しかし、このJsonオブジェクトが間違っていることを特定できません。

{
 "MyDateValue": "2017-10-1"
}

スキーマを「完全な日付」から「日付」のみに切り替えると、次のように機能します。

 {
  "title": "MyTestSchema",
  "type": "object",
  "properties": {
    "MyDateValue": {
      "type": "string",
      "format": "date",
      "description": "We expect yyyy-MM-dd"
    }
  }
}

Jsonのルールとして、一番上の(「フルデート」)用語は正しいですか?いくつかのドキュメントを参照してください。

5
Hakan

Githubでこの問題を参照すると ここ 、バリデーターがそれをキャプチャできない可能性があることを知っていれば、独自のスキーマコードを作成しても問題がないことがわかります。

「フォーマットは拡張可能であるため、技術的には常に正しいです。ただし、ユーザー定義のフォーマットは、それらを認識しないバリデーターによって無視されます。もちろん、他の誰かが同じ名前を認識するように構成されているバリデーターを使用している場合は、異なる方法では、相互運用性の問題が発生します。ただし、この特定の値、完全な日付では、JSONスキーマのバージョンによって異なります。

ドラフト-04またはドラフト-06では、完全な日付は公式の形式ではありません。カスタムフォーマットとして追加し、RFC 3339で意味するのと同じことを意味しない人は誰でも問題を求めているので、それらのバージョンでもこの方法で使用しても問題ないでしょう。

来たる(来週?うまくいけば?)ドラフト-07では、フルデートは予約済みのRFC 3339形式の名前空間の一部であり、実装する場合は、RFC3339のフルデートの定義と互換性がなければなりません。ドラフト-07はまた、日付を完全な日付の同義語として定義し、代わりにそれを使用することをお勧めします。私が知る限り、日付は実際にはより一般的です。

いずれにせよ、ここに示しているこの使用法は、RFC 3339と一致するため、おそらくかなり安全です。ドラフト-07の時点では、標準はサポートを強制していませんが、実装されている場合は、RFC3339で期待どおりに動作する必要があります。」

0
Hakan

値はdateであり、full-dateではありません。参照してください このドキュメント

有効な値は次のとおりです

  1. date-time:これは、UTC時間のYYYY-MM- DDThh:mm:ssZのISO8601形式の日付である必要があります。これは、日付/タイムスタンプの推奨される形式です。

  2. date:これはYYYY-MM-DDの形式の日付である必要があります。日付部分のみを転送する必要がない限り、「日付」ではなく「日時」形式を使用することをお勧めします。

  3. time:これはhh:mm:ssの形式の時間である必要があります。時間部分のみを転送する必要がない限り、「時刻」ではなく「日時」形式を使用することをお勧めします。

  4. utc-millisec:これは、指定された時刻と1970年1月1日UTCの00:00の午前0時までのミリ秒単位の差である必要があります。値は数値(整数または浮動小数点数)である必要があります。

ソース: ここ

10
Ganesh