This is an early draft of a table that maps HTML elements to accessibility APIs on a variety of desktop platforms.
HTML element | hmtl 4 | html 5 | ARIA | MSAA Role | MSAA Name | MSAA Value | MSAA State | IA2 | UIA control type and patterns | ATK Role | AX | comments |
---|---|---|---|---|---|---|---|---|---|---|---|---|
<a href> | y | y | link | link | 'title' attribute, text within <a> element or 'alt' attribute if image link. Concatenated if both text and image 'alt' attribute are provided | 'href' attribute | HyperLink | ATK_ROLE_LINK | AXLink | |||
<area> | y | y | link | link | HyperLink | ATK_ROLE_LINK | AXLink | |||||
article element | n | y | article | none or document like aria? Is HTML article the same as ARIA article? | n/a | n/a | ATK_ROLE_DOCUMENT_FRAME + do not expose ATK_STATE_EDITABLE | AXGroup, AXRoleDescription"article" | UAI Guide has ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY for article. Are html and aria documents the same, and should this be a document or a grouping? | |||
aside element | n | y | note role | none | IA2_ROLE_NOTE | n/a | n/a | AXGroup, AXRoleDescription="note" | ||||
The body element | y | y | document | pane | <title> inner text | see msaa | Document | ATK_ROLE_DOCUMENT_FRAME + readonly | AXGroup, AXRoleDescription="document" | for UIA, should this be document, or still something more like pane? | ||
<button> | y | push button | text inside <button> element or 'title' attribute | see msaa | Button | ATK_ROLE_PUSH_BUTTON | AXButton | |||||
<details> | n | y | button | ??combobox? Summary is a button. | summary | ?? | ? | ? | ? | Maybe this is a buttonmenu? Or summary is a buttonmenu and details is a menu? See UAI Guide on button and haspopup. | ||
<fieldset> | y | y | grouping | <legend> element | Group | ATK_ROLE_PANEL | AXGroup | group is all MSAA has, but do the other APIs have something better? | ||||
footer element | n | y | none | none | n'/a | n/a | n/a | n/a | ||||
<h1>-<h6> | y | y | heading role, with the aria-level property set to the element's outline depth | none | IA2_ROLE_HEADING | Text | ATK_ROLE_HEADING | AXHeading | ||||
header element | n | y | none | none | n/a | n/a | n/a | n/a | ||||
<img alt="text"> | y | y | image | graphic | value of alt attribute | see msaa | Image | ATK_ROLE_IMAGE | AXImage | |||
<img alt=""> | y | y | presentation | graphic | empty string | remove from tree | Image | ATK_ROLE_IMAGE | AXImage | |||
<input type = "button", "submit", or "reset"> | y | y | button | push button | 'value' attribute | see msaa | Button | ATK_ROLE_PUSH_BUTTON | AXButton | |||
input element with a type attribute in the Color state | n | y | No role | none | none | none | none | none | Is there any accessible implmentation advice we can give here? | |||
<input type="checkbox"> | y | y | 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 | checkbox | <label> element associated with it or 'title' attribute | 'checked' attribute | object attribute checkable="true" | Checkbox | ATK_ROLE_CHECK_BOX + object attribute checkable="true" | AXCheckBox | mixed state stuff in APIs | |
input element with a type attribute in the Date state | n | y | No role, with the aria-readonly state set to "true" if the element has a readonly attribute | Is there any accessible implmentation advice we can give here? | ||||||||
input element with a type attribute in the Date and Time state | n | y | No role, with the aria-readonly state set to "true" if the element has a readonly attribute | Is there any accessible implmentation advice we can give here? | ||||||||
input element with a type attribute in the Local Date and Time state | n | y | No role, with the aria-readonly state set to "true" if the element has a readonly attribute | Is there any accessible implmentation advice we can give here? | ||||||||
input element with a type attribute in the E-mail state with no suggestions source element | n | y | textbox role, with the aria-readonly state set to "true" if the element has a readonly attribute | editable text | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role. Any
better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
input element with a type attribute in the File Upload state | y | y | button role | button | see msaa | Button | ATK_ROLE_PUSH_BUTTON | AXButton | default MSAA name? | |||
<input type = "image"> | y | y | button | push button | 'alt' attribute or 'title' attribute | see msaa | Button | ATK_ROLE_PUSH_BUTTON | AXButton | |||
<input type = "text"> | y | y | textbox | editable text | <label> element associated with it or 'title' attribute | 'value' attribute | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Any better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|
<input type = "password"> | y | y | textbox | editable text | <label> element associated with it or 'title' attribute | [[hidden, but look up how]] | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Is there a secret in the apis? How is value hidden? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|
input element with a type attribute in the Range state | n | y | slider | ROLE_SYSTEM_SLIDER | see msaa | Slider | ATK_ROLE_SLIDER | AXSlider | ||||
<input type="radio"> | y | y | radio | radio button | <label> element associated with it or 'title' attribute | 'checked' attribute | see msaa | RadioButton | ATK_ROLE_RADIO_BUTTON | AXRadioButton | ||
input element with a type attribute in the Search state with no suggestions source element | n | y | textbox role, with the aria-readonly state set to "true" if the element has a readonly attribute | textbox | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Look up what's special about search. UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
input element with a type attribute in the Telephone state with no suggestions source element | n | y | textbox role, with the aria-readonly state set to "true" if the element has a readonly attribute | textbox | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Any better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
input element with a type attribute in the Text, Search, Telephone, URL, or E-mail states with a suggestions source element | n | y | combobox role, with the aria-owns property set to the same value as the list attribute, and the aria-readonly state set to "true" if the element has a readonly attribute | combobox | combobox | Combobox | ATK_ROLE_COMBO_BOX + ATK_STATE_EXPANDABLE + object attribute haspopup="true" | AXComboBox | is list or dropdown list better? Do we need to do anything about expanded state? Are there other attributes to account for? | |||
input element with a type attribute in the Time state | n | y | No role, with the aria-readonly state set to "true" if the element has a readonly attribute | none | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Any better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
input element with a type attribute in the URL state with no suggestions source element | n | y | textbox role, with the aria-readonly state set to "true" if the element has a readonly attribute | editable text | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Any better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
input element with a type attribute in the Week state | n | y | No role, with the aria-readonly state set to "true" if the element has a readonly attribute | none | IA2_STATE_SINGLE_LINE if aria-multiline is not "true" | text | ATK_ROLE_ENTRY + ATK_STATE_SINGLE_LINE if aria-multiline is not "true" | AXTextArea | This is ARIA mapping for textbox role.
Any better detail for validated fields in any of the APIs? UAI Guide has textbox mapped to document rather than text for UIA. Is that right? |
|||
li element whose parent is an ol or ul element | y | y | listitem role | list item | read only | see msaa | ListItem | ATK_ROLE_LISTITEM + do not expose ATK_STATE_EDITABLE | AXGroup | do any of the apis have properties for ordered vs. unordered lists? Add info about level? | ||
menu element with a type attribute in the context menu state | n | y | menu role | menu | ? | ? | ? | ? | do any of the apis have a context menu that's different than a regular menu? | |||
menu element with a type attribute in the list state | n | y | menu role | ROLE_SYSTEM_MENUPOPUP | see msaa | Menu | ATK_ROLE_MENU. These objects SHOULD NOT be exposed for a submenu if there is a parent menu item spawning the submenu | AXMenu | ||||
menu element with a type attribute in the toolbar state | n | y | toolbar role | toolbar | see msaa | ToolBar | ATK_ROLE_TOOL_BAR | AXToolbar | ||||
meter | n | y | no role | ?? | ? | ? | ? | ? | do any of the apis have something like a meter? Can we build it with UIA patterns? | |||
nav element | n | y | navigation role | grouping?? | Expose as object attribute role="navigation" | n/a | n/a | AXGroup, AXRoleDescription="navigation" | ||||
option element that is in a list of options or that represents a suggestion in a datalist element | n | y | option role, with the aria-selected state set to "true" if the element's selectedness is true, or "false" otherwise. | ROLE_SYSTEM_LISTITEM | label element associated via for attribute | ListItem | ATK_ROLE_LIST_ITEM | NSAccessibilityStaticTextRole | ||||
ol element | y | y | list role | list | List | ATK_ROLE_LIST + do not expose ATK_STATE_EDITABLE | AXList | ordered vs. unordered in apis? | ||||
output element | n | y | status role | ROLE_SYSTEM_STATUSBAR | StatusBar | ATK_ROLE_STATUSBAR | AXGroup, AXRoleDescription="status" | this seems like a strange mapping. Is it really statusbar? It seems more like a lable… | ||||
progress element | n | y | 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 | ProgressBar | ATK_ROLE_PROGRESS_BAR + do not expose ATK_EXTENDED_STATE_EDITABLE | AXProgressIndicator | |||||
section element | n | y | region role | ROLE_SYSTEM_PANE | see msaa | Pane | ATK_ROLE_PANEL | AXGroup, AXRoleDescription="region" | ||||
select element with a multiple attribute | y | y | listbox role, with the aria-multiselectable property set to "true" | list | list | todo: map properties from multiselectable | ||||||
select element with no multiple attribute | y | y | listbox role, with the aria-multiselectable property set to "false" | combobox | <label> element associated with it or 'title' attribute | <option> element with 'selected' attribute set to "selected" | see msaa | anything better than list or combobox in apis? | ||||
<textarea> | y | y | textbox role, with the aria-multiline property set to "true", and the aria-readonly state set to "true" if the element has a readonly attribute | editable text | <label> element associated with it or 'title' attribute | text within <textarea> element | ATK_ROLE_ENTRY | text | ATK_ROLE_ENTRY | AXTextArea | aria UAI Guide has document instead fo text. Is that right? | |
table element | y | y | grid role | table | ROLE_SYSTEM_TABLE | Use IAccessibleTable2 interface | DataGrid | ATK_ROLE_TABLE | AXTable | Talk to Wendy about aligning with her table work. | ||
td element | y | y | gridcell role, with the aria-labelledby property set to the value of the headers attribute, if any | cell | cell | ? | ? | ? | ? | Talk to Wendy about aligning with her table work. | ||
th element that is neither a column header nor a row header | y | y | gridcell role, with the aria-labelledby property set to the value of the headers attribute, if any | cell? | ? | ? | ? | ? | Talk to Wendy about aligning with her table work. | |||
th element that is a column header | y | y | columnheader role, with the aria-labelledby property set to the value of the headers attribute, if any | ? | ? | ? | ? | ? | Talk to Wendy about aligning with her table work. | |||
th element that is a row header | y | y | rowheader role, with the aria-labelledby property set to the value of the headers attribute, if any | ? | ? | ? | ? | ? | Talk to Wendy about aligning with her table work. | |||
tr element | y | y | row role | ? | ? | ? | ? | ? | Talk to Wendy about aligning with her table work. | |||
ul element | y | y | list role | list | List | ATK_ROLE_LIST + do not expose ATK_STATE_EDITABLE | AXList | ordered vs. unordered in apis? | ||||
An element that defines a command, whose Type facet is "checkbox", and that is a descendant of a menu element whose type attribute in the list state | n | menuitemcheckbox role, with the aria-checked state set to "true" if the command's Checked State facet is true, and "false" otherwise | menuitem | MenuItem | ATK_ROLE_MENU_ITEM object attribute checkable"="true" |
AXMenuItemRole | ||||||
An element that defines a command, whose Type facet is "command", and that is a descendant of a menu element whose type attribute in the list state | menuitem role | menuitem | MenuItem | ATK_ROLE_MENU_ITEM | AXMenuItemRole | |||||||
An element that defines a command, whose Type facet is "radio", and that is a descendant of a menu element whose type attribute in the list state | menuitemradio role, with the aria-checked state set to "true" if the command's Checked State facet is true, and "false" otherwise | menuitem | MenuItem | ATK_ROLE_CHECK_MENU_ITEM + object attribute checkable="true" | AXMenuItemRole | look at UIA patterns and composites of MSAA roles for these. Does AX have them native? ATK/IA2? |
In addition to the comments column, here are some general to do items. It would be great if we could discuss this at next week’s sub-team meeting.
Explore additional attribute mappings
Describe individual elements that "define a command" and how their mappings change based on context (when they do and don't define a command)
double check all 'none' mappings. Are they true? Is it really none, or text, or inherits?
change msaa to ROLE_SYSTEM_FOO
use composites for MSAA for menuitemcheckbox and menuitemradio?
either expand name, state, value etc for other APIs, or combine for MSAA
update based on Steve's more recent draft of HTML to ARIA mappings, and keep updated as that changes based on html wg feedback
Look at how to augment imperfect mappings with UIA patterns.
double check harmonization with ARIA UAI Guide