【问题标题】:JSON Schema validator 'id' fieldJSON Schema 验证器“id”字段
【发布时间】:2018-05-30 14:03:21
【问题描述】:

我正在使用JSON Schema 来验证文件。这有点类似于 XML XSD。

我有几个关于 id 字段的问题。

我对这个问题有点迷茫。我知道将 id 属性作为每个模式的唯一标识符是最佳实践,并且这在创建具有相互引用的不同模式的复杂模式时最有用。

但我不确定我们是否需要为 id 字段分配 URL。而且我也迷失了将这个 URL 用于架构的含义。

非常感谢您的帮助

【问题讨论】:

    标签: xsd schema jsonschema xsd-validation json-schema-validator


    【解决方案1】:

    id($id,因为draft-06)的主要目的是组织$ref解析的范围。

    $id 不必是现有的 HTTP 资源。识别的模式甚至可以在另一个中定义(example 在规范测试套件中)。

    JSON Schema 规范要求验证器应该能够根据当前模式中定义的$ids 解析引用。远程引用也应该得到解决,但它应该如何发生没有限制。

    在许多情况下,由于高延迟,验证期间的网络交互是非常不需要的。大多数实现为您提供了一种在验证之前通过$id 显式预加载/定义架构资源的方法。

    根据 spec 根架构应该有 $id 这是一个绝对 URI,但它是否应该可以被 HTTP 客户端访问取决于您和您的验证器。

    【讨论】:

    • 这是一个常见的混淆点。我们真的希望能纠正这个问题!
    【解决方案2】:

    $id 仅定义为 URI。

    http://json-schema.org/draft-07/json-schema-core.html#rfc.section.8.2

    请参阅 RFC-3986 统一资源标识符 (URI):通用语法

    https://www.rfc-editor.org/rfc/rfc3986

    “统一资源标识符 (URI) 是一个紧凑的字符序列,用于标识抽象或物理资源。”

    Daniel Messier 的一篇不错的文章清楚地解释了 URI 的性质——它可以只是一个 URN——但也可能是一个有效的 URL

    https://danielmiessler.com/study/url-uri/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2015-01-29
      • 2014-04-29
      • 2017-07-05
      • 2021-04-18
      • 2014-08-05
      相关资源
      最近更新 更多