如何使用结构化数据

MDN 尽可能将数据存储在定义良好的结构中。这些信息随后会被集中管理,只需更新一次即可在多个地方使用。

存在几种此类文件,本文档将介绍它们的目的、结构和维护过程。

GroupData:API 的逻辑分组

GroupData 是一个收集 Web API 相关信息的 JSON 文件。API 的分组是有些模糊的:任何接口、方法或属性都可以属于多个 API。在名称下分组的 API 集合是用于沟通某个功能的约定,没有任何技术强制约束。

然而,MDN 需要这些信息来创建连贯的 Web-API 侧边栏(例如使用 {{APIRef}} 宏),并关联正确的参考页面、指南和概述文章。

GroupData 正是做到了这一点:对于每个 API,它列出了接口、属性、方法、指南和概述页面。过去,它还列出了字典和回调。但这种用法虽然仍然支持,但已被弃用,将来将被移除。

GroupData 的结构

警告: 此文件中列出的不存在的页面将被忽略(在 en-US 中)。

GroupData.json 中的一个条目具有以下结构

json
{
  "Name_of_the_API": {
    "overview": ["name_of_the_overview_page"],
    "guides": [
      "name_of_guide_1"
      // …
    ],
    "interfaces": [
      "name_of_interface_1"
      // …
    ],
    "methods": [
      "name_of_additional_method_1"
      // …
    ],
    "properties": [
      "name_of_additional_property_1"
      // …
    ],
    "events": [
      "name_of_additional_property_1"
      // …
    ]
  }
}

…其中

"API_名称"

此键既是侧边栏宏(如 {{APIRef("API_名称")}})使用的 ID,也是侧边栏本身显示的名称。请明智地选择它。

警告: 如果您想更改侧边栏显示的名称,则必须编辑所有显示该名称的页面。

"overview"

这是一个包含一个页面的列表:概述页面,用作 "API_名称" 文本的链接。值是*页面标题*,页面必须位于 web/api/ 目录下。

"guides"

这是一个要按给定顺序显示在侧边栏中的指南列表。值是*页面路径*,以 /docs/ 开头。

"interfaces"

列出了属于该 API 的接口。

"methods"

列出了属于该 API 的方法。

注意: "interfaces" 中列出的接口的方法**不得**在此处列出。如果该页面的 page-type 键为 web-api-static-methodweb-api-instance-method,它们将自动添加到侧边栏。

"properties"

列出了属于该 API 的其他接口上的属性,例如 navigator.xr(WebXR API 添加到 navigator 对象的一个属性)。

注意: "interfaces" 中列出的接口的属性**不得**在此处列出。如果该页面的 page-type 键为 web-api-static-propertyweb-api-instance-property,它们将自动添加到侧边栏。

"events"

列出了属于该 API 的其他接口的事件。值是*页面标题*。

注意: 针对 "interfaces" 中列出的接口的事件**不得**在此处列出。如果该页面的 page-type 键为 web-api-event,它们将自动添加到侧边栏。

还有两个键 "dictionaries""callbacks",它们的原理相同。由于我们不再在它们自己的页面上记录这些实体,因此它们的用法已被弃用,并且不应向其中添加新条目(我们将逐步移除它们)。

注意: 同样,没有任何键是强制性的;最好(并且我们将强制执行)添加非弃用的键并将其值设置为空列表,而不是省略它们。这表明值的缺失是一个有意识的决定。

GroupData 的更新流程

此文件位于 files/jsondata/GroupData.json,应在发生影响侧边栏的更改的同一 PR 中进行更新。这样,侧边栏始终是最新的。审阅者不应合并不采用此流程的 PR。

要测试您的更改,请检查 PR 中文件的侧边栏是否正确显示了所有条目。

InterfaceData:记录接口继承关系

注意: 我们希望将来能够从 w3c/webref 可用的数据中自动生成此文件。

InterfaceData 描述了接口的层次结构。它列出了继承关系。过去,它还列出了每个接口实现的混入(mixin);但该用法已被弃用,我们正在以 MDN 更新的速度从该文件中移除混入。

此继承数据用于构建 API 侧边栏以及接口页面中的 {{InheritanceDiagram}}

InterfaceData 的结构

InterfaceData.json 中的一个条目具有以下结构

json
{
  "Name_of_the_interface": {
    "inh": "Name_of_the_parent_interface",
    "impl": []
  }
}

注意: 由于混入已被弃用,对于所有新接口,"impl" 必须为空列表。

"Name_of_the_parent_interface" 的值不是一个列表,而是一个单独的条目,是强制性的;我们不能列出任何不继承自另一个接口的接口。

InterfaceData 的更新流程

添加继承自另一个接口的新接口的同一 PR 必须更新此文件,该文件位于 files/jsondata/InterfaceData.json。审阅者不应合并未执行此操作的 PR。

要测试您的更改,请检查您在 PR 中编辑的每个接口的侧边栏是否正确显示了继承关系。

SpecData:规范信息

警告: SpecData.json 文件不再维护。规范的权威信息存储在 w3c/browser-specs 以及 mdn/browser-compat-data 中定义的特性的 spec_url 键中。

我们不再接受对 SpecData.json 文件的任何进一步贡献,而是使用 {{Specifications}} 宏插入一个规范表,或在文本中链接到规范。请注意,大多数时候,在*规范*部分之外提及或链接到规范,表明 MDN 上的某些内容未得到适当的记录。