W3C

HTML to Platform Accessibility APIs Implementation Guide

A user agent developer's guide to understanding and implementing accessibility support in HTML

W3C Editors Draft 15 June 2013

This version:
http://dev.w3.org/html5/html-api-map/
Latest published version:
http://www.w3.org/TR/html-aapi/
Latest editor's draft:
http://dvcs.w3.org/hg/html-api-map/raw-file/tip/Overview.html
Previous versions:
http://www.w3.org/TR/2011/WD-html-aapi-20110525/
http://www.w3.org/TR/2011/WD-html-aapi-20110414/
Editors:
Steve Faulkner, The Paciello Group sfaulkner@paciellogroup.com
Cynthia Shelly, Microsoft cyns@microsoft.com
Jason Kiss, Department of Internal Affairs, New Zealand Government jason.kiss@dia.govt.nz

Abstract

This is draft documentation mapping HTML elements and attributes to accessibility API Roles, States and Properties on a variety of platforms. It provides recommendations on deriving the accessible names and descriptions for HTML elements. It also provides accessible feature implementation examples.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is subject to change without notice.

This document was published by the HTML Working Group as an Editor's Draft. If you are not a HTML working group member and wish to make comments regarding this document please send them to public-html-comments@w3.org (subscribe, archives). If you are a HTML working group member and wish to make comments regarding this document, please send them to public-html@w3.org (subscribe, archives). All feedback is welcome.

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

Table of Contents

1. Introduction: Accessibility APIs

To provide access to desktop GUI applications, assistive technologies originally used heuristic techniques to determine the meaning of the user interface and built an alternative off screen model. For example, a row of labels displayed horizontally near the top of an application window might be a menu. Labels with a border drawn around them might be buttons. Heuristic techniques are not always accurate, however, and require assistive technologies to be updated whenever the software application is updated.

A much better technique is for the software application to provide the necessary information for interoperability with assistive technology. To meet this need, platform owners have developed specialized interfaces, called accessibility APIs, which can be used to communicate accessibility information about user interfaces to assistive technologies.

In the case of static Web pages, the Document Object Model (DOM) is used to represent the structure and state of the elements in the document being rendered by a user agent. The elements of the document are organized into a hierarchy of nodes known as the DOM tree. For traditional static Web pages, assistive technologies, such as screen readers, interact with user agents using the DOM. For UI elements that are known to be interactive, such as HTML form elements and desktop applications, assistive technologies may use platform accessibility APIs.

Accessibility APIs covered by this document are:

If User Agent developers need to expose to other accessibility APIs, it is recommended that they work closely with the developer of the platform where the API runs, and assistive technology developers on that platform.

2. Exposing HTML features that do not directly map to accessibility API properties

HTML may have features that are not supported by accessibility APIs at the time of publication. There is not a one to one relationship between all features and platform accessibility APIs. When HTML roles, states and properties do not directly map to an accessibility API, and there is a method in the API to expose a text string, expose the undefined role, states and properties via that method.

IAccessible2 and ATK use object attributes to expose semantics that are not directly supported in the APIs. Object attributes are name-value pairs that are loosely specified, and very flexible for exposing things where there is no specific interface in an accessibility API. For example, at this time, the HTML5 header element can be exposed via an object attribute because accessibility APIs have no such role available.

For accessibility APIs that do not have "object attributes" per se, it is useful to find a similar mechanism or develop a new interface to expose name/value pairs. Under the Mac OS X Accessibility Protocol, all getters are already simply name-value pairs and it is possible to expose new semantics whenever necessary. Keep in mind, this also requires working with the assistive technology developers to gain support for the new semantics.

3. HTML element to Accessibility API Role Mapping Matrix

Notes:

Mappings of HTML elements to platform accessibility APIs: ARIA, MSAA + UIA Express, MSAA + IAccessible2, UIA, ATK, and AX
HTML element HTML4 HTML5 WAI-ARIA MSAA + UIA Express MSAA + IAccessible2 UIA Control Type and Other Features AT-SPI AX
AXRole
AXSubrole
AXRoleDescription
a (represents a hyperlink) Yes Yes link role ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants.

Use MSAA or UIA guidance
ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. HyperLink ROLE_LINK AXLink
(null)
link
a (no href attribrute) Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text ROLE_TEXT AXGroup
(null)
group
abbr Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
IA2_ROLE_TEXT_FRAME Text

ROLE_TEXT

Object attribute role="abbr"

AXGroup
(null)
group
address Yes Yes none ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance

IA2_ROLE_PARAGRAPH

Object attribute role="address"

Group

ROLE_PARAGRAPH

Object attribute role="address"

AXGroup
AXLandmarkContentInfo
content information

Note: recommend AXRoleDescription of "address" to disambiguate from "contentinfo" landmark role.

Refer to WebKit bug 83989
area (represents a hyperlink) Yes Yes link role ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants.

Use MSAA or UIA guidance
ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. HyperLink ROLE_LINK AXLink
(null)
link
area (no href attribute) Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text ROLE_TEXT Not mapped
article No Yes article role ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY

??ROLE_SYSTEM_GROUPING?

Use MSAA or UIA guidance
ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY ??Group or Text?? ROLE_DOCUMENT_FRAME + do not expose STATE_EDITABLE AXGroup
AXDocumentArticle
article
aside No Yes complementary role ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
IA2_ROLE_COMPLEMENTARY_CONTENT

Object attribute role="complementary"
Group ROLE_SECTION

Object attribute role="complementary"
AXGroup
AXLandmarkComplementary
complementary
audio No Yes none ROLE_SYSTEM_GROUPING

?
ROLE_SYSTEM_GROUPING Group ROLE_PANEL

AXGroup
(null)
group

Note: UI controls within the audio element exposed as AXToolbar.

b Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text ROLE_TEXT AXGroup
(null)
group
base Yes Yes none Not mapped

Not mapped
Not mapped Not mapped Not mapped Not mapped
bdi none
bdo Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT text ROLE_TEXT AXGroup
(null)
group
blockquote Yes Yes none ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
IA2_ROLE_SECTION Group ROLE_SECTION  AXGroup
(null)
group
body Yes Yes document role ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY Document ROLE_DOCUMENT_FRAME + STATE_READONLY AXGroup
(null)
group
br Yes Yes none ROLE_SYSTEM_ WHITESPACE

?
ROLE_SYSTEM_ WHITESPACE ? ? Not mapped
button Yes Yes button role ROLE_SYSTEM_PUSHBUTTON.

Use MSAA or UIA guidance
ROLE_SYSTEM_PUSHBUTTON Button

?? When it is in a <menu> it defines a command.  Is it still a button, or is it a menuitem??
ROLE_PUSH_BUTTON AXButton
(null)
button
canvas No Yes none SYSTEM_ROLE_GRAPHIC

Use MSAA or UIA guidance
IA2_ROLE_CANVAS Image

NOTE: subdom elements will be mapped separately
ROLE_CANVAS AXImage
(null)
image
caption Yes Yes none ROLE_SYSTEM_TEXT
+ STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
IA2_ROLE_CAPTION text
The parent table has a UIA_LabeledByPropertyId pointing to the UIA element for the caption element.
ROLE_CAPTION AXGroup
(null)
group
cite Yes Yes none ROLE_SYSTEM_TEXT

??GROUP??

text
ROLE_SYSTEM_TEXT text
??group??
ROLE_TEXT AXGroup
(null)
group
code Yes Yes none ROLE_SYSTEM_TEXT

text
ROLE_SYSTEM_TEXT text ROLE_TEXT AXGroup
(null)
group
col Yes Yes none ?ROLE_SYSTEM_COLUMN not mapped ? not mapped Not mapped
colgroup Yes Yes none ?ROLE_SYSTEM_GROUPING

?TODO:  look in more detail at UIA table implemenation
not mapped ?TODO:  look in more detail at UIA table implemenation not mapped Not mapped
Command: an element that defines a command, whose Type facet is "checkbox", and that is a descendant of a menu element whose type attribute is in the toolbar state No Yes menuitemcheckbox role, with the aria-checked state set to "true" if the command's Checked State facet is true, and "false" otherwise ROLE_SYSTEM_CHECKBUTTON
or ROLE_SYSTEM_MENUITEM

Use UIA guidance
IA2_ROLE_CHECK_MENU_ITEM + object attribute checkable="true" MenuItem with Toggle pattern ROLE_CHECK_MENU_ITEM + object attribute checkable="true" AXCheckbox
(null)
check box
Command: an element that defines a command, whose Type facet is "command", and that is a descendant of a menu element whose type attribute is in the toolbar state No Yes menuitem role ROLE_SYSTEM_MENUITEM

Use either MSAA or UIA guidance
ROLE_SYSTEM_MENUITEM MenuItem ROLE_MENU_ITEM depends on element used to define command
Command: an element that defines a command, whose Type facet is "radio", and that is a descendant of a menu element whose type attribute is in the toolbar state No Yes menuitemradio role, with the aria-checked state set to "true" if the command's Checked State facet is true, and "false" otherwise ROLE_SYSTEM_RADIOBUTTON or ROLE_SYSTEM_MENUITEM

Use UIA guidance
IA2_ROLE_RADIO_MENU_ITEM + object attribute checkable="true" MenuItem with Toggle pattern ROLE_RADIO_MENU_ITEM + object attribute checkable="true" AXRadioButton
(null)
radio button
data No
datalist No Yes listbox role, with the aria-multiselectable property set to "false" ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP.

Use UIA guidance
ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP. Combobox ROLE_COMBO_BOX + STATE_EXPANDABLE AXComboBox
(null)
combo box
dd Yes Yes none ROLE_SYSTEM_TEXT

?
IA2_ROLE_PARAGRAPH ? ROLE_TEXT AXGroup
AXDefinition
definition
del Yes Yes none ROLE_SYSTEM_TEXT

?
ROLE_SYSTEM_TEXT ? ROLE_TEXT AXGroup
(null)
group
details No Yes none
??dialog seems closer??
ROLE_SYSTEM_GROUPING

 
ROLE_SYSTEM_GROUPING Group
??window??
ROLE_PANEL ?
dfn Yes Yes none ROLE_SYSTEM_TEXT

 
ROLE_SYSTEM_TEXT ? ROLE_TEXT AXGroup
(null)
group
dialog
div Yes Yes none ROLE_SYSTEM_GROUPING

 
IA2_ROLE_SECTION ? ROLE_SECTION AXGroup
(null)
group
dl Yes Yes none ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY List ROLE_LIST + do not expose STATE_EDITABLE AXList
AXDefinitionList
definition list
dt Yes Yes none ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY

 
ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY ListItem ROLE_LISTITEM + do not expose STATE_EDITABLE AXGroup
AXTerm
term
em Yes Yes none ROLE_SYSTEM_TEXT

 
ROLE_SYSTEM_TEXT ? ROLE_TEXT AXGroup
(null)
group
embed No Yes none ROLE_SYSTEM_CLIENT

 
ROLE_SYSTEM_CLIENT ?Pane? Window? ROLE_EMBEDDED depends on format of data file
fieldset Yes Yes none ROLE_SYSTEM_GROUPING

Use UIA or MSAA guidance
ROLE_SYSTEM_GROUPING Group

ROLE_PANEL
Object attribute role="fieldset"

AXGroup
(null)
group
figcaption No Yes none ROLE_SYSTEM_TEXT

se UIA or MSAA guidance

IA2_ROLE_CAPTION
Object attribute role="figcaption"

Text ROLE_CAPTION
Object attribute role="figcaption"
AXGroup
(null)
group
figure No Yes none ROLE_SYSTEM_GROUPING

se UIA or MSAA guidance

ROLE_SYSTEM_GROUPING
Object attribute role="figure"

note: accessible name from child figcaption

Group

??discuss graphic/image vs. group??
ROLE_PANEL
Object attribute role="figuret"
?
footer No Yes none ROLE_SYSTEM_GROUPING

se UIA or MSAA guidance

ROLE_SYSTEM_GROUPING

Object attribute role="footer"

Expose as text string "footer" in UIAutomationType_String
??discuss exposing localized type for all unmapped elements, or is it better to expose as Group??

ROLE_PANEL

Object attribute role="footer"

If contained in article or section element:
AXGroup
(null)
group

Otherwise:
AXGroup
AXLandmarkContentInfo
footer

Refer to Webkit bug 78967

form Yes Yes form role ROLE_SYSTEM_GROUPING

se UIA or MSAA guidance
IA2_ROLE_FORM Group ROLE_PANEL AXGroup
AXLandmarkForm
form
frame Yes No   ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY

??currently mapped as pane not document.  the document inside is mapped as document??
ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY Document ROLE_DOCUMENT_FRAME + STATE_READONLY AXWebArea
(null)
HTML content
frameset Yes No   ? ? ? ? Not mapped
h1, h2, h3, h4, h5, h6 Yes Yes heading role, with the aria-level property set to the element's outline depth ROLE_SYSTEM_TEXT or use xml-roles IA2_ROLE_HEADING Use the IAccessible2::attributes heading-level attribute to determine the heading level. Text ROLE_HEADING AXHeading
(null)
heading

Use AXLevel attribute to expose the heading level.
head Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
header No Yes none ROLE_SYSTEM_GROUPING

ROLE_SYSTEM_GROUPING

Object attribute role="header"

Group
(don't put header in localized type string because there
is a header role for table headers)

ROLE_PANEL

Object attribute role="header"

If contained in article or section element:
AXGroup
(null)
group

Otherwise:
AXGroup
AXLandmarkBanner
banner

Refer to Webkit bug 78967

hr Yes Yes separator role ROLE_SYSTEM_SEPARATOR ROLE_SYSTEM_SEPARATOR Separator ROLE_SEPARATOR ?
html Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
i Yes Yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT Text ROLE_TEXT AXGroup
(null)
group
iframe Yes Yes none ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY

??pane??
ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY Document

??Pane??
ROLE_DOCUMENT_FRAME + STATE_READONLY AXWebArea
(null)
html content
img Yes Yes img role ROLE_SYSTEM_GRAPHIC ROLE_SYSTEM_GRAPHIC Image ROLE_IMAGE AXImage
(null)
image
img (alt attribute is empty) Yes Yes presentation role ROLE_SYSTEM_GRAPHIC with AccName set to empty string

Do not expose this object

Image with NameProperty set to the empty string Do note expose this object Not mapped
input (type attribute in the Button state) Yes Yes button role ROLE_SYSTEM_PUSHBUTTON ROLE_SYSTEM_PUSHBUTTON Button ROLE_PUSH_BUTTON AXButton
(null)
button
input (type attribute in the Button state and parent is a menu)       ROLE_SYSTEM_MENUITEM ROLE_SYSTEM_MENUITEM MenuItem ROLE_MENU_ITEM   
input (type attribute in the Color state) No Yes   If implemented as a textbox, ROLE_SYSTEM_TEXT

If implemented as a color picker, implement IUIAutomationSelectionPattern for the container and IUIAutomationSelectionItemPattern for each color choice


??
IA2_ROLE_COLOR_CHOOSER If implemented as a textbox, Edit

If implemented as a color picker, set localized control type string to Color Picker

Implement IUIAutomationSelectionPattern for the container and IUIAutomationSelectionItemPattern for each color choice
ROLE_COLOR_CHOOSER If implemented as a textbox,
AXTextField
(null)
text field

If implemented as a color picker,
AXColorWell
(null)
color chooser
input (type attribute in the Checkbox state) Yes Yes checkbox role, with the aria-checked state set to "mixed" if the element's indeterminate IDL attribute is true, or "true" if the element's checkedness is true, or "false" otherwise ROLE_SYSTEM_CHECKBUTTON ROLE_SYSTEM_CHECKBUTTON

Object attribute checkable="true"
Checkbox ROLE_CHECK_BOX + STATE_CHECKED AXCheckBox
(null)
check box
input (type attribute in the Checkbox state and parent is a menu)       ROLE_SYSTEM_CHECKBUTTON

UIA MenuItem
IA2_ROLE_CHECK_MENU_ITEM 

Object attribute checkable="true"
MenuItem with Toggle pattern ROLE_CHECK_MENU_ITEM 

Object attribute checkable="true"
 
input (type attribute in the Date state) No Yes none ROLE_SYSTEM_DROPLIST

UIA Calendar
IA2_ROLE_DATE_EDITOR Calendar ROLE_CALENDAR (not supported by FF) AXDateField
(null)
date field
input (type attribute in the Date and Time state) No Yes none ROLE_SYSTEM_DROPLIST

UIA Calendar
IA2_ROLE_DATE_EDITOR Calendar ROLE_CALENDAR (not supported by FF) AXTextField
(null)
text field
input (type attribute in the Local Date and Time state) No Yes none ROLE_SYSTEM_DROPLIST

UIA Calendar
IA2_ROLE_DATE_EDITOR Calendar ROLE_CALENDAR (not supported by FF) AXTextField
(null)
text field
input (type attribute in the E-mail state with no suggestions source element) No Yes textbox role ROLE_SYSTEM_TEXT

UIA Edit
IA2_STATE_SINGLE_LINE Edit ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the File Upload state) Yes Yes none ROLE_SYSTEM_PUSHBUTTON IA2_ROLE_FILE_CHOOSER Button ROLE_PUSH_BUTTON + ROLE_FILE_CHOOSER AXButton
(null)
button
input (type attribute in the Hidden state) Yes Yes none Do not expose this object Do not expose this object Do not expose this object Do not expose this object Do not expose this object
input (type attribute in the Image Button state) Yes Yes button role ROLE_SYSTEM_PUSHBUTTON ROLE_SYSTEM_PUSHBUTTON Button ROLE_PUSH_BUTTON AXButton
(null)
button
input (type attribute in the Image Button state and parent is a menu)           ?? does this define a command??    
input (type attribute in the Month state) No Yes none ROLE_SYSTEM_DROPLIST

UIA Calendar
IA2_ROLE_DATE_EDITOR Calendar ROLE_DATE_EDITOR AXTextField
(null)
text field
input (type attribute in the Number state) No Yes spinbutton role ROLE_SYSTEM_SPINBUTTON ROLE_SYSTEM_SPINBUTTON Spinner ROLE_SPIN_BUTTON

AXTextField
(null)
text field

Note: stepper controls are assigned roles seperately from the AXTextField in Webkit. The stepper is not currently recognized by VoiceOver.
Refer to Webkit bug 79095

input (type attribute in the Password state) Yes Yes textbox role ROLE_SYSTEM_TEXT with STATE_SYSTEM_PROTECTED

UIA Edit with UIA_IsPasswordPropertyId
IA2_STATE_SINGLE_LINE Edit with UIA_IsPasswordPropertyId ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
AXSecureTextField
secure text field
input (type attribute in the Radio Button state) Yes Yes radio role, with the aria-checked state set to "true" if the element's checkedness is true, or "false" otherwise ROLE_SYSTEM_RADIOBUTTON ROLE_SYSTEM_RADIOBUTTON RadioButton ROLE_RADIO_BUTTON AXRadioButton
(null)
radio button
input (type attribute in the Radio Button state and parent is a menu)           MenuItem with Toggle pattern    
input (type attribute in the Range state) No Yes slider role ROLE_SYSTEM_SLIDER ROLE_SYSTEM_SLIDER Slider ROLE_SLIDER

Slider:
AXSlider
(null)
slider

AXOrientation: AXHorizontalOrientation

Thumb:
AXValueIndicator
(null)
value indicator

Actions:
AXIncrement - increment
AXDecrement - decrement

input (type attribute in the Reset Button state) Yes Yes button role ROLE_SYSTEM_PUSHBUTTON ROLE_SYSTEM_PUSHBUTTON Button ROLE_PUSH_BUTTON AXButton
(null)
button
input (type attribute in the Search state with no suggestions source element) No Yes textbox role ROLE_SYSTEM_TEXT

UIA Edit
IA2_STATE_SINGLE_LINE Edit ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
AXSearchField
search field
input (type attribute in the Submit Button state) Yes Yes button role ROLE_SYSTEM_PUSHBUTTON ROLE_SYSTEM_PUSHBUTTON Button ROLE_PUSH_BUTTON AXButton
(null)
button
input (type attribute in the Telephone state with no suggestions source element) No Yes textbox role ROLE_SYSTEM_TEXT

UIA Edit
IA2_STATE_SINGLE_LINE Edit ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the Text state with no suggestions source element) Yes Yes textbox role ROLE_SYSTEM_TEXT

UIA Edit
IA2_STATE_SINGLE_LINE Edit ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the Text, Search, Telephone, URL, or E-mail states with a suggestions source element) No Yes combobox role, with the aria-owns property set to the same value as the list attribute ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP Combobox ROLE_COMBO_BOX + STATE_EXPANDABLE + object attribute haspopup="true" AXTextField
(null)
text field
input (type attribute in the Time state) No Yes none ROLE_SYSTEM_SPINBUTTON ROLE_SYSTEM_SPINBUTTON Spinner ROLE_SPIN_BUTTON AXTimeField
(null)
time field
input (type attribute in the URL state with no suggestions source element) No Yes textbox role ROLE_SYSTEM_TEXT

UIA Edit
IA2_STATE_SINGLE_LINE Edit ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the Week state) No Yes none ROLE_SYSTEM_DROPLIST

UIA Calendar
IA2_ROLE_DATE_EDITOR Calendar ROLE_CALENDAR AXTextField
(null)
text field
ins Yes Yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT ?text ROLE_TEXT AXGroup
(null)
group
kbd Yes Yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT ? ROLE_TEXT AXGroup
(null)
group
keygen No Yes listbox role, with the aria-multiselectable property set to "false" ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP

Use MSAA or UIA guidance
ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP Combobox ROLE_COMBO_BOX + STATE_EXPANDABLE + object attribute haspopup="true" AXList
(null)
list
label Yes Yes none ROLE_SYSTEM_TEXT

Use UIA guidance
IA2_ROLE_LABEL Text
The parent input has a UIA_LabeledByPropertyId pointing to the UIA element for the legend element.

When the label element has a for attribute pointing to a valid IDREF, the referenced element has a UIA_LabeledByPropertyId pointing to the UIA element for the label element.
ROLE_LABEL AXGroup
(null)
group
legend Yes Yes none ROLE_SYSTEM_TEXT

SHOULD use UIA_LabeledByPropertyId (see UIA column)
IA2_ROLE_LABEL Text

The parent fieldset has a UIA_LabeledByPropertyId pointing to the UIA element for the legend element.
ROLE_LABEL AXGroup
(null)
group
li (parent is an ol or ul) Yes Yes listitem role ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY ListItem ROLE_LISTITEM + do not expose STATE_EDITABLE AXGroup
(null)
group
li (parent is a menu) No Yes listitem role ROLE_SYSTEM_MENUITEM + STATE_SYSTEM_HASPOPUP ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY MenuItem ROLE_LISTITEM + do not expose STATE_EDITABLE AXGroup
(null)
group
link Yes Yes link role ROLE_SYSTEM_LINK
Also, apply special rule to expose STATE_LINKED to link and all its descendants.

Use either MSAA or UIA guidance
ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. HyperLink ROLE_LINK Not mapped
main No Yes main role
map Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
mark No Yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT Text ROLE_TEXT AXGroup
(null)
group
math No Yes math role ROLE_SYSTEM_EQUATION ROLE_SYSTEM_EQUATION ? ROLE_UNKNOWN AXGroup
AXDocumentMath
math
menu (type attribute in the popup menu state) No Yes menu role ROLE_SYSTEM_MENUPOPUP

Use either MSAA or UIA guidance
ROLE_SYSTEM_MENUPOPUP Menu ROLE_MENU. These objects should not be exposed for a submenu if there is a parent menu item spawning the submenu AXMenu
(null)
menu
menu (type attribute in the toolbar state) No Yes toolbar role ROLE_SYSTEM_TOOLBAR

Use either MSAA or UIA guidance
ROLE_SYSTEM_TOOLBAR ToolBar ROLE_TOOL_BAR AXMenu
(null)
menu
menuitem (in the command state) No Yes menuitem role ROLE_SYSTEM_MENUITEM

Use UIA guidance
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_MENU_ITEM AXMenuItem
(null)
menu item
menuitem (in the checkbox state)       Use UIA guidance   MenuItem with Toggle pattern    
menuitem (in the radio state)       Use UIA guidance   MenuItem with Toggle pattern    
meta Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
meter No Yes none ROLE_SYSTEM_TEXT
?? not sure this is right.  maybe a number or value or something?

Use UIA guidance
ROLE_SYSTEM_TEXT set Locliazed Control Type to "Meter"

Implement Range Value control pattern with IsReadOnly property set to true
ROLE_TEXT AXGroup
(null)
group
nav No Yes navigation role ROLE_SYSTEM_GROUPING

??
ROLE_SYSTEM_GROUPING
Object attribute role="navigation"
??text ROLE_PANEL
Object attribute role="navigation"
AXGroup
AXLandmarkNavigation
navigation
noscript Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
object Yes Yes no role ?? would pane or window work??

depends on format of data file. examples include document, client, graphic and unknown (tested using object test suite).

Use MSAA or UIA guidance
Refer to MSAA depends on format of data file. ROLE_EMBEDDED depends on format of data file.
ol Yes Yes list role ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY List ROLE_LIST + do not expose STATE_EDITABLE AXList
AXContentList
list
optgroup Yes Yes group role ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
ROLE_SYSTEM_GROUPING Group ROLE_PANEL AXMenuItem
(null)
menu item
option (in a list of options or represents a suggestion in a datalist) No Yes option role, with the aria-selected state set to "true" if the element's selectedness is true, or "false" otherwise. ROLE_SYSTEM_LISTITEM

Use MSAA or UIA guidance
ROLE_SYSTEM_LISTITEM ListItem

(note that SelectionItem pattern is required for ListItems)
ROLE_LIST_ITEM AXMenuItem
(null)
menu item
output No Yes status role ROLE_SYSTEM_STATUSBAR

??text read-only seems closer.  this is a label that is calculated??

Use UIA guidance
IA2_ROLE_SECTION

note: object attribute aria-live=polite IA2 controlled_by relation defined by label element @for attribute.
Text. 
When the output element has a for attribute pointing to a valid IDREF, the referenced element has a UIA_LabeledByPropertyId pointing to the UIA element for the output element.
ROLE_SECTION

note: object attribute aria-live=polite controlled_by relation defined by label element @for attribute.
AXGroup
(null)
group
p Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
IA2_ROLE_PARAGRAPH Text ROLE_PARAGRAPH AXGroup
(null)
group
param Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
pre Yes Yes none ROLE_SYSTEM_TEXT

??group?

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text

??group??
ROLE_TEXT AXGroup
(null)
group
progress No Yes progressbar role, with, if the progress bar is determinate, the aria-valuemax property set to the maximum value of the progress bar, the aria-valuemin property set to zero, and the aria-valuenow property set to the current value of the progress bar ROLE_SYSTEM_PROGRESSBAR + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_PROGRESSBAR + STATE_SYSTEM_READONLY ProgressBar ROLE_PROGRESS_BAR + do not expose EXTENDED_STATE_EDITABLE AXProgressIndicator
(null)
progress indicator

Use AXValue to expose current value.
q Yes Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT AXGroup
(null)
group
rp No Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT ?
rt No Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text ROLE_TEXT ?
ruby No Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT ?
s ? Yes none ROLE_SYSTEM_TEXT

??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text

??group??
ROLE_TEXT AXGroup
(null)
group
samp Yes Yes none ROLE_SYSTEM_TEXT
??group?

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT AXGroup
(null)
group
script Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
section No Yes region role ROLE_SYSTEM_PANE
??really?  that's what a frame is.  I think grouping is closer??

??
IA2_ROLE_SECTION ??Text or Group??
ROLE_PANEL AXGroup
AXDocumentRegion
region
select (with a multiple attribute) Yes Yes listbox role, with the aria-multiselectable property set to "true" ROLE_SYSTEM_LIST + STATE_SYSTEM_MULTISELECTABLE + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_LIST + STATE_SYSTEM_MULTISELECTABLE + STATE_SYSTEM_READONLY list with ISelectionProvider::CanSelectMultiple set to true ROLE_LIST + STATE_MULTISELECTABLE AXList
(null)
list
select (with NO multiple attribute) Yes Yes listbox role, with the aria-multiselectable property set to "false" ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP

Use MSAA or UIA guidance
ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP Combobox ROLE_COMBO_BOX + STATE_EXPANDABLE + object attribute haspopup="true" AXPopUpButton
(null)
pop up button
small Yes Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT AXGroup
(null)
group
source No Yes none Do not expose this object Do not expose this object Do not expose this object
??does it populate anything in the parent vidoe or audio object ??
Do not expose this object Do not expose this object
span Yes Yes none ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Group ROLE_TEXT AXGroup
(null)
group
strong Yes Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT AXGroup
(null)
group
style Yes Yes none Do not expose this object Do not expose this object Do not expose this object Do not expose this object Do not expose this object
sub Yes Yes none ROLE_SYSTEM_TEXT
??group?

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT Text
??group??
ROLE_TEXT AXGroup
(null)
group
summary No Yes none ROLE_SYSTEM_PUSHBUTTON
??has popup??

Use MSAA or UIA guidance
ROLE_SYSTEM_PUSHBUTTON Button
with ExpandCollapse pattern

ROLE_PUSHBUTTON +
STATE_EXPANDABLE

AXDisclosureTriangle
(null)
disclosure triangle

sup Yes Yes none ROLE_SYSTEM_TEXT
??group??

Use MSAA or UIA guidance
ROLE_SYSTEM_TEXT ??text or group?? ROLE_TEXT AXGroup
(null)
group
svg No Yes none ROLE_SYSTEM_GRAPHIC DIAGRAM

note: bug filed on role in Firefox
Image DIAGRAM

note: bug filed on role in Firefox
AXGroup
(null)
group
table Yes Yes none ROLE_SYSTEM_TABLE

Use MSAA or UIA guidance
Use IAccessibleTable2 interface DataGrid with Table pattern ROLE_TABLE AXTable
(null)
table
tbody Yes Yes none ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
ROLE_SYSTEM_GROUPING Group   Not mapped
td Yes Yes none ROLE_SYSTEM_CELL

Use MSAA or UIA guidance
ROLE_SYSTEM_CELL DataItem ROLE_TABLE_CELL AXCell
(null)
cell
template No Yes
textarea Yes Yes textbox role, with the aria-multiline property set to "true" ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance
state: STATE_MULTI_LINE Text or Edit? ROLE_ENTRY AXTextArea
(null)
text entry area
tfoot Yes Yes none ROLE_SYSTEM_GROUPING

Use MSAA or UIA guidance
ROLE_SYSTEM_GROUPING Group ROLE_PANEL Not mapped
th (is neither a column header nor a row header) Yes Yes none ROLE_SYSTEM_CELL

Use MSAA or UIA guidance
ROLE_SYSTEM_CELL DataItem ROLE_TABLE_CELL AXCell
(null)
cell
th (is a column header) Yes Yes none ROLE_SYSTEM_COLUMNHEADER

Use MSAA or UIA guidance
  header + OrientationType_Vertical

??seems like it should be HeaderItem.  ARIA UAIG has DataItem??
ROLE_COLUMN_HEADER AXCell
(null)
cell

Parent table also implements AXColumnHeaderUIElements property that is a list of pointers to the column header cells.

Parent table also implements AXHeader property that is a pointer to the row or group containing the columnheader cells.

th (is a row header) Yes Yes none ROLE_SYSTEM_ROWHEADER

Use MSAA or UIA guidance
  header + OrientationType_Horizontal

?seems like it should be HeaderItem.  ARIA UAIG has DataItem??
ROLE_ROW_HEADER AXCell
(null)
cell

Parent table also implements AXRowHeaderUIElements property that is a list of pointers to the row header cells

thead Yes Yes none ROLE_SYSTEM_GROUPING ROLE_SYSTEM_GROUPING Header ROLE_PANEL Not mapped
time No Yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT ? ROLE_TEXT AXGroup
(null)
group
title Yes Yes none Not mapped Not mapped Not mapped Not mapped Not mapped
tr Yes Yes none ROLE_SYSTEM_ROW

Use MSAA or UIA guidance
ROLE_SYSTEM_ROW DataItem

Also requires SelectionItem pattern
ROLE_LIST_ITEM AXRow
AXTableRow
row
track No Yes
u
ul Yes Yes list role ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY

Use MSAA or UIA guidance
ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY List ROLE_LIST + do not expose STATE_EDITABLE AXList
AXContentList
list
var Yes Yes none ROLE_SYSTEM_TEXT

Use MSAA or UIA guidance?
ROLE_SYSTEM_TEXT Text
note: not group, because it would usually only have a wo
ROLE_TEXT AXGroup
(null)
group
video No Yes none ? ? ? ?

AXGroup
(null)
group

Note: UI controls within the video element exposed as AXToolbar.

wbr No Yes none none none none none AXGroup
(null)
group

4. HTML attribute to Accessibility API State and Property Mapping Matrix

Mappings of HTML attributes (excluding event handler content attributes) to platform accessibility APIs: ARIA, MSAA + UIA Express, MSAA + IAccessible2, UIA, AT-SPI, and AX
Attribute Element(s) HTML4 HTML5 WAI-ARIA MSAA + UIA Express MSAA + IAccessible2 UIA AT-SPI AX Comments
abbr th Yes Yes not mapped            
accept input Yes Yes not mapped            
accept-charset form Yes Yes not mapped            
accesskey HTML elements Yes Yes not mapped accKeyboardShortcut accKeyboardShortcut AcceleratorKey ? AXAccessKey  
action form Yes Yes not mapped            
allowfullscreen iframe No Yes            
alt area; img; input Yes Yes not mapped accName Name RELATION_LABEL_FOR AXDescription  
async script No Yes not mapped            
autocomplete
"on|off"
form No Yes

aria-autocomplete

note: the ARIA attribute and the HTML attribute have disparate features.

not mapped Object attribute autocomplete

Expose the STATE_SUPPORTS_AUTOCOMPLETION equivalent state

not mapped Object attribute autocomplete

Expose the STATE_SUPPORTS_AUTOCOMPLETION equivalent state

not mapped  
autocomplete input; select; textarea No Yes

aria-autocomplete

note: the ARIA attribute and the HTML attribute have disparate features.

not mapped Object attribute autocomplete

Expose the STATE_SUPPORTS_AUTOCOMPLETION equivalent state

not mapped Object attribute autocomplete

Expose the STATE_SUPPORTS_AUTOCOMPLETION equivalent state

not mapped  
autofocus button; input; keygen; select; textarea No Yes not mapped - aria-flowto? N/A N/A N/A N/A N/A  
autoplay audio; video No Yes not mapped N/A N/A N/A N/A N/A  
border table Yes Yes not mapped            
challenge keygen No Yes not mapped            
charset meta No Yes not mapped            
charset script Yes Yes not mapped            
checked (if present) menuitem; input Yes Yes aria-checked (state)="true" Set the STATE_SYSTEM_CHECKED state Expose object attribute checkable="true" Expose as ToggleState property in Toggle Control Pattern Expose object attribute checkable="true" AXValue="1"  
checked (if absent) menuitem; input Yes Yes aria-checked (state)="false" Clear the STATE_SYSTEM_CHECKED state Expose object attribute checkable="true" Expose as ToggleState property in Toggle Control Pattern. Expose object attribute checkable="true" AXValue="0"  
cite blockquote; del; ins; q Yes Yes           AXURL  
class HTML elements Yes Yes not mapped            
cols textarea Yes Yes           AXRangeForLine  
colspan td; th Yes Yes           AXColumnIndexRange
pos=column index; len=colspan value
 
command menuitem No Yes not mapped            
content meta Yes Yes not mapped            
contenteditable HTML elements No Yes           ?  
contextmenu HTML elements No Yes aria-haspopup="true" Expose as STATE_SYSTEM_HASPOPUP. If on a push button, change the role to ROLE_SYSTEM_BUTTONMENU. Expose as STATE_SYSTEM_HASPOPUP. If on a push button, change the role to ROLE_SYSTEM_BUTTONMENU. Expose state of the pop-up activities in the ExpandCollapseState property in the ExpandCollapse Control Pattern. Object attribute haspopup="true" Expose AXShowMenu and AXPress actions  
controls audio; video No Yes           Controls exposed as AXToolbar  
coords area Yes Yes not mapped            
crossorigin audio; img; link; script; video No Yes not mapped            
data object Yes Yes not mapped            
datetime del; ins No Yes           ?  
datetime time No Yes           ?  
default track No Yes not mapped            
defer script Yes Yes not mapped            
dir HTML elements ? Yes           ?  
dirname input; textarea ? Yes           ?  
disabled button; menuitem; fieldset; input; keygen; optgroup; option; select; textarea Yes Yes           AXEnabled="false"  
download a; area No Yes           ?  
draggable HTML elements No Yes           ?  
dropzone HTML elements No Yes           ?  
enctype form Yes Yes not mapped            
for label Yes Yes not mapped            
for output No Yes not mapped            
form button; fieldset; input; keygen; label; object; output; select; textarea No Yes not mapped            
formaction button; input No Yes not mapped            
formenctype button; input No Yes not mapped            
formmethod button; input No Yes not mapped            
formnovalidate button; input No Yes not mapped            
formtarget button; input No Yes not mapped            
headers td; th Yes Yes           Expose via AXColumnHeaderUIElements and AXRowHeaderUIElements  
height canvas; embed; iframe; img; input; object; video Yes Yes not mapped            
hidden HTML elements No Yes           Not exposed in AX API  
high meter No Yes           ?  
href a; area Yes Yes           AXURL  
href link Yes Yes              
hreflang a; area; link Yes Yes              
http-equiv meta Yes Yes not mapped            
icon menuitem No Yes not mapped            
id HTML elements Yes Yes not mapped            
ismap img Yes Yes not mapped            
keytype keygen No Yes not mapped            
kind track No Yes              
label menuitem; menu; optgroup; option; track ? Yes              
lang HTML elements Yes Yes              
list input No Yes not mapped            
longdesc img, frame, iframe Yes No No accdescription (Internet Explorer only) Not mapped Not mapped Not mapped Not mapped IE 8+ populates the accdescription with the value of the longdesc attribute. This is brittle as it is overwritten when aria-describedby is used.
loop audio; video No Yes not mapped            
low meter No Yes              
manifest html No Yes not mapped            
max input No Yes           AXMaxValue  
max meter; progress No Yes           AXMaxValue  
maxlength input; textarea Yes Yes              
media a; area; link; source; style ? Yes              
mediagroup audio; video No Yes not mapped            
method form Yes Yes not mapped            
min input   Yes           AXMinValue  
min meter No Yes           AXMinValue  
multiple input; select Yes Yes              
muted audio; video No Yes not mapped            
name button; fieldset; input; keygen; output; select; textarea Yes Yes not mapped            
name form Yes Yes not mapped            
name iframe; object Yes Yes not mapped            
name map Yes Yes not mapped            
name meta Yes Yes not mapped            
name param Yes Yes not mapped            
novalidate form No Yes not mapped            
open details No Yes aria-expanded="true | false" STATE_SYSTEM_EXPANDED
STATE_SYSTEM_COLLAPSED
STATE_SYSTEM_EXPANDED
STATE_SYSTEM_COLLAPSED
ExpandCollapsePattern STATE_COLLAPSED
STATE_EXPANDED
boolean AXExpanded Set properties on the summary element.
open dialog No Yes aria-expanded="true | false" STATE_SYSTEM_EXPANDED
STATE_SYSTEM_COLLAPSED
STATE_SYSTEM_EXPANDED
STATE_SYSTEM_COLLAPSED
ExpandCollapsePattern STATE_COLLAPSED
STATE_EXPANDED
boolean AXExpanded
optimum meter No Yes              
pattern input No Yes              
placeholder input; textarea No Yes           AXPlaceholderValue  
poster video No Yes              
preload audio; video No Yes              
radiogroup menuitem No Yes              
readonly input; textarea Yes Yes   STATE_SYSTEM_READONLY       AXEnabled="false"  
rel a; area; link   Yes              
required input; select; textarea No Yes aria-required

Not mapped *

* Exposed as STATE_SYSTEM_ALERT_LOW, STATE_SYSTEM_ALERT_HIGH in Firefox.

STATE_REQUIRED Expose as IsrequiredForForm property. Expose STATE_REQUIRED AXRequired="true" ?
reversed ol ? Yes              
rows textarea Yes Yes              
rowspan td; th Yes Yes           AXRowIndexRange
pos=row index; len=rowspan value
 
sandbox iframe No Yes              
spellcheck HTML elements No Yes              
scope th Yes Yes              
scoped style No Yes              
seamless iframe No Yes              
selected option Yes Yes              
shape area Yes Yes              
size input; select Yes Yes              
sizes link No Yes              
span col; colgroup Yes Yes              
src audio; embed; iframe; img; input; script; source; track; video Yes Yes              
srcdoc iframe No Yes              
srclang track No Yes              
start ol   Yes              
step input No Yes              
style HTML elements Yes Yes not mapped            
tabindex HTML elements Yes Yes not mapped            
target a; area Yes Yes              
target base Yes Yes              
target form Yes Yes              
title HTML elements Yes Yes           AXHelp  
title abbr; dfn Yes Yes           AXHelp  
title menuitem No Yes           AXHelp  
title link Yes Yes           Not mapped  
title link; style Yes Yes           Not mapped  
translate HTML elements No Yes              
type a; area; link   Yes              
type button Yes Yes              
type button; input Yes Yes              
type menuitem No Yes              
type embed; object; script; source; style Yes Yes              
type menu No Yes              
typemustmatch object No Yes              
usemap img; object Yes Yes              
value button; option Yes Yes              
value input Yes Yes           AXValue  
value li   Yes              
value meter; progress No Yes           AXValue  
value param Yes Yes              
width canvas; embed; iframe; img; input; object; video Yes Yes           AXSize
w=n
 
wrap textarea No Yes              

5. Other Accessibility Implementations

5.1 Use of MSAA VARIANT by Some User Agents

In MSAA, the VARIANT returned by the IAccessible::get_accRole method is limited to a finite number of integer role constants insufficient for describing every HTML element, especially new elements introduced by HTML5. To address this limitation, some user agents, e.g., Firefox and Chrome in cooperation with some screen readers, have elected to expose new roles by returning a string value in that VARIANT in a way that is not described by the MSAA specification.

5.2 Use of the DOM by Some Assistive Technologies

to do

6. Accessible Name and Description calculation

The terms accessible name and accessible description are properties provided in all accessibility APIs. The name of the properties may differ across APIs but they serve the same function: as a container for a short (name) or longer (description) string of text.

6.1 Input type="text", input type="password", input type="search", input type="tel", input type="url" and textarea element

If the control has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

The accessible description is derived from the following sources; aria-describedby or a non-empty placeholder attribute or a non-empty title attribute.

6.1.1 input type="text", input type="password", input type="search", input type="tel", input type="email", input type="url" and textarea element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use the associated label element
  4. Otherwise use the placeholder attribute
  5. Otherwise use the title attribute
  6. If none of the above yield a usable text string there is no accessible name

6.1.2 input type="text", input type="password", input type="search", input type="tel", input type="email", input type="url" and textarea element accessible description calculation

  1. Use aria-describedby
  2. Otherwise use the placeholder attribute if it wasn't used as the accessible name
  3. Otherwise use the title attribute if it wasn't used as the accessible name.
  4. If none of the above yield a usable text string there is no accessible description

6.2 input type="button", input type="submit" and input type="reset"

If the control has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

Otherwise the accessible name is derived from the following sources; a non-empty value attribute, or a non-empty title attribute.

6.2.1 input type="button" , input type="submit" and input type="reset" accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use the value attribute
  4. Otherwise use title attribute
  5. For input type=button: If none of the above yield a usable text string there is no accessible name
  6. For input type=submit: If steps 1 to 4 do not yield a usable text string, the accessible name is a localized string of the word "submit"
  7. For input type=reset: If steps 1 to 4 do not yield a usable text string, the accessible name is a localized string of the word "reset"

6.2.2 input type="button" , input type="submit" and input type="reset" accessible description calculation

  1. use aria-describedby
  2. Otherwise use the value attribute if it wasn't used as the accessible name
  3. Otherwise use the title attribute if it wasn't used as the accessible name
  4. If none of the above yield a usable text string there is no accessible description

6.3 input type="image"

If the control has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

Otherwise the accessible name is derived from the following sources; a non-empty alt attribute, or a non-empty title attribute.

6.3.1 input type="image" accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use alt attribute
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string there is no accessible name

6.3.2 input type="image" accessible description calculation

  1. use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible name.
  3. If none of the above yield a usable text string there is no accessible description

6.4 button element

If the button element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

Otherwise the accessible name is derived from the following sources; non-empty button element subtree or a non-empty title attribute.

6.4.1 button element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use the button element subtree
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string there is no accessible name

6.4.2 button element accessible description calculation

  1. use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible name.

6.5 Other form elements

If the control has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

Otherwise the accessible name is derived from the following sources; a non-empty associated label element or a non-empty title attribute.

6.5.1 Other form elements accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use label element
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string there is no accessible name

6.5.2 Other form elements accessible description calculation

  1. use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible name.
  3. If none of the above yield a usable text string there is no accessible description

6.6 summary element

If the summary element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

Otherwise the accessible name is derived from the following sources; non-empty summary element subtree or a non-empty title attribute or the default text string inserted by the browser

6.6.1 summary element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use summary element subtree
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string the user agent should provide its own text string (e.g. "Details")

6.6.2 summary element accessible description calculation

  1. Use aria-describedby
  2. Otherwise use summary element subtree if not used as the accessible name
  3. Otherwise use the title attribute if it wasn't used as the accessible name
  4. If none of the above yield a usable text string there is no accessible description

6.7 Figure and figcaption elements

If the figure element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

6.7.1 Figure element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use figcaption subtree
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string there is no accessible name

6.7.2 Figure element accessible description calculation

  1. Use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible name.
  3. If none of the above yield a usable text string there is no accessible description.

6.8 img element

If the img element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

6.8.1 img element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use alt attribute
  4. Otherwise use title attribute
  5. If none of the above yield a usable text string there is no accessible name

6.8.2 img element accessible description calculation

  1. use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible description.

6.9 table element

If the table element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

6.9.1 table element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use caption element
  4. Otherwise use the title attribute
  5. Otherwise use the summary attribute
  6. If none of the above yield a usable text string there is no accessible name

6.9.2 table element accessible description calculation

  1. Use aria-describedby
  2. Otherwise use the caption element if it wasn't used as the accessible description
  3. Otherwise use the summary attribute if it wasn't used as the accessible description
  4. Otherwise use the title attribute if it wasn't used as the accessible description
  5. If none of the above yield a usable text string there is no accessible description

6.11 text level elements not listed elswhere

em, strong, small, s, cite, q , dfn, abbr, time, code, var, samp, kbd, sub and sup, i, b, u, mark, ruby, rt, rp, bdi, bdo, br, wbr

If the element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in section 5.2.7. Accessible Name Calculation of the WAI-ARIA 1.0 specification.

6.11.1 text level element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use the title attribute
  4. If none of the above yield a usable text string there is no accessible name

6.11.2 text level element accessible description calculation

  1. Use aria-describedby
  2. Otherwise use the title attribute if it wasn't used as the accessible name
  3. If none of the above yield a usable text string there is no accessible description

7. Accessible feature implementation examples:

7.1 summary and details elements

7.1.1 focus and keyboard interaction

The summary element should be focusable by default.

The details element should not focusable by default.

Pressing the spacebar or enter key when the summary element has focus will show the details element content if the content is hidden. If the details element content is showing and the summary element has focus, pressing the spacebar or enter key will hide the details element content.

7.1.2 Role, name, state and property mapping

The summary element should be mapped to a disclosure triangle role in accessibility APIs that have such a role. For example the Mac accessibility API includes the AXDisclosureTriangle role. In accessibility APIs that do not have such a fine grained role, the summary element should be mapped to a button role. The role mapping table contains recommended mappings for the summary element.

The default accessible name for the summary element is the text content of the summary element.

When the details element content is hidden, the state of the content should be reflected by an accessible state or property.

Example 1: In the Mac accessibility API on the summary element (AXDisclosureTriangle), set AXExpanded property to false. When the details element content is shown, on the summary element (AXDisclosureTriangle), set theAXExpanded property to true. The hidden and shown states of the details element content is reflected by the absence or presence of the open attribute.

Example 2: In the IA2 accessibility API on the summary element (ROLE_SYSTEM_PUSHBUTTON), set STATE_SYSTEM_COLLAPSED. When the details element content is shown, on the summary element (ROLE_SYSTEM_PUSHBUTTON), set STATE_SYSTEM_ EXPANDED. The hidden and shown states of the details element content is reflected by the absence or presence of the open attribute.

7.2 The figure and figcaption elements

to do

8. Table algorithm

The algorithm is a heuristic to determine if table is most likely used for layout, it is currently implemented in Firefox only.

to do

Notes:

 

A. References

A.1 Normative references

to do

A.2 Informative references

to do

Acknowledgements

Enabling funders

The development of this publication is being funded in part by Adobe Systems. The content of this publication does not necessarily reflect the views or policies of Adobe, nor does mention of trade names, commercial products, or organizations imply endorsement by Adobe.

The development of this publication is being funded in part by The Paciello Group. The content of this publication does not necessarily reflect the views or policies of The Paciello Group, nor does mention of trade names, commercial products, or organizations imply endorsement by The Paciello Group.