# 开源社区文档写作规范

## 文档交付清单（应用开发）

- **JS API参考**：应用程序接口。

  按照**d.ts**文件进行分类，**一个d.ts文件对应一个md文档，该文档包含当前版本需要交付的所有接口**，每一个接口都需要包括接口的功能描述、参数描述、返回值描述、示例代码等。

- **开发指南**：**用于指导用户进行应用程序的设计和开发**，从应用程序开发角度介绍基于平台功能特性开发应用程序的过程。

  按照**场景进行分类**，通过描述场景功能、使用限制、调用接口等，以步骤的形式循序渐进地指导开发人员完成基于平台/产品提供的开放API或 SDK进行二次开发，最终实现某个特性或功能。

- **术语**：向开发者传递**完整、准确、唯一的**概念。

  当出现一个新概念时，需要提供统一的术语依据，规范化概念和名词表达。例如，eTS。

- **apidiff/changelog**：向开发者说明**版本变更**情况。

  apidiff说明该版本所有接口的修改，包括新增、变更、废弃三种情况，若无修改则不用说明。

  若该版本存在变更后无法适配的接口，需要在changelog中说明每一个接口需要做的适配操作。

- **FAQ**（ Frequently Asked Questions ）：开发者常见异常及处理建议。

- **Readme**：向开发者介绍OpenHarmony子系统/部件的需求背景。

## 文档写作基本要求（适用于所有文档）

- **完整性**

  文档无场景缺失、无操作断点，交付内容需和版本实际交付范围一致，不遗漏、不超前。

- **正确性**

  文档描述和实现**功能一致**，版本信息、参数、返回值描述无误，**用户可以通过文档进行实际操作**。

- **规范性**

  文档描述**符合资料规范**，无低错、前后矛盾、上下文不一致、有歧义、敏感词等问题。注意：文档描述遵循术语规范，非必要场景不体现厂家信息。

- **易理解**

  文档描述简洁、清晰，面向开发者，对开发者可感知和使用的能力进行描述。示例代码易理解，上下文完整（或提示）、参数明确、复杂逻辑有注释。

- **合规性**

  **无抄袭或合规风险**。包括但不限于：描述不可与友商高度一致，禁止使用友商特有的概念。

## 明确文档结构（应用开发）

应用开发文档链接： [https://](https://gitcode.com/openharmony/docs/tree/master/zh-cn/application-dev)[gitcode.com/openharmony/docs/tree/master/zh-cn/application-dev](https://gitcode.com/openharmony/docs/tree/master/zh-cn/application-dev)

开发指南按不同功能分文件夹，平铺在application-dev中，比如media存放媒体开发指南，usb存放usb服务的开发指南。API参考统一放到application/reference/apis文件夹中。

![](figures/figure1.png)

## 每一个文档包含的内容（JS API和开发指南）

1. 图片文件夹：放置文档中引用的图片，包含svg、png、gif等。
2. 系统资源文件夹：放置文档中引用的系统图标，无需关注。
3. Readme：目录每一个新增的md文档，都需要写在Readme中。
4. 文档：重点关注文档命名，详见后续描述。

![](figures/figure2.png)

## JS API内容写作

### 新建文档 or 在原有的文档里继续添加？

该模块（以一个d.ts为单位）之前是否有文档？——是，在原有的文档里继续添加新增接口。否，新建一个markdown（md）文件。

![](figures/figure3.png)

1. **文件命名**：一个d.ts文件对应一个js api接口文档，文件名称：**js-apis-模块名.md**。示例：

   媒体@ohos.multimedia.audio，文件命名为：js-apis-audio.md。

   电话@ohos.telephony.sms，文件命名为：js-apis-sms.md。

2. **文档标题：**使用**中文短语**概括本模块功能。但如果部分概念使用英文更便于开发者理解，不必强求，比方说，Ability、SIM卡等概念可以直接使用。

   如果在原有文档添加接口，需要检查新增了接口后，标题还能不能概括所有内容。比如说，media在API 6叫音频播放，但API 7新增了“音频录制”、“视频解码”的能力后，名字就要修改了。

3. **内容写作**较多，在后续指导中详细描述。

4. **上传路径**：docs/zh-cn/application-dev/reference/apis，图片放到对应的figures文件夹中。

5. **修改对应的Readme**，即docs/zh-cn/application-dev/reference/apis/Readme-CN.md。如果文档标题没有修改，无需修改Readme。

**Tips：docs仓的PR合入后，将自动触发翻译issue。**

### 内容写作

JS API 文档模板路径：[https://](https://gitcode.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md)[gitcode.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md](https://gitcode.com/openharmony/docs/blob/master/zh-cn/contribute/template/js-template.md)

**每一个文档必须包含的内容：**

- **文档标题**

  - **起始版本说明（必选）**：本模块首批接口的起始版本，以说明的形式进行插入。

    ![](figures/figure4.png)

  - **模块说明（必选）**：对该模块提供的功能、使用场景和使用建议进行简要描述。

    例如，轻量级存储为应用提供key-value键值型的文件数据处理能力，支持应用对数据进行轻量级存储及查询。

  - **导入模块/使用说明（必选）**：根据实际情况填写导入模块，如果没有导入模块，将“导入模块”修改为“使用说明”。

       导入模块，采用**代码段**的样式，给出import语句。

       使用说明，说明使用接口的先决条件，例如：在使用AbilityContext的功能前，需要通过getContext()先获取Context对象。

  - **权限（必选）**：对该模块接口的使用权限做以说明。

    例如，需要权限：ohos.permission.XXX（如不涉及可删除，如果是系统权限要说明）

  - **功能描述（必选）**：对该模块涉及到的属性、接口等做以说明，在功能描述中进行详细解释。

- **功能描述（与d.ts文件保持一致）**：

  - **属性字段（namespace下的，可选）**：定义了对象的特征。 以表格形式呈现，包括属性名称、属性类型、可读、可写、属性说明。

  - **方法（namespace下的，必选）**：关联到对象的函数。以section形式呈现，包括方法名称、调用形式、功能说明、参数、返回值、示例代码。

  - **枚举（可选）**：一组值组成的类型。 以表格形式呈现，包括枚举名称、枚举值、说明。

  - **类/interface（可选）**：一般包含自有属性和方法。以section形式呈现，包括类名/interface名、描述、自有属性等。

  - **自定义类型（ 可选）**：以k-v键值对表示的interface，描述和方法的参数一致。以表格形式呈现，包括参数名、类型、是否必填、说明。

  - **属性字段（ class/interface里的，可选）**

  - **方法（ class/interface里的）**

**标题层级**：

![](figures/figure5.png)

**版本标记**：

1. 如果新版本增加了一个类，则该类、类的方法、类的属性均需打上版本标记。以全球化intl的文档为例说明。

   intl的起始版本是API 7，在API 8新增了类**Collator、constructor方法等**，**于是给类Collator及其所有的方法打上8+的上标**，标记方式为直接在新增内容后面标记8+。

   ![](figures/figure7.png)

2. 对于新版本废弃的内容，不能直接在文档上删去，需在废弃内容后面加上标标注deprecated，并使用“>”引用语法建议使用的替代方式，加上对应的链接。示例如下：

   abandonmentMethod(deprecated)

   \> 从API version 7 开始废弃，建议使用newMethod替代。

**写作示例**：

1. 参数返回值说明、示例代码写作示例：

![](figures/figure8.png) 2. 类、interface写作示例：

![](figures/figure9.png)

## JS 开发指南写作

### 文档创建方式

![](figures/figure10.png)

**注意**：

1. 文件夹命名：一个文件夹对应相关模块的开发指导。
2. 上传路径：docs/zh-cn/application-dev/xxx文件夹，图片放到对应的figures文件夹中。
3. 新增指南/添加文档，均需填写对应的Readme，即docs/zh-cn/application-dev/xxx文件夹/Readme-CN.md。

### 内容写作

开发指南模板链接：[guide-template.md](/template/guide-template)

**每一个文档必须包含的内容**：

-  **概述/xxx开发概述（必选）** 

   -  **功能简介（必选）** ：描述本指南提供了什么能力，指导开发者完成什么任务。

   -  **基本概念（必选）** ：描述开发任务相关的基本概念。

   -  **运作机制（可选）** ：描述开发任务实现功能的基本运作原理。

   -  **约束与限制（必选）** ：描述本开发任务过程中的约束条件，以及此操作约束带来相应的负面影响。

-  **Xxx开发指导（必选）** 

   -  **场景介绍（必选）** ：描述在什么情景下解决什么问题，最终达到什么样的效果。

   -  **接口说明（必选）** ：描述本开发指导相关的接口有哪些。

   -  **开发步骤（必选）** ：描述开发的整体过程，便于开发者快速完成开发

   -  **调测验证（可选）** ：开发完成后，如有独立的调测验证操作，需提供指导，以确认操作是否成功。

   -  **开发实例/sample（必选）** ：开发完成后，基于一个任务整体做代码段的描述。

可选≠不写，可选=子系统可能没有这个情况。

**写作示例：**

1. 概述写作示例：

   ![](figures/figure11.png)

2. 开发指导步骤写作示例：

   ![](figures/figure12.png)