如何使用结构化数据
MDN 尽可能将数据存储在定义良好的结构中。这些信息随后会被集中管理,只需更新一次即可在多个地方使用。
存在几种此类文件,本文档将介绍它们的目的、结构和维护过程。
GroupData:API 的逻辑分组
GroupData 是一个收集 Web API 相关信息的 JSON 文件。API 的分组是有些模糊的:任何接口、方法或属性都可以属于多个 API。在名称下分组的 API 集合是用于沟通某个功能的约定,没有任何技术强制约束。
然而,MDN 需要这些信息来创建连贯的 Web-API 侧边栏(例如使用 {{APIRef}} 宏),并关联正确的参考页面、指南和概述文章。
GroupData 正是做到了这一点:对于每个 API,它列出了接口、属性、方法、指南和概述页面。过去,它还列出了字典和回调。但这种用法虽然仍然支持,但已被弃用,将来将被移除。
GroupData 的结构
警告: 此文件中列出的不存在的页面将被忽略(在 en-US 中)。
GroupData.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-method或web-api-instance-method,它们将自动添加到侧边栏。 "properties"-
列出了属于该 API 的其他接口上的属性,例如
navigator.xr(WebXR API 添加到navigator对象的一个属性)。注意:
"interfaces"中列出的接口的属性**不得**在此处列出。如果该页面的page-type键为web-api-static-property或web-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 中的一个条目具有以下结构
{
"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 上的某些内容未得到适当的记录。