HTML to Platform Accessibility APIs

This is an early draft of a table that maps HTML elements to accessibility APIs on a variety of desktop platforms.

Mappings of HTML elements to platform accessibility APIs: ARIA, MSAA, IAccessible2, UIA, ATK, and AX
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?

To Do:

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.