web-dev-qa-db-fra.com

Dans JsonSchema, la valeur du format doit être définie sur "date complète" ou "date"?

Vous pouvez utiliser jsonSchemaLint à des fins de test.

J'ai ce JsonSchema, qui définit le format comme "full-date". Tous les validateurs Brouillon-6 (Json.Net) acceptent le schéma comme valide.

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

Mais il est impossible d'identifier cet objet Json qui est faux:

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

Lorsque je change le schéma de "date complète" à "date" uniquement, cela fonctionne:

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

Le terme en haut ("date complète") correspond-il correctement à Json? Veuillez vous référer à de la documentation.

5
Hakan Erdogan

En se référant à ce problème sur github ici , il s'avère qu’il était correct de créer votre propre code de schéma, sachant que les validateurs pourraient ne pas être en mesure de le capturer.

"C'est techniquement toujours correct car le format est extensible. Cependant, les formats définis par l'utilisateur seront ignorés par les validateurs qui ne les reconnaissent pas. Et bien sûr, si quelqu'un d'autre utilise un validateur configuré pour reconnaître le même nom mais traiter autrement, vous aurez un problème d’interopérabilité, mais avec cette valeur particulière, date entière, cela dépend de votre version de JSON Schema.

Dans l'ébauche 04 ou l'ébauche 06, la date complète n'est pas un format officiel. Quiconque l'ajoute comme format personnalisé et ne veut pas dire la même chose que dans la RFC 3339 pose problème, donc vous pouvez probablement l'utiliser de cette manière même dans ces versions.

Dans l'ébauche-07 à venir (la semaine prochaine?), Date entière fait partie de l'espace de noms au format réservé RFC 3339 et, si elle est mise en œuvre, DOIT être compatible avec la définition de date complète de la RFC 3339. Draft-07 définit également la date comme synonyme de date complète et recommande de l’utiliser à la place, car la date est plus courante dans la nature à ma connaissance.

Quoi qu’il en soit, l’utilisation que vous montrez ici est probablement assez sûre car elle correspond à la RFC 3339 et, dès le brouillon-07, la norme n’impose pas le support mais impose que, si elle est mise en œuvre, elle doit se comporter comme prévu par la RFC 3339. "

0
Hakan Erdogan

La valeur doit être date et non full-date veuillez vous reporter à this documentation

Voici les valeurs valides

  1. date-heure : Ceci DEVRAIT être une date au format ISO 8601 de AAAA-MM - DDThh: mm: ssZ en heure UTC. C’est la forme recommandée d’horodatage date /.

  2. date : CELA DEVRAIT être une date au format AAAA-MM-JJ. Il est Recommandé d'utiliser le format "date-heure" au lieu de "date" À moins que vous ne deviez transférer que la partie de date.

  3. heure : Cela DEVRAIT être une heure au format hh: mm: ss. Il est Recommandé d'utiliser le format "date-heure" au lieu de "heure" Sauf si vous devez transférer uniquement la partie heure.

  4. utc-millisec : CELA DEVRAIT être la différence, mesurée en millisecondes, entre l'heure spécifiée et minuit, 00:00 du 1er janvier 1970 UTC. La valeur DEVRAIT être un nombre (entier ou Float).

source: ici

8
Ganesh