【问题标题】:YAML Schema Validation?YAML 模式验证?
【发布时间】:2011-06-30 21:54:06
【问题描述】:

是否有适用于 YAML 的架构验证语言?我用谷歌搜索,但找不到任何有用的东西。

像 XSD 格式,使用语言本身来描述模式,在我的情况下是最好的选择。

【问题讨论】:

标签: validation xsd schema yaml


【解决方案1】:

JSON Schema 可以与大多数 YAML 文档一起使用,从而产生比 RxKwalify 更便携和更好记录的解决方案。 JSON Schema 是我能够找到 editor support 的三个中唯一的一个。

更多information on using YAML and JSON Schema including tools and editor support is tracked on this page。在撰写本文时,Visual Studio Code 中提供了编辑器支持,并通过 npm 提供了基于命令行的验证工具。


完全披露:我创建了上面链接的网站,试图使 JSON Schema 应用于 YAML 更容易被发现。我还为 VS Code 编写了一个编辑器扩展,该扩展已被上面链接的 RedHat 扩展所取代。

【讨论】:

  • 如何实现java中yaml的校验。我正在使用github.com/networknt/json-schema-validator,如果针对 json 文件进行验证,它可以正常工作,但是,对 yaml 文件不起作用。
  • 只是给后续的读者留言,您可能希望使用ajv 来验证 JSON,并使用js-yaml 将您的 yaml 转换为 JSON。这些是截至 2020 年用于这些目的的最健康的节点库。
  • 我还是有点迷茫。 @cheesus 只是为了澄清一下,当您说“像魅力一样工作”时,您是说您将 YAML 转换为 JSON,然后使用 JSON 模式工具(如 ajv)对其进行验证,还是这些工具以某种方式直接与 YAML 一起使用? (根据我的经验,他们没有,我也不指望他们。只是“JSON Schema 可以与大多数 YAML 文档一起使用”这句话读起来就像他们应该的那样?!?)有人可以澄清一下。谢谢。
  • @McKrassy,是的,JSON Schema 确实可以与 YAML 文件一起使用,而无需将它们转换为 JSON。考虑这一点时,您应该将 JSON 和 YAML 文件都视为树结构。 JSON Schema 对这些树结构施加了约束,因此它们适用于 JSON 和 YAML 文件。以下是用于 YAML 的 JSON 模式示例:marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml
【解决方案2】:

试试Kwalify(仅限Ruby和Java)或Rx(多种语言)

【讨论】:

  • Kwalify 不会让你做 Mappings 的映射,比如:Joey: 年龄: 22 性别: M Ann: 年龄: 34 性别: F
  • Kwalify 是一个不错的选择,不幸的是它不再维护。 pykwalify 看起来很有希望
  • 使用非标准的东西似乎不是一个好的解决方案。我宁愿使用 jsonschema,然后使用它验证 YAML,因为 YAML 具有与 JSON 的一对一映射。 Swagger 做了类似的事情。
【解决方案3】:

我想知道为此重用 JSON 模式是否有意义。 YAML 可以轻松转换为 JSON 而不会丢失任何信息 (?),因此理论上 YAML 可以通过相同的工具链进行验证,从而允许开源社区专注于一个好的模式工具链。架构本身也可以用 YAML 编写并转换为 JSON。

【讨论】:

    【解决方案4】:

    好主意。谷歌搜索了这个,因为我也在寻找相同的东西。

    可以以定义的方式将 YAML 转换为 XML(类似于 JSON XML)并使用标准 XML 验证器进行验证。

    根据您的平台,有用于该转换的工具或 sn-ps:JavaScript (NPM)RubyJava (Jackson)Java (TestNG)(您需要查看其所需参数的来源)。

    如果使用 API 完成,甚至可以将错误位置映射回原始 YAML 文件。

    【讨论】:

    • 您好,我想创建一个 YAML 验证器。我该怎么办。我的意思是最好的方法是什么?
    • @AkashPatel,最常见的方法是有一个模式。然后,您需要一些能够针对该模式验证整个 YAML 树的东西。验证方法本身取决于您的模式有多强大——从没有递归的简单严格树到像 XSD 这样的复杂东西。这就是我在回答中提出这种方法的原因。
    【解决方案5】:

    您可以使用这个 python ysd 项目来验证您的 yaml 文件。 https://github.com/yonahd/ysd 超级简单好用

    python yaml-validator/main.py -v yamls/example-values.yaml -r yamls/example-rules.yaml 
    

    示例规则文件:

    required: // field must exist and type must match
      env: str
      enabled: bool
      replicas: int
    optional: // if field exists type must match
      disk: str
    

    示例 yaml 文件(helm values 文件):

    network:
      service:
        port: 8060
    enabled: true
    image:
      app: my-app:build
    replicas: 1
    env: dev
    disk: local
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2019-10-17
      • 2021-09-06
      • 2017-08-20
      • 2021-11-30
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      相关资源
      最近更新 更多