Ce n'est pas parce que la date est écrite dans le schéma JSON que le validateur doit vérifier la date.
Le schéma indique `format: date`, mais la mauvaise date passe la vérification. Cela ne signifie pas nécessairement qu'il y a un bug dans la bibliothèque. La manière dont `format` est géré dépend de la configuration du validateur. Lorsque vous obtenez une « vérification réussie », demandez d’abord si elle a vérifié le type, la structure ou également la sémantique de la date.
format: date est écrit dans le schéma JSON, mais une date inexistante réussit la vérification. Ce n'est généralement pas un bug dans la bibliothèque. La façon dont format est géré dépend de la configuration du validateur. Lorsque vous rencontrez un résultat « vérification réussie », vous devez d'abord confirmer si elle vérifie le type, la structure ou vérifie également la sémantique de la date.
Cet article convient aux développeurs et aux réviseurs qui doivent effectuer une vérification structurée des données du document et se soucier de l'exactitude des champs de date. Après avoir lu ceci, vous serez en mesure de déterminer ce que signifie une vérification réussie et d'utiliser des tests de contre-exemple pour corriger les règles de date.
Cet article utilise des échantillons synthétiques pour démontrer la méthode de traitement. Le code a été vérifié avec des exemples dans un environnement isolé et ne constitue pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.
Que vérifie exactement la vérification de la date de JSON Schema ? Conclusion en une phrase
Confirmez d'abord si la vérification format est activée dans le validateur, puis confirmez si les règles sémantiques de la date (si elle existe réellement et comment l'interpréter) sont autrement responsables.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
Vérifiez uniquement format: date avec le validateur par défaut | Confirmez d'abord si FormatChecker est explicitement activé | La façon dont format est géré dépend de la configuration du validateur |
Besoin d'identifier des dates telles que 2026-02-30 | Mettez-le dans l'ensemble de test comme contre-exemple | La chaîne ressemble à une date, ce qui ne veut pas dire qu'elle existe sur le calendrier. |
| L'ordre du jour et du mois de la date source est inconnu. | Marquer l'ambiguïté, pas de devinette automatique | La réussite de la vérification date ne peut montrer que la valeur convertie est valide |
| Champs avec heure et fuseau horaire | Utiliser des protocoles horaires indépendants | Les dix premiers caractères ne doivent pas être interceptés et traités avec désinvolture |
| Utilisé pour la vérification de la date de traduction | Enregistrez à la fois raw_text et les valeurs normalisées | Les évaluateurs doivent voir à la fois le contenu original et l'explication systématique |
Deux contrôles apparemment identiques
2026-02-30 est une chaîne et ressemble à une date, mais il n'y a pas de 30ème jour en février. Seule la vérification des formes régulières permettra de rater ce genre de problème. Ce qui suit utilise jsonschema de Python pour comparer les résultats du validateur par défaut et activer explicitement FormatChecker.
Tester la configuration avec une date impossible
from jsonschema import Draft202012Validator, FormatChecker
schema = {"type": "string", "format": "date"}
structural = Draft202012Validator(schema)
strict = Draft202012Validator(schema, format_checker=FormatChecker())
def valid(v, value):
return not list(v.iter_errors(value))
assert valid(structural, "2026-02-30")
assert not valid(strict, "2026-02-30")
assert valid(strict, "2024-02-29")
assert not valid(strict, "2025-02-29")
assert not valid(strict, "26/09/2026")
assert not valid(strict, 20260926)
L'exemple synthétique vérifie uniquement date. D'autres formats peuvent avoir des dépendances facultatives ou des différences d'implémentation et doivent être testés au cas par cas dans un environnement verrouillé. Les noms de format inconnus ne peuvent pas être considérés comme signifiant qu'une sorte de vérification a été mise en œuvre, et les fautes d'orthographe peuvent vous donner un sentiment de sécurité inutile.
Le format de date n'est pas une règle d'interprétation de date
03/04/2026 dans la source peut signifier le 4 mars ou le 3 avril. La région source, la spécification du champ ou le protocole explicite sont requis avant de le convertir au format ISO. La réussite de la vérification date peut uniquement prouver que la valeur convertie est valide, mais elle ne peut pas prouver que vous avez sélectionné le bon mois.
| Informations sur la source | ce qu'il faut faire | Ce qu'il ne faut pas faire |
|---|---|---|
| Dates de calendrier inexistantes | Erreur et vérification de la source | Reporté automatiquement au mois suivant |
| L’ordre du soleil et de la lune est incertain | Ambiguïté de la marque | Devinettes basées sur le langage du serveur |
| Inclut l’heure et le fuseau horaire | Utiliser des accords horaires indépendants | Coupe aléatoire des dix premiers caractères |
| Le champ est vide | Traité selon la règle manquante | Complétez la date de la journée |
Inclure la configuration dans les tests de régression
L’ensemble de test contient au moins trois types de valeurs : un jour bissextile valide, un jour bissextile illégal et une valeur incorrecte. Exécuter ces contre-exemples lors du déploiement est plus efficace que de simplement vérifier si le fichier de schéma existe. Si le service est implémenté entre langages, le même ensemble de tests doit être validé séparément, et le comportement par défaut de deux validateurs ne doit pas être supposé identique.
La revue de traduction conserve la date originale
Lors de l’utilisation du résultat d’extraction de date pour la vérification de la traduction OmniDoc, il est recommandé de sauvegarder à la fois les valeurs de raw_text et celles normalisées. Les évaluateurs doivent voir « quel est le contenu original » et « comment le système l’interprète » pour identifier des différences de traduction, d’extraction ou de conversion de format.
Références : Chaîne et format du schéma JSON.
📊 Comparaison des noyaux
| Points de comparaison | Validateur par défaut | Activez explicitement FormatChecker |
|---|---|---|
| Portée de l’inspection | Types et structure | De plus, vérifiez le format de la déclarationformat |
Conclusion sur 2026-02-30 | Tu ne peux pas supposer que tu seras refusé | Des contre-exemples sont nécessaires pour les tests réels afin de confirmer |
| La signification du passage | Cela ne signifie pas que la date est sémantiquement correcte | Il est toujours nécessaire de vérifier l’explication de la date de la date d’ouverture |
🎯 Quelle méthode te convient ?
Si vous devez seulement confirmer que le champ est une corde ou a la bonne structure
Le validateur par défaut est généralement suffisant, mais sachez qu’il ne vérifie pas nécessairement la sémantique des dates.
Si tu dois confirmer que la date existe vraiment
Activez explicitement FormatChecker et vérifiez avec des contre-exemples comme 2026-02-30.
Si tu veux vérifier la date dans le fichier source
D’abord, confirmez les règles sources pour l’ordre jour-mois, puis enregistrez le texte original et les valeurs normalisées.
Si votre service est déployé dans plusieurs langues
Exécutez le même ensemble de tests séparément dans chaque implémentation.
❓ Foire aux questions (FAQ)
1. Le schéma a écrit format: date, alors pourquoi les mauvaises dates peuvent-elles encore passer ?
La gestion de format dépend de la configuration du validateur ; par défaut, la sémantique de la date peut ne pas être vérifiée.
2. Pourquoi 2026-02-30 est-elle une valeur de test utile ?
Cela ressemble à une date, mais février n’a pas de trentième jour. Se concentrer uniquement sur l’apparence manquera ce genre de problèmes.
3. Que se passe-t-il si vous utilisez un nom de format inconnu ?
Il ne faut pas considérer qu’il a été vérifié ; des fautes d’orthographe peuvent vous donner un faux sentiment de sécurité.
4. Comment 03/04/2026 devrait-il être converti ?
La région source, la description du champ ou un accord clair sont requis. Sinon, il est impossible de dire s’il s’agit du 4 mars ou du 3 avril.
📝 Résumé
Passer un contrôle de contrôle signifie seulement que les données respectent les règles déclarées et ne signifie pas que chaque date est correcte. D’abord, confirmez le périmètre d’inspection du validateur, puis fixez le traitement de la date avec des contre-exemples et des règles de source pour des résultats plus fiables.


