请查阅 勘误表 以获取自发布以来报告的任何错误或问题。
另请参阅 翻译版本。
Copyright © 2014-2018 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
本文档描述了用户代理如何从网页内容语言中确定名称和描述的可访问对象。这些信息随后通过辅助功能 API公开,以便辅助技术能识别这些对象并向用户展示它们的名称或描述。记录确定名称和描述的算法,有助于在不同的辅助功能API之间实现这些属性的一致性公开,并确保这些信息以符合作者意图的方式呈现。
可访问名称和描述计算规范定义了适用于多种内容技术的支持。这包括由通用的WAI-ARIA [WAI-ARIA] 角色、状态和属性以及针对单一内容语言的特定功能所提供的可访问名称和描述。
本文件取代了WAI-ARIA 1.0 用户代理实现指南 [WAI-ARIA-IMPLEMENTATION] W3C 推荐中的可访问名称和描述相关指导。它属于WAI-ARIA 概览中描述的 WAI-ARIA 套件的一部分。
本节描述了本文档在发布时的状态。其他文件可能会取代本文档。当前 W3C 出版物及该技术报告的最新修订版可在 W3C 技术报告索引 https://www.w3.org/TR/ 查询。
这是由可访问富互联网应用工作组发布的 Accessible Name and Description Computation (Accname) 1.1 W3C 推荐规范。工作组创建了Accname 1.1 实施报告,以证明规范可实现。Accname 1.1 变更历史可在附录中查阅。
如需对本文档发表评论,请在 W3C accname GitHub 仓库提交问题。如果无法使用该方式,请发送邮件至 public-aria@w3.org(评论存档)。收到的对 Accname 1.1 推荐的评论不会导致该规范版本发生更改,但可能会在勘误或未来版本中处理。工作组可能不会对评论做出正式回应,但未来工作可能会对收到的评论进行处理。正在进行中的技术更新可在公开编辑草案中查阅。
本文档由 可访问富互联网应用工作组 发布为推荐规范。
请参阅工作组的 实施报告。
本文档已由 W3C 会员、软件开发者及其他 W3C 相关团体和利益相关方审查,并由主任认可为 W3C 推荐。该文档是稳定的,可作为参考资料或被其他文档引用。W3C 的作用是引起对规范的关注并促进其广泛部署。这增强了 Web 的功能性和互操作性。
本文档由一个 在 W3C 专利政策 下运作的团体产生。 W3C 维护着 相关专利公开的公开列表, 该页面还包括专利披露的说明。个人如果确实知晓某项专利且认为其包含必要声明,必须按照 W3C 专利政策第六节 披露相关信息。
本文档受 2018年2月1日 W3C 流程文件 管理。
本节为非规范性内容。
用户代理从 DOM [DOM]
获取信息,并创建一个名为辅助功能树的并行结构,由可访问对象组成。可访问对象提供关于其角色、状态和属性的信息。例如,一个可访问对象的角色是menuitem
,当前处于enabled
状态,并具有haspopup
属性,表示它会引导到一个子菜单。
本文档描述的可访问对象的两个属性是其可访问名称和可访问描述。名称是一个简短的标签,提供关于对象用途的信息。例如,菜单项的可访问名称可以是新建
,表示该菜单项可以创建新文档、窗口等。
描述是进一步说明可访问对象性质的简短解释。如果名称足够,则不一定需要描述,但描述有助于用户更好地理解对象的用途。
辅助功能 API目前支持可访问名称和描述的平面、无结构字符串。因此,名称/描述计算的结果是一个平面字符串。
术语“可访问名称”和“可访问描述”用于强调它们是可访问对象通过辅助功能 API暴露的属性。然而,后文通常简称为“名称”和“描述”。
除了标记为非规范性内容的章节外,本规范中的所有编写指南、图示、示例和注释均为非规范性内容。 规范中的其他内容均为规范性内容。
关键词 MUST 需按 [RFC2119] 中描述的方式进行解释。
RFC-2119 关键词以大写形式显示,并包含在带有class="rfc2119"
的strong
元素内。当上述关键词被使用但未采用此格式时,它们不具有 RFC
2119 的正式意义,仅为解释性说明,即仅为参考性内容。
本规范尽量避免此类用法。
章节是否为规范性或非规范性(参考性),适用于整个章节及其所有子章节。
参考性章节提供有助于理解规范的信息。这些章节可能包含推荐实践的示例,但并不要求遵循这些建议才能符合本规范。
虽然部分术语在原文中直接定义,以下定义在整个文档中均有使用。
操作系统和其他平台提供一组接口,向对象和事件公开信息,供辅助技术使用。辅助技术通过这些接口获取信息并与这些小部件交互。辅助功能 API 的示例有 Microsoft Active Accessibility [MSAA]、Microsoft 用户界面自动化 [UI-AUTOMATION]、MSAA 与 UIA Express [UIA-EXPRESS]、Mac OS X 辅助功能协议 [AXAPI]、Linux/Unix 辅助功能工具包 [ATK] 和 辅助技术服务提供者接口 [AT-SPI],以及 IAccessible2 [IAccessible2]。
表示用户界面结构的可访问对象树。辅助功能树中的每个节点代表一个通过辅助功能 API公开的用户界面(UI)元素,例如按钮、复选框或容器。
可访问描述为界面元素提供附加信息,用以补充可访问名称。可访问描述可能可见,也可能不可见。
可访问名称是用户界面元素的名称。每个平台的辅助功能 API都提供可访问名称属性。可访问名称的值可能来源于界面元素的可见(例如按钮上的可见文本)或不可见(例如描述图标的文本替代)属性。参见相关可访问描述。
可访问名称属性的简单示例是“确定”按钮。文本“确定”即为可访问名称。当按钮获得焦点时,辅助技术可能会将平台的角色描述与可访问名称拼接。例如,屏幕阅读器可能会朗读“按钮 确定”或“确定按钮”。拼接顺序和角色描述(如“按钮”、“可点击按钮”等)由平台辅助功能 API或辅助技术决定。
平台辅助功能树中的节点。可访问对象向状态、属性和事件公开,用于辅助技术使用。在标记语言(如 HTML 和 SVG)以及 WAI-ARIA 的语境下,标记元素及其属性会被表示为可访问对象。
硬件和/或软件:
本定义可能与其他文件中的定义不同。
在本文件语境下重要的辅助技术示例如下:
具有相似特征的一组实例对象。
在本规范中,元素的使用同标记语言。元素是标记语言中的结构单元,包含用于对象的数据。
用于在计算系统中向其他对象传达某对象状态离散变化的编程消息。用户对网页的输入通常通过抽象事件进行处理,这些事件描述交互并可通知文档对象状态变化。在某些编程语言中,事件更常被称为通知。
表示元素对任何用户都不可见、不可感知或不可交互。当元素或其任一祖先元素未被渲染或被明确隐藏时,则认为其为隐藏。
仅用于提供信息,不要求符合一致性。要求一致性的内容称为规范性。
要求符合一致性。与此相对,被标识为参考性或“非规范性”的内容不要求符合一致性。
在用户界面语境中,是感知用户体验中的一项内容,在标记语言中由一个或多个元素表示,并由用户代理进行渲染。
在编程语境中,是一个或多个类和接口的实例,这些类和接口定义了类似对象的一般特性。辅助功能 API中的对象可能代表一个或多个 DOM 对象。辅助功能 API拥有与 DOM 不同的接口定义。以用户能感知的方式呈现内容。本文档中的引用与WCAG 2.1 原则一:内容必须可感知 [WCAG21]相关。
对某一对象本质至关重要的属性,或表示与对象相关的数据值。属性的更改可能显著影响对象的意义或呈现。一些属性(例如 aria-multiline
)通常变化较少,但这种频率差异不是规则。部分属性,如 aria-activedescendant
、aria-valuenow
和 aria-valuetext
则可能频繁变化。参见状态与属性的区分。
类型的主要指示器。 这种语义关联使工具能够以符合用户对该类型对象期望的方式,呈现并支持与对象的交互。
状态是表达属性的动态特性,表示对象可因用户操作或自动过程而变化。状态不会影响对象的本质,仅表示与对象或用户交互相关的数据。参见状态与属性的区分。
任何宿主语言属性,只要会导致用户代理生成工具提示(如桌面用户代理中的鼠标悬停响应)。
用于检索、呈现并促进最终用户与 Web 内容交互的任何软件。此定义可能与其他文件中的定义不同。
用户可交互的独立用户界面对象。小部件既有仅有一个值或操作的简单对象(如复选框和菜单项),也有包含许多管理子对象的复杂对象(如树和网格)。
名称和描述计算的起点是一个 DOM 元素。输出是一个扁平的、无结构的字符串,可以是一个单词,也可以是一串以空格分隔的标记。例如
保存
和
从磁盘重新加载
。
一个重要的因素是元素的角色,它决定哪些内容会被计入名称字符串。角色有一个
nameFrom
RDF 属性,有两种可能的值:
aria-label
和 aria-labelledby
属性,或者宿主语言的标签机制,如 HTML 中的 alt
或 title
属性,或 SVG 中的 desc
元素。
可访问富互联网应用 (WAI-ARIA) 1.1 [WAI-ARIA] 规范提供了支持 author 来源名称 和 content 来源名称的角色列表。
用户代理 必须按照下方可访问名称与描述计算章节中列出的规则,计算可访问名称。
如果存在aria-describedby
,用户代理 必须通过将当前元素上的 aria-describedby
属性所引用元素的文本替代拼接起来,计算可访问描述。引用元素的文本替代的计算方法详见下方 可访问名称与描述计算章节。
可访问名称与描述计算用于生成可访问名称和 可访问描述。针对不同类型的元素、节点和标记组合,分别有不同规则。文本替代在需要时,将从元素所包含的所有相关内容构建。通过步骤2B和2F实现递归,使用完整规则从其子节点或引用节点获取文本。
该计算的目的是为替代展示生成一个可感知的标签或描述,形式为以空格分隔的扁平字符串。
当前节点
等于根节点
,后续可能是根节点
的某个后代,或其他被引用节点。
结果
复制到 X。结果
追加到 X 的末尾。结果
复制到 X。结果
追加到空格之后。结果
复制到 X。结果
放在 X 的开头。结果
复制到 X。结果
放在 X 的开头,并在复制后加一个空格。某个元素的文本替代计算如下:
根节点
设为指定元素,当前节点
设为根节点
,累计文本总量
设为空字符串 ("")。
当前节点
的文本替代:
当前节点
隐藏,且不是被aria-labelledby
或aria-describedby
直接引用,也不是被宿主语言文本替代元素(如 HTML 中的 label
)或属性直接引用,则返回空字符串。
当前节点
有
aria-labelledby
属性,且包含至少一个有效
IDREF,且当前节点
未作为aria-labelledby
遍历的一部分,则按顺序处理其 IDREF:
当前节点
有 aria-describedby
属性,且包含至少一个有效
IDREF,且当前节点
未作为aria-describedby
遍历的一部分,则按顺序处理其 IDREF:
累计文本
设为空字符串。当前节点
设为该 IDREF 所引用的节点。当前节点
的文本替代。将结果
设为该文本替代。
结果
有空格追加到累计文本
。累计文本
。以下示例展示了“…且当前节点
未作为aria-labelledby
遍历的一部分…”的含义。
element1
的可访问名称为“hello”,因为这是首次遍历其aria-labelledby
,指向element3
。
element2
没有可访问名称。计算会首次遍历其aria-labelledby
,指向element1
,但不会随后遍历element1
的aria-labelledby
。
<element1 id="el1" aria-labelledby="el3" />
<element2 id="el2" aria-labelledby="el1" />
<element3 id="el3"> hello </element3>
当前节点
有aria-label
属性,且其值不为空字符串,或去除空白后不为空字符串:
当前节点
且该节点为嵌入式控件(详见步骤2E),则忽略aria-label
,直接跳到规则2E。aria-label
的值。以下示例展示当节点的aria-labelledby
引用自身时,aria-labelledby
和aria-label
的交互。<span role="button">
元素的可访问名称分别为“删除 Documentation.pdf”和“删除
HolidayLetter.pdf”。
<h1>Files</h1>
<ul>
<li>
<a id="file_row1" href="./files/Documentation.pdf">Documentation.pdf</a>
<span role="button" tabindex="0" id="del_row1" aria-label="Delete" aria-labelledby="del_row1 file_row1"></span>
</li>
<li>
<a id="file_row2" href="./files/HolidayLetter.pdf">HolidayLetter.pdf</a>
<span role="button" tabindex="0" id="del_row2" aria-label="Delete" aria-labelledby="del_row2 file_row2"></span>
</li>
</ul>
当前节点
的原生标记提供了定义文本替代的属性
(如title
)或元素(如 HTML
label
),则返回主语言定义的该文本替代,格式为扁平字符串
,除非该元素被标记为展示性(role="presentation"
或 role="none"
)。
例如,在 HTML 中,img
元素的
alt
属性定义了文本替代字符串,label
元素为被引用的表单元素提供文本。在 SVG2 中,desc
和 title
元素为其父元素提供描述。
当前节点
是嵌入在标签(如 HTML 的 label
元素,或被
aria-labelledby
直接引用的任何元素)中的控件,并且用户可以调整嵌入控件的值,则作为文本替代的一部分包含嵌入控件,具体如下:
当前节点
的角色允许content
来源名称,或当前节点
被aria-labelledby
、aria-describedby
引用,或为原生宿主语言文本替代元素(如 HTML 的 label
),或为原生宿主语言文本替代元素的后代节点:
累计文本
设为空字符串。当前节点
相关的 CSS 生成文本内容,并将其包含进累计文本
。CSS
:before
和 :after
伪元素 [CSS2] 可为有内容模型的元素提供文本内容。
当前节点
的每个子节点:
当前节点
设为子节点。当前节点
的文本替代。将结果
设为该文本替代。
结果
追加到累计文本
。累计文本
。重要:子树中的每个节点仅被访问一次。如果已从某后代收集文本,但在其他后代节点通过 IDREF 再次引用,则不再处理该引用,以避免无限循环。
此步骤可作用于子节点自身,即计算是递归的,会收集当前节点
子树所有元素的文本,无论层级多深。然而,任何后代节点的文本替代都可能来自上述步骤B到D中更高优先级的标记(如“Namefrom:
author”属性为整个子树提供文本替代)。
当前节点
是文本节点,则返回其文本内容。
当前节点
是正在计算可访问名称或可访问描述的元素的后代,并且包含后代节点,则转到2F.i。
当前节点
有提示属性,则返回其值。
仅在没有其他内容(包括子树内容)提供结果时,才使用提示属性。
将上述每一步的结果
有空格追加到累计文本总量
。
有关名称和描述的辅助功能 API 映射信息,包括如 labelled-by/label-for 和
described-by/description-for 等关系,已在 核心辅助功能 API 映射规范中记录
[CORE-AAM-1.1]。请参阅映射表中的 aria-label
、aria-labelledby
和 aria-describedby
的条目。
<img>
特殊情况移至 HTML-AAM。本节为非规范性内容。
以下人员为本文件的开发做出了贡献。
本出版物部分由美国联邦教育部、国家残障、独立生活与康复研究院(NIDILRR)资助,最初合同号为 ED-OSE-10-C-0067,现为 HHSP23301500054C。本出版物内容不必然反映美国教育部观点或政策,也不代表美国政府对商品、商业产品或组织的认可。