AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76931216
Accepted
Roger Costello
Roger Costello
Asked: 2023-08-19 00:48:49 +0800 CST2023-08-19 00:48:49 +0800 CST 2023-08-19 00:48:49 +0800 CST

$id 和 $anchor 有什么区别?

  • 772

以下模式用于$id提供一种与位置无关的方式来识别两个子模式:

{
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "$id": "http://www.example.com/schema",
   "$defs": {
        "schema1": {
            "$id": "insect",
            "type": "string", 
            "enum": ["beetle", "grasshopper"]
        },
        "schema2": {
            "$id": "fruit",
            "type": "string", 
            "enum": ["orange", "apple"]
        }
   },
   "$ref": "insect"
}

这个模式将实例限制在完全相同的程度,使用$anchor:

{
   "$schema": "https://json-schema.org/draft/2020-12/schema",
   "$id": "http://www.example.com/schema",
   "$defs": {
        "schema1": {
            "$anchor": "insect",
            "type": "string", 
            "enum": ["beetle", "grasshopper"]
        },
        "schema2": {
            "$anchor": "fruit",
            "type": "string", 
            "enum": ["orange", "apple"]
        }
   },
   "$ref": "insect"
}

$id那么和之间有什么区别$anchor?

jsonschema
  • 1 1 个回答
  • 18 Views

1 个回答

  • Voted
  1. Best Answer
    Jason Desrosiers
    2023-08-19T02:58:01+08:002023-08-19T02:58:01+08:00

    $anchor是一个纯字符串,用于标识架构文档中的位置。它用在URI#的片段 ( ) 部分$ref。#/$defs/schema1它是您通常在参考文献 ( == )中看到的 JSON 指针语法的替代方案#insect。所以,你的第二个模式不正确。它缺少#前面的“昆虫” $ref。

    $id情况要复杂得多。它是标识架构资源的 URI。该架构可以通过该 URI 引用。$id也可以出现在模式中,如第一个示例中所示。在这种情况下, 所在的模式$id被视为嵌入式模式。它被视为它自己的独立模式资源,与其嵌入的父模式分开。嵌入式模式的 URI可以根据父模式的URI$id进行解析,以获得标识嵌入模式的完整 URI。$id因此,模式的标识符"$id": "insect"实际上是http://example.com/insect。"$ref": "insect"与该架构匹配,因为它也是根据该$id架构解析的。

    通常,嵌入式模式仅用于捆绑单独开发的模式,但由于某种原因需要作为单个模式进行分发。因此,在编写模式时您不会使用它,但它可能会在构建步骤后出现。

    由于$id标识模式并$anchor标识模式中的位置,因此您有时可能会一起使用两者来引用您需要的内容。例如,您可以参考http://example.com/schema#insect获取“昆虫”模式。http://example.com/schema是由 定义的,$id并且#insect是由 定义的$anchor。

    您可能会发现这些很有用。

    • https://json-schema.org/understanding-json-schema/structuring.html
    • 是否有推荐的方法来构造多个 JSON 模式?
    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve