如何使用結構化資料

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 上的某些內容未得到適當的記錄。