To, že je datum zapsáno ve schématu JSON, neznamená, že validátor musí datum kontrolovat.
Schéma říká `format: date`, ale špatné datum projde ověřením. To nemusí nutně znamenat, že je v knihovně chyba. Způsob zpracování `format` závisí na konfiguraci validátoru. Když získáte "ověření úspěšné", nejprve se zeptejte, zda zkontroloval typ, strukturu nebo také zkontroloval sémantiku data.
format: date je zapsáno ve schématu JSON, ale ověřením projde neexistující datum. To obvykle není chyba v knihovně. Jak je format zpracováno, závisí na konfiguraci validátoru. Když narazíte na výsledek „ověření úspěšné", měli byste nejprve potvrdit, zda kontroluje typ, strukturu nebo také kontroluje sémantiku data.
Tento článek je vhodný pro vývojáře a recenzenty, kteří potřebují provádět strukturované ověření dat dokumentu a dbají na přesnost polí data. Po přečtení tohoto budete schopni určit, co znamená úspěšné ověření, a pomocí testování protipříkladu opravit pravidla pro datum.
Tento článek používá syntetické vzorky k demonstraci metody zpracování. Kód byl zkontrolován s příklady v izolovaném prostředí a není zárukou všech skutečných souborů nebo výkonu produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
Co přesně kontroluje ověření data schématu JSON? Závěr jednou větou
Nejprve potvrďte, zda je ve validátoru povolena kontrolaformat, a poté potvrďte, zda jsou jinak zodpovědná sémantická pravidla data (zda skutečně existuje a jak jej interpretovat).
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
Zkontrolujte format: date pouze s výchozím validátorem | Nejprve ověřte, zda je program FormatChecker explicitně povolen | Jak je format zpracováno, závisí na konfiguraci validátoru |
Potřebujete identifikovat data, jako je 2026-02-30 | Vložte jej do testovací sady jako protipříklad | Řetězec vypadá jako datum, což neznamená, že v kalendáři existuje. |
| Pořadí dne a měsíce data zdroje není známo. | Označte nejednoznačnost, žádné automatické hádání | Úspěšné ověření date může pouze ukázat, že převedená hodnota je platná |
| Pole s časem a časovou zónou | Používejte nezávislé časové protokoly | Prvních deset postav by nemělo být zachyceno a zpracováno náhodně |
| Používá se pro ověření data překladu | Uložte hodnoty raw_text i normalizované hodnoty | Recenzenti musí vidět jak původní obsah, tak systematické vysvětlení |
Dva zdánlivě stejné šeky
2026-02-30 je řetězec a vypadá jako datum, ale v únoru není žádný 30. den. Pouze kontrola pravidelných tvarů tento druh problému vynechá. Následující text používá jsonschema Pythonu k porovnání výsledků výchozího validátoru a explicitního povolení FormatChecker.
Otestujte konfiguraci s nemožným datem
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)
Syntetický příklad pouze ověřuje date. Jiné formáty mohou mít volitelné závislosti nebo rozdíly v implementaci a měly by být testovány případ od případu v uzamčeném prostředí. Názvy neznámých formátů nelze chápat tak, že znamenají, že byla implementována nějaká kontrola, a překlepy vám mohou dát pocit bezvýznamného zabezpečení.
Formát data není pravidlem interpretace data
03/04/2026 ve zdroji může znamenat 4. březen nebo 3. duben. Před převodem do formátu ISO je vyžadován zdrojový region, specifikace pole nebo explicitní protokol. Úspěšné ověření date může pouze prokázat, že převedená hodnota je platná, ale nemůže prokázat, že jste vybrali správný měsíc.
| Zdroj informací | co dělat | Co nedělat |
|---|---|---|
| Kalendářní datum, které neexistuje | Nahlaste chybu a zkontrolujte zdroj | Automaticky přejděte na další měsíc |
| Neznámý řád slunce a měsíce | Nejednoznačnost značek | Hádejte na základě jazyka serveru |
| S časem a časovou zónou | Používejte nezávislé časové protokoly | Náhodně zachyťte prvních deset postav |
| Pole je prázdné | Zacházejte podle chybějících pravidel | Doplňte dnešní datum |
Zahrnout konfiguraci do regresního testování
Do testovací sady vložte alespoň tři typy hodnot: zákonný přestupný den, nezákonný přestupný den a chybně vytvořenou hodnotu. Spuštění těchto protipříkladů při nasazování je efektivnější než jen kontrola, zda soubor schématu existuje. Pokud je služba implementována napříč jazyky, měla by být stejná testovací sada ověřena samostatně a nepředpokládejte, že výchozí chování dvou validátorů je stejné.
Kontrola překladu zachovává původní datum
Při použití výsledků extrakce data pro ověření překladu OmniDoc se doporučuje uložit jak hodnoty raw_text, tak normalizované hodnoty. Recenzent potřebuje vidět „co je původní obsah"a „jak jej systém interpretuje", aby mohl určit, zda rozdíl spočívá v překladu, extrakci nebo konverzi formátu.
Zdroje: Řetězec a formát schématu JSON.
📊 Srovnání jádra
| Srovnávací položka | Výchozí validátor | Explicitně povolte FormatChecker |
|---|---|---|
| Zkontrolujte rozsah | Typy a struktury | Dodatečná kontrola formátu prohlášeníformat |
Závěr o 2026-02-30 | Nepředpokládejte odmítnutí | Nutno potvrdit protipříklady |
| význam při míjení | Neznamená to, že sémantika data je správná | Ještě je třeba zkontrolovat vysvětlení data na firmě |
🎯 Která metoda je pro vás vhodná?
Pokud se jen potřebujete ujistit, že pole je řetězec nebo je správně strukturováno
Výchozí validátor je obvykle dostačující, ale uvědomte si, že nemusí nutně kontrolovat sémantiku data.
Pokud potřebujete potvrdit, že datum skutečně existuje
Explicitně povolte FormatChecker a ověřte pomocí protipříkladů, jako je 2026-02-30.
Pokud chcete zkontrolovat datum ve zdrojovém souboru
Nejprve potvrďte zdrojová pravidla pořadí dnů a měsíců a poté uložte původní text a normalizované hodnoty.
Pokud je vaše služba nasazena napříč jazyky
Na každé implementaci se spouští stejná sada testů.
❓ Často kladené otázky (FAQ)
1. Schéma je napsáno jako format: date, proč mohou špatná data stále projít?
Způsob zpracování format závisí na konfiguraci validátoru a sémantika data není ve výchozím nastavení nutně kontrolována.
2. Proč je 2026-02-30 užitečná testovací hodnota?
Vypadá to jako rande, ale únor nemá třicátý den. Pouhá kontrola vzhledu tento druh problému vynechá.
3. Co se stane, když je použit neznámý název formátu?
Nemělo by se s ním zacházet, jako by byl zkontrolován, a pravopisné chyby vám mohou poskytnout falešný pocit bezpečí.
4. Jak se má převést 03/04/2026?
Je vyžadována oblast původu, popis pole nebo explicitní protokol. Jinak by nebylo možné říci, zda představuje 4. březen nebo 3. duben.
📝 Shrnutí
Úspěšné ověření znamená pouze to, že data splňují deklarovaná pravidla, ale neznamená, že význam každého data je správný. Nejprve potvrďte rozsah kontroly validátoru a poté použijte protipříklady a zdrojová pravidla k opravě zpracování data, aby byly výsledky spolehlivější.
Vyzkoušejte to hned: Nahrajte dokument a začněte překládat při zachování původního rozvržení


