W3C

HTML to Platform Accessibility APIs Implementation Guide

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

W3C Working Draft 29 March 2012

This version:
http://www.w3.org/TR/2012/WD-html-aapi-20120329/
Latest published version:
http://www.w3.org/TR/html-aapi/
Latest editor's draft:
http://dev.w3.org/html5/html-api-map/
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

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 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, MSAA + UIA Express, UIA, IAccessible2, ATK, and AX
HTML element HTML4 HTML5 WAI-ARIA MSAA MSAA + UIA Express UIA IAccessible2 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 HyperLink ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. ROLE_LINK AXLink
(null)
link
a (no href attribrute) yes yes none ROLE_SYSTEM_ TEXT Use MSAA or UIA guidance Text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
abbr yes yes none ROLE_SYSTEM_ TEXT Use MSAA or UIA guidance Text ROLE_SYSTEM_ TEXT Object attribute role="abbr" AXGroup
(null)
group
address yes yes none ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group Object attribute role="address" Object attribute role="address" AXGroup
(null)
group
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 HyperLink ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. ROLE_LINK AXLink
(null)
link
area (no href attribute) yes yes none ROLE_SYSTEM_TEXT Use MSAA or UIA guidance Text ROLE_SYSTEM_TEXT ROLE_TEXT AXScrollArea
(null)
scroll area
article no yes article role ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY

??ROLE_SYSTEM_GROUPING?
Use MSAA or UIA guidance ??Group or Text?? ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY ROLE_DOCUMENT_FRAME + do not expose STATE_EDITABLE AXGroup
AXDocumentArticle
article
aside no yes complementary role ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group Object attribute role="complementary" Object attribute role="complementary" AXGroup
AXLandmarkComplementary
complementary
audio no yes none ? ? Group ? ?

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 Text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
base yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
bdo yes yes none ROLE_SYSTEM_ TEXT Use MSAA or UIA guidance text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
blockquote yes yes none ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group ? ? AXGroup
(null)
group
body yes yes document role ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY Use MSAA or UIA guidance Document ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY ROLE_DOCUMENT_FRAME + STATE_READONLY AXWebArea
(null)
HTML content
br yes yes none ROLE_SYSTEM_ WHITESPACE ? ? ROLE_SYSTEM_ WHITESPACE ? ?
button yes yes button role ROLE_SYSTEM_PUSHBUTTON. Use MSAA or UIA guidance Button

?? When it is in a <menu> it defines a command.  Is it still a button, or is it a menuitem??
ROLE_SYSTEM_PUSHBUTTON ROLE_PUSH_BUTTON AXButton
(null)
button
canvas no yes none SYSTEM_ROLE_GRAPHIC Use MSAA or UIA guidance Image

NOTE: subdom elements will be mapped separately
IA2_ROLE_CANVAS ROLE_GRAPHIC + STATE_ANIMATED. AXImage
(null)
image
caption yes yes none ROLE_SYSTEM_ TEXT
+ STATE_SYSTEM_READONLY
Use MSAA or UIA guidance text
The parent table has a UIA_LabeledByPropertyId pointing to the UIA element for the caption element.
IA2_ROLE_CAPTION ROLE_CAPTION AXGroup
(null)
group
cite yes yes none ROLE_SYSTEM_ TEXT

??GROUP??
text text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
code yes yes none ROLE_SYSTEM_ TEXT text text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
col yes yes none ?ROLE_SYSTEM_COLUMN ROLE_SYSTEM_COLUMN ? ROLE_SYSTEM_GROUPING? ? ?
colgroup yes yes none ?ROLE_SYSTEM_GROUPING ?TODO:  look in more detail at UIA table implemenation ?TODO:  look in more detail at UIA table implemenation ROLE_SYSTEM_GROUPING? ? ?
command (in the command state whose parent is a menu) no yes menuitem role ROLE_SYSTEM_MENUITEM Use UIA guidance MenuItem
ROLE_SYSTEM_MENUITEM ROLE_MENU_ITEM AXMenuItem
(null)
menu item
command (in the command state whose parent is NOT a menu)         Use UIA guidance Button      
command (in the checkbox state whose parent is a menu)         Use UIA guidance MenuItem with Toggle pattern      
command (in the checkbox state whose parent is NOT a menu)         Use UIA guidance Checkbox      
command (in the radio state whose parent is a menu)         Use UIA guidance MenuItem with Toggle pattern      
command (in the radio state parent is NOT a menu)         Use UIA guidance RadioButton      
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 list 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 MenuItem with Toggle pattern IA2_ROLE_CHECK_MENU_ITEM + object attribute checkable="true" 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 list state no yes menuitem role ROLE_SYSTEM_MENUITEM Use either MSAA or UIA guidance MenuItem ROLE_SYSTEM_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 list 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 MenuItem with Toggle pattern IA2_ROLE_RADIO_MENU_ITEM + object attribute checkable="true" ROLE_RADIO_MENU_ITEM + object attribute checkable="true" AXRadioButton
(null)
radio button
datalist no yes listbox role, with the aria-multiselectable property set to "false" ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP. Use UIA guidance Combobox ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP. ROLE_COMBO_BOX + STATE_EXPANDABLE AXComboBox
(null)
combo box
dd yes yes none ROLE_SYSTEM_ TEXT ? ? IA2_ROLE_PARAGRAPH ? 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   Group
??window??
ROLE_SYSTEM_GROUPING ROLE_PANEL ?
dfn yes yes none ROLE_SYSTEM_ TEXT   ? ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
dl yes yes none ROLE_SYSTEM_ TEXT   ? IA2_ROLE_PARAGRAPH ? AXList
AXDefinitionList
definition list
dt yes yes none ROLE_SYSTEM_ TEXT   ? IA2_ROLE_PARAGRAPH ? AXGroup
AXTerm
term
div yes yes none ROLE_SYSTEM_GROUPING   ? IA2_ROLE_SECTION ? AXGroup
(null)
group
em yes yes none ROLE_SYSTEM_ TEXT   ? ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
embed no yes none ROLE_SYSTEM_CLIENT   ?Pane? Window? ROLE_SYSTEM_CLIENT ROLE_EMBEDDED depends on format of data file
fieldset yes yes none ROLE_SYSTEM_GROUPING Use UIA or MSAA guidance Group ROLE_SYSTEM_GROUPING

ROLE_PANEL
Object attribute role="fieldset"

AXGroup
(null)
group
figcaption no yes none ROLE_SYSTEM_ TEXT se UIA or MSAA guidance Text

IA2_ROLE_CAPTION
Object attribute role="figcaption"

ROLE_CAPTION AXGroup
(null)
group
figure no yes none ROLE_SYSTEM_GROUPING se UIA or MSAA guidance Group

??discuss graphic/image vs. group??

ROLE_SYSTEM_GROUPING
Object attribute role="figure"

note: accessible name from child figcaption

? ?
footer no yes none ROLE_SYSTEM_GROUPING se UIA or MSAA guidance Expose as text string "footer" in UIAutomationType_String
??discuss exposing localized type for all unmapped elements, or is it better to expose as Group??

 

Object attribute role="footer"

Object attribute role="footer"

AXGroup
AXLandmarkContentInfo
content

note: "content" not a useful or accurate description. Recommend AXRoleDescription: "footer"

Refer to Webkit bug 78967

form yes yes form role ROLE_SYSTEM_GROUPING se UIA or MSAA guidance Group IA2_ROLE_FORM 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

??currently mapped as pane not document.  the document inside is mapped as document??
Document ROLE_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY ROLE_DOCUMENT_FRAME + STATE_READONLY AXWebArea
(null)
HTML content
frameset yes no   ? ? ? ? ? ?
head yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
header no yes none ROLE_SYSTEM_GROUPING ROLE_SYSTEM_GROUPING Group
(don't put header in localized type string because there
is a header role for table headers)
Object attribute role="header" Object attribute role="header"

AXGroup
AXLandmarkBanner
banner

Note: recommend AXRoleDescription: "header" to disambiguate from "banner"

Refer to Webkit bug 78992

hgroup no yes none ROLE_SYSTEM_GROUPING ROLE_SYSTEM_GROUPING   ROLE_SYSTEM_GROUPING   ?
h1 to h6 (with an hgroup ancestor) no yes none ROLE_SYSTEM_ TEXT ROLE_SYSTEM_ TEXT Text ROLE_SYSTEM_ TEXT ROLE_TEXT AXHeading
(null)
heading
h1 to h6 (with NO hgroup ancestor) yes yes heading role, with the aria-level property set to the element's outline depth ROLE_SYSTEM_TEXT or use xml-roles ROLE_SYSTEM_TEXT Text IA2_ROLE_HEADING Use the IAccessible2::attributes heading-level attribute to determine the heading level. ROLE_HEADING AXHeading
(null)
heading
hr yes yes separator role ROLE_SYSTEM_SEPARATOR ROLE_SYSTEM_SEPARATOR Separator ROLE_SYSTEM_SEPARATOR ROLE_SEPARATOR ?
HTML yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
i yes yes none ROLE_SYSTEM_ TEXT ROLE_SYSTEM_ TEXT Text ROLE_SYSTEM_ 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_SYSTEM_DOCUMENT + STATE_SYSTEM_READONLY ROLE_DOCUMENT_FRAME + STATE_READONLY AXWebArea
(null)
html content
img yes yes img role ROLE_SYSTEM_GRAPHIC ROLE_SYSTEM_GRAPHIC Image ROLE_SYSTEM_GRAPHIC ROLE_IMAGE AXImage
(null)
image
img (alt attribute is empty) yes yes presentation role ROLE_SYSTEM_GRAPHIC with AccName set to empty string ROLE_SYSTEM_GRAPHIC with AccName set to empty string Image with NameProperty set to the empty string

Do not expose this object

Do note expose this object AXGroup
(null)
group
input (type attribute in the Button state) yes yes button role ROLE_SYSTEM_PUSHBUTTON ROLE_SYSTEM_PUSHBUTTON Button ROLE_SYSTEM_PUSHBUTTON ROLE_PUSH_BUTTON AXButton
(null)
button
input (type attribute in the Button state and parent is a menu)           MenuItem      
input (type attribute in the Color state) no yes   when implmented as a textbox, ROLE_SYSTEM_TEXT

When implemented as a color picker, implement IUIAutomationSelectionPattern for the container and IUIAutomationSelectionItemPattern for each color choice
?? 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
IA2_ROLE_COLOR_CHOOSER 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 MSAA ROLE_SYSTEM_CHECKBUTTON Checkbox Object attribute checkable="true" ROLE_CHECK_BOX + STATE_CHECKED AXCheckBox
(null)
check box
input (type attribute in the Checkbox state and parent is a menu)           MenuItem with Toggle pattern      
input (type attribute in the Date state) no yes none ROLE_SYSTEM_DROPLIST UIA Calendar Calendar IA2_ROLE_DATE_EDITOR ROLE_CALENDAR (not supported by FF) AXTextField
(null)
text field
input (type attribute in the Date and Time state) no yes none ROLE_SYSTEM_DROPLIST UIA Calendar Calendar IA2_ROLE_DATE_EDITOR 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 Calendar IA2_ROLE_DATE_EDITOR 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 MSAA ROLE_SYSTEM_TEXT or
UIA Edit
Edit IA2_STATE_SINGLE_LINE ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the File Upload state) yes yes none ROLE_SYSTEM_PUSHBUTTON. ROLE_SYSTEM_PUSHBUTTON Button IA2_ROLE_FILE_CHOOSER  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

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_SYSTEM_PUSHBUTTON. 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 Calendar IA2_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_SYSTEM_SPINBUTTON 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 MSAA ROLE_SYSTEM_TEXT with STATE_SYSTEM_PROTECTED

or
UIA Edit with UIA_IsPasswordPropertyId
Edit with UIA_IsPasswordPropertyId IA2_STATE_SINGLE_LINE 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_SYSTEM_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_SYSTEM_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_SYSTEM_PUSHBUTTON 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 MSAA ROLE_SYSTEM_TEXT or
UIA Edit
Edit IA2_STATE_SINGLE_LINE 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_SYSTEM_PUSHBUTTON 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 MSAA ROLE_SYSTEM_TEXT or
UIA Edit
Edit IA2_STATE_SINGLE_LINE 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 MSAA ROLE_SYSTEM_TEXT or
UIA Edit
Edit IA2_STATE_SINGLE_LINE 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_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP 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_SYSTEM_SPINBUTTON ROLE_SPIN_BUTTON AXTextField
(null)
text field
input (type attribute in the URL state with no suggestions source element) no yes textbox role ROLE_SYSTEM_TEXT MSAA ROLE_SYSTEM_TEXT or
UIA Edit
Edit IA2_STATE_SINGLE_LINE ROLE_ENTRY + STATE_SINGLE_LINE AXTextField
(null)
text field
input (type attribute in the Week state) no yes none ROLE_SYSTEM_DROPLIST UIA Calendar Calendar IA2_ROLE_DATE_EDITOR ROLE_CALENDAR AXTextField
(null)
text field
ins yes yes none ROLE_SYSTEM_ TEXT ROLE_SYSTEM_ TEXT ?text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
keygen yes yes none ROLE_SYSTEM_ TEXT ROLE_SYSTEM_ TEXT ? ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
keygen no yes none ?   ? ? ? AXGroup
(null)
group
label yes yes none ROLE_SYSTEM_TEXT Use UIA guidance 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.
IA2_ROLE_LABEL ROLE_LABEL AXGroup
(null)
group
legend yes yes none ROLE_SYSTEM_TEXT ROLE_SYSTEM_TEXT

SHOULD use UIA_LabeledByPropertyId (see UIA column)
Text. 
The parent fieldset has a UIA_LabeledByPropertyId pointing to the UIA element for the legend element.
IA2_ROLE_LABEL ROLE_LABEL AXGroup
(null)
group
li (parent is an ol or ul) yes yes listitem role ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY   ListItem ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY 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_MENUITEM
+
STATE_SYSTEM_HASPOPUP
MenuItem ROLE_SYSTEM_LISTITEM + STATE_SYSTEM_READONLY 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 HyperLink ROLE_SYSTEM_LINK. Also, apply special rule to expose STATE_LINKED to link and all its descendants. ROLE_LINK ?
map yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
mark no yes none ROLE_SYSTEM_ TEXT ROLE_SYSTEM_ TEXT Text ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
menu (type attribute in the context menu state) no yes no role ROLE_SYSTEM_MENUPOPUP Use either MSAA or UIA guidance Menu see msaa 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 list state) no yes menu role ROLE_SYSTEM_MENUPOPUP Use either MSAA or UIA guidance Menu see msaa 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 ToolBar ROLE_SYSTEM_TOOLBAR ROLE_TOOL_BAR AXMenuBar
(null)
toolbar
meta yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
meter element no yes none ROLE_SYSTEM_ TEXT
?? not sure this is right.  maybe a number or value or something?
Use UIA guidance set Locliazed Control Type to "Meter"

Implement Range Value control pattern with IsReadOnly property set to true
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
nav no yes navigation role ROLE_SYSTEM_GROUPING ?? ??text Object attribute role="navigation"   AXGroup
AXLandmarkNavigation
navigation
noscript yes yes none no mapping

?? grouping?
no mapping no mapping no mapping no mapping no mapping
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 depends on format of data file. Refer to MSAA ROLE_EMBEDDED depends on format of data file.
ol yes yes list role ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY Use MSAA or UIA guidance List ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY ROLE_LIST + do not expose STATE_EDITABLE AXList
AXContentList
content list
optgroup yes yes group role ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group ROLE_SYSTEM_GROUPING 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 ListItem

(note that SelectionItem pattern is required for ListItems)
ROLE_SYSTEM_LISTITEM 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 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.

IA2_ROLE_SECTION

note: object attribute aria-live=polite IA2 controlled_by relation defined by label element @for attribute.

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 Text IA2_ROLE_PARAGRAPH ROLE_PARAGRAPH  AXGroup
(null)
group
param yes yes none

no mapping

no mapping no mapping no mapping

no mapping

no mapping
pre yes yes none ROLE_SYSTEM_ TEXT

??group?
Use MSAA or UIA guidance Text

??group??
ROLE_SYSTEM_ TEXT 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 ProgressBar ROLE_SYSTEM_PROGRESSBAR + STATE_SYSTEM_READONLY ROLE_PROGRESS_BAR + do not expose EXTENDED_STATE_EDITABLE AXProgressIndicator
(null)
progress indicator
q yes yes none ROLE_SYSTEM_ TEXT
??group??
Use MSAA or UIA guidance Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
rp no yes none ROLE_SYSTEM_ TEXT
??group??
Use MSAA or UIA guidance Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT ?
rt no yes none ROLE_SYSTEM_ TEXT Use MSAA or UIA guidance Text ROLE_SYSTEM_ TEXT ROLE_TEXT AXUnknown
(null)
unknown
ruby no yes none ROLE_SYSTEM_ TEXT
??group??
Use MSAA or UIA guidance Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
s ? yes none ROLE_SYSTEM_ TEXT

??group??
Use MSAA or UIA guidance Text

??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
samp yes yes none ROLE_SYSTEM_ TEXT
??group?
Use MSAA or UIA guidance Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
script yes yes none no mapping no mapping no mapping no mapping no mapping no mapping
section no yes region role ROLE_SYSTEM_PANE
??really?  that's what a frame is.  I think grouping is closer??
?? ??Text or Group??
IA2_ROLE_SECTION 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 list with
ISelectionProvider::CanSelectMultiple set to true
ROLE_SYSTEM_LIST +
STATE_SYSTEM_MULTISELECTABLE + STATE_SYSTEM_READONLY
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 Combobox ROLE_SYSTEM_COMBOBOX + STATE_SYSTEM_HASPOPUP. 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 Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
source no yes none

Do not expose this object

Do note 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

Do not expose this object
span yes yes none ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
strong yes yes none ROLE_SYSTEM_ TEXT
??group??
Use MSAA or UIA guidance Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
style yes yes none

Do not expose this object

Do note 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 Text
??group??
ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
summary no yes none ROLE_SYSTEM_PUSHBUTTON
??has popup??
Use MSAA or UIA guidance Button
with ExpandCollapse pattern
ROLE_SYSTEM_PUSHBUTTON

ROLE_PUSHBUTTON +
STATE_EXPANDABLE

AXDisclosureTriangle
(null)
disclosure triangle

sup yes yes none ROLE_SYSTEM_ TEXT
??group??
Use MSAA or UIA guidance ??text or group?? ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
table yes yes none ROLE_SYSTEM_TABLE Use MSAA or UIA guidance DataGrid with Table pattern Use IAccessibleTable2 interface ROLE_TABLE AXTable
(null)
table
tbody yes yes none ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group ROLE_SYSTEM_GROUPING   ?
td yes yes none ROLE_SYSTEM_CELL Use MSAA or UIA guidance DataItem ROLE_SYSTEM_CELL ROLE_TABLE_CELL AXCell
(null)
cell
textarea yes yes textbox role, with the aria-multiline property set to "true" ROLE_SYSTEM_TEXT Use MSAA or UIA guidance Text or Edit?

state:  IA2_STATE_MULTI_LINE

ROLE_ENTRY AXTextArea
(null)
text entry area
tfoot yes yes none ROLE_SYSTEM_GROUPING Use MSAA or UIA guidance Group ROLE_SYSTEM_GROUPING ROLE_PANEL ?
th (is neither a column header nor a row header) yes yes none ROLE_SYSTEM_CELL
Use MSAA or UIA guidance DataItem

ROLE_SYSTEM_CELL 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 ? Header ROLE_SYSTEM_GROUPING ROLE_PANEL ?
time no yes none ROLE_SYSTEM_ TEXT   ? ROLE_SYSTEM_ TEXT ROLE_TEXT AXGroup
(null)
group
title yes yes none

no mapping

no mapping no mapping no mapping

no mapping

no mapping
tr yes yes none ROLE_SYSTEM_ROW Use MSAA or UIA guidance DataItem

Also requires SelectionItem pattern
ROLE_SYSTEM_ROW ROLE_LIST_ITEM AXRow
AXTableRow
row
ul yes yes list role ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY Use MSAA or UIA guidance List ROLE_SYSTEM_LIST + STATE_SYSTEM_READONLY ROLE_LIST + do not expose STATE_EDITABLE AXList
AXContentList
content list
var yes yes none ROLE_SYSTEM_ TEXT Use MSAA or UIA guidance? Text
note: not group, because it would usually only have a wo
ROLE_SYSTEM_ TEXT 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 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, IAccessible2, AT-SPI, and AX
Attribute Element(s) HTML4 HTML5 WAI-ARIA MSAA UIA IAccessible2 AT-SPI AX Comments
accesskey HTML elements Yes Yes none accKeyboardShortcut AcceleratorKey accKeyboardShortcut ? AXAccessKey  
alt area; img; input Yes Yes none accName Name RELATION_LABEL_FOR AXDescription  
autocomplete form; input No Yes       Object attribute autocomplete

Expose the IA2_STATE_SUPPORTS_
AUTOCOMPLETION equivalent state

Object attribute autocomplete

Expose the STATE_SUPPORTS_AUTOCOMPLETION equivalent state

?  
autofocus button; input; keygen; select; textarea No Yes           ?  
autoplay audio; video No Yes           ?  
checked (if present) command; input Yes Yes aria-checked (state)="true" (state) Set the STATE_SYSTEM_CHECKED state Expose as ToggleState property in Toggle Control Pattern Expose object attribute checkable="true" Expose object attribute checkable="true" AXValue="1"  
checked (if absent) command; input Yes Yes aria-checked (state)="false" Clear the STATE_SYSTEM_CHECKED state Expose as ToggleState property in Toggle Control Pattern. Expose object attribute checkable="true" Expose object attribute checkable="true" AXValue="0"  
cite blockquote; del; ins; q Yes Yes           AXURL  
cols textarea Yes Yes           AXRangeForLine  
colspan td; th Yes Yes           AXColumnIndexRange
pos=column index; len=colspan value
 
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 state of the pop-up activities in the ExpandCollapseState property in the ExpandCollapse Control Pattern. Expose as STATE_SYSTEM_HASPOPUP. If on a push button, change the role to ROLE_SYSTEM_BUTTONMENU. Object attribute haspopup="true" Expose AXShowMenu and AXPress actions  
controls audio; video No Yes           Controls exposed as AXToolbar  
datetime del; ins No Yes           ?  
datetime time No Yes           ?  
dir HTML elements ? Yes           ?  
dirname input; textarea ? Yes           ?  
disabled button; command; fieldset; input; keygen; optgroup; option; select; textarea yes Yes           AXEnabled="false"  
draggable HTML elements no Yes           ?  
dropzone HTML elements no Yes           ?  
headers td; th yes Yes           Expose via AXColumnHeaderUIElements and AXRowHeaderUIElements  
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              
kind track no Yes              
label command; menu; optgroup; option; track ? Yes              
lang HTML elements yes Yes              
longdesc img, frame, iframe yes no no accdescription (Internet Explorer only) no mapping no mapping no mapping no mapping IE 8+ populates the accdescription with the value of the longdesc attribute. This is brittle as it is overwritten when aria-describedby is used.
low meter no Yes              
max input no Yes              
max meter; progress no Yes           AXMaxValue  
maxlength input; textarea yes Yes              
media a; area; link; source; style ? Yes              
min input   Yes           ?  
min meter no Yes           AXMinValue  
multiple input; select yes Yes              
open details no Yes aria-expanded="true | false" STATE_SYSTEM_
EXPANDED
STATE_SYSTEM_COLLAPSED
ExpandCollapsePattern STATE_SYSTEM_EXPANDED
STATE_SYSTEM_COLLAPSED
STATE_COLLAPSED
STATE_EXPANDED
boolean AXExpanded Set properties on the summary element.
optimum meter no Yes              
placeholder input; textarea no Yes           AXPlaceholderValue  
poster video no Yes              
radiogroup command no Yes              
readonly input; textarea yes Yes           AXEnabled="false"  
rel a; area; link   Yes              
required input; select; textarea no Yes aria-required no mapping Expose as IsrequiredForForm property. IA2_STATE_REQUIRED Expose STATE_REQUIRED AXRequired="true" ?
reversed ol ? Yes              
rows textarea yes Yes              
rowspan td; th yes Yes           AXRowIndexRange
pos=row index; len=rowspan value
 
spellcheck HTML elements no Yes              
scope th yes Yes              
size input; select yes Yes              
span col; colgroup yes Yes              
start ol   Yes              
summary table yes Yes              
title HTML elements yes Yes           AXHelp and AXTitle  
title abbr; dfn yes Yes              
title command no Yes              
title link yes Yes              
title link; style yes Yes              
type a; area; link   Yes              
type button Yes Yes              
type button; input Yes Yes              
type command No Yes              
type embed; object; script; source; style Yes Yes              
type menu No 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
 

5. 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.

5.1 Input type="text" or 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.

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

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

5.2 input type="button" , input type="submit", input type="reset" and input type="password"

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.

5.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.

5.4 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.

5.5 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.

Figure element accessible name calculation

  1. Use aria-labelledby
  2. Otherwise use aria-label
  3. Otherwise use figcaption subtree
  4. Otherwise use title attribute

Figure element accessible description calculation

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

to do

5.6 img element

to do

6. Interactive elements

6.1 summary and details elements

to do

Other Elements

The 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.

  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.

7. Accessible Description calculation

to do

8. Accessible feature implementation examples:

8.1 summary and details elements

8.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.

8.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.

9. 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

No normative references.

A.2 Informative references

No informative references.

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.