data validation_error ai_generated true

JSON Schema 验证失败:format 'uri' 拒绝包含 IP 地址或非常见协议的合法 URI

JSON Schema validation fails: format 'uri' rejects valid URIs with IP addresses or unusual schemes

ID: data/json-schema-format-uri-referencing

其他格式: JSON · Markdown 中文 · English
80%修复率
82%置信度
1证据数
2023-06-20首次发现

版本兼容性

版本状态引入弃用备注
jsonschema 4.17.3 active
ajv 8.12.0 active
json-schema-validator 4.0.1 active

根因分析

某些库(如 Python 的 jsonschema)中 JSON Schema 内置的 'uri' 格式验证器使用严格的 RFC 3986 解析,可能拒绝包含 IPv6 字面量或自定义方案(如 'dns://')的合法 URI。

English

JSON Schema's built-in 'uri' format validator in some libraries (e.g., Python's jsonschema) uses strict RFC 3986 parsing that may reject valid URIs with IPv6 literals or custom schemes like 'dns://'.

generic

官方文档

https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats

解决方案

  1. Use a custom format checker with relaxed URI validation: from jsonschema import validators; from rfc3986_validator import validate_rfc3986; def custom_uri(instance): return validate_rfc3986(instance, require_scheme=True, allow_relative=False); validator = validators.validate(..., format_checker=validators.Draft7Validator.FORMAT_CHECKER.replaces('uri', custom_uri))
  2. Change schema to use pattern validation instead of format: '"pattern": "^[a-zA-Z][a-zA-Z0-9+.-]*://.*$"'. This is more portable across validators.

无效尝试

常见但无效的做法:

  1. 60% 失败

    Completely bypasses URI validation, allowing invalid URIs through and defeating the purpose of schema validation.

  2. 55% 失败

    uri-reference is even more permissive and may not catch intended validation issues, plus it's not supported by all validators.