webentwicklung-frage-antwort-db.com.de

In JsonSchema sollte der Formatwert als "Volldatum" oder "Datum" festgelegt werden.

Sie können jsonSchemaLint zu Testzwecken verwenden.

Ich habe dieses JsonSchema, das das Format als "Volldatum" einstellt. Alle Draft-6-Validatoren (Json.Net) akzeptieren das Schema als gültig.

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

Aber es ist nicht in der Lage zu erkennen, dass dieses Json-Objekt falsch ist:

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

Wenn ich das Schema nur von "Volldatum" auf "Datum" umstelle, funktioniert es:

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

Ist der ganz oben stehende Begriff ("Volldatum") gemäß Json-Regeln korrekt? Bitte beachten Sie die Dokumentation.

5
Hakan Erdogan

Unter Bezugnahme auf dieses Problem auf github here stellt sich heraus, dass es in Ordnung war, Ihren eigenen Schemacode zu erstellen, mit dem Wissen, dass die Validatoren ihn möglicherweise nicht erfassen können.

"Technisch ist es immer korrekt, weil das Format erweiterbar ist. Benutzerdefinierte Formate werden jedoch von Prüfern ignoriert, die sie nicht erkennen. Wenn ein anderer Benutzer einen Prüfer verwendet, der von ihm so konfiguriert wurde, dass er denselben Namen erkennt, aber behandelt Anders ausgedrückt, dann tritt ein Interoperabilitätsproblem auf, das jedoch bei diesem bestimmten Wert "full-date" von Ihrer Version des JSON-Schemas abhängt.

Im Entwurf 04 oder 06 ist das vollständige Datum kein offizielles Format. Jeder, der es als benutzerdefiniertes Format hinzufügt und das nicht hat, bedeutet dasselbe, was in RFC 3339 bedeutet, dass er nach Problemen fragt. Daher ist es wahrscheinlich gut, wenn Sie es auch in diesen Versionen verwenden.

Im kommenden (nächsten Woche? Hoffentlich?) Entwurf-07 ist das vollständige Datum Teil des reservierten Namensraums für das RFC 3339-Format. Wenn es implementiert ist, MUSS es mit der Definition des vollständigen Datums von RFC 3339 kompatibel sein. draft-07 definiert date ebenfalls als Synonym für full-date und empfiehlt stattdessen die Verwendung, da date in der freien Natur meines Wissens häufiger vorkommt.

In jedem Fall ist diese Verwendung, die Sie hier zeigen, wahrscheinlich ziemlich sicher, da sie mit RFC 3339 übereinstimmt. Ab Draught-07 erzwingt der Standard keine Unterstützung, erzwingt jedoch, dass er sich, falls er implementiert ist, so verhalten muss, wie es von RFC 3339 erwartet wird. "

0
Hakan Erdogan

Der Wert sollte date sein und nicht full-date. Bitte lesen Sie diese Dokumentation

Nachfolgend sind die gültigen Werte aufgeführt

  1. date-time : Dies sollte ein Datum im Format ISO 8601 von JJJJ-MM-TTThh: mm: ssZ in UTC-Zeit sein. Dies ist die empfohlene Form von Datums-/Zeitstempel.

  2. date : Dies sollte ein Datum im Format JJJJ-MM-TT sein. Es wird empfohlen, das Format "Datum-Uhrzeit" anstelle von "Datum" zu verwenden, es sei denn, Sie müssen nur den Datumsteil übertragen.

  3. time : Dies sollte eine Zeit im Format hh: mm: ss sein. Es wird empfohlen, das Format "Datum-Uhrzeit" anstelle von "Uhrzeit" zu verwenden, es sei denn, Sie müssen nur den Zeitteil übertragen.

  4. utc-millisec : Dies sollte die in Millisekunden gemessene Differenz zwischen der angegebenen Zeit und Mitternacht, 00:00 Uhr vom 1. Januar 1970 UTC sein. Der Wert SHOULD ist eine Zahl (Ganzzahl oder Gleitkommazahl).

quelle: hier

8
Ganesh