W3C

Accessible Rich Internet Applications (WAI-ARIA) Version 1.0

W3C Working Draft 6 August 2008

This version:
http://www.w3.org/TR/2008/WD-wai-aria-20080806/
Latest version:
http://www.w3.org/TR/wai-aria/
Previous version:
http://www.w3.org/TR/2008/WD-wai-aria-20080204/
Editors:
Michael Cooper, W3C
Rich Schwerdtfeger, IBM
Lisa Seeman, UB Access
Lisa Pappas, Society for Technical Communication

Abstract

Accessibility of Web content to people with disabilities requires semantic information about widgets, structures, and behaviors, in order to allow Assistive Technologies to make appropriate transformations. This specification provides an ontology of roles, states, and properties that set out an abstract model for accessible interfaces and can be used to improve the accessibility and interoperability of Web Content and Applications. This information can be mapped to accessibility frameworks that use this information to provide alternative access solutions. Similarly, this information can be used to change the rendering of content dynamically using different style sheet properties. The result is an interoperable method for associating behaviors with document-level markup. This document is part of the WAI-ARIA suite described in the ARIA Overview.

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 a Public Working Draft by the Protocols & Formats Working Group of the Web Accessibility Initiative. The main innovation in this draft is the proposed approach to implement WAI-ARIA in host languages (see Implementation in Host Languages and Quality Assurance). The host language implementation requirements balance architectural goals with the constraints of present-day user agents. It seeks to address forward compatibility with HTML 5 [HTML5], which is expected to be complete after WAI-ARIA.

Because of the above focus, this version of WAI-ARIA is published without corresponding updates to its companion documents: the WAI-ARIA Primer [ARIA-PRIMER], and WAI-ARIA Best Practices [ARIA-PRACTICES]. This version includes minor changes to the WAI-ARIA taxonomy since the previous version. Refer to the history of changes to WAI-ARIA for details.

Feedback on the model set out here is important to the success of the Web community in creating accessible Rich Internet Applications. The PFWG would like to know, particularly for this draft:

Additional questions:

When addressing these questions, please consider them in the context of the companion documents. Comments on this document may be sent to public-pfwg-comments@w3.org (Archive). Comments requiring discussion should be copied to wai-xtech@w3.org (Archive). Comments should be made by 3 September 2008.

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.

The disclosure obligations of the Participants of this group are described in the charter.

Table of Contents

  1. 1. Introduction
    1. 1.1. Scope
    2. 1.2. Use Cases
  2. 2. Using WAI-ARIA
    1. 2.1. WAI-ARIA Roles
    2. 2.2. WAI-ARIA States and Properties
    3. 2.3. Managing Focus
    4. 2.4. Features Managed by the User Agent
    5. 2.5. Building Accessible Applications with WAI-ARIA
    6. 2.6. Example: building a tree widget
  3. 3. Normative Requirements
  4. 4. The Roles Model
    1. 4.1. Relationships between concepts
      1. 4.1.1. Parent Roles
      2. 4.1.2. Child Roles
      3. 4.1.3. Related Concepts
      4. 4.1.4. Base Concept
    2. 4.2. Characteristics of Roles
      1. 4.2.1. Is Abstract
      2. 4.2.2. Required States and Properties
      3. 4.2.3. Supported States and Properties
      4. 4.2.4. Inherited States and Properties
      5. 4.2.5. Required Child Elements
      6. 4.2.6. Parent Element
      7. 4.2.7. Name From
      8. 4.2.8. Children Presentational
    3. 4.3. Global States and Properties
    4. 4.4. Roles
      1. 4.4.1. Base Types
      2. 4.4.2. User Input Widgets
      3. 4.4.3. User Interface Elements
      4. 4.4.4. Document Structure
      5. 4.4.5. Specialized Regions
      6. 4.4.6. Landmark Roles Inherited from the XHTML Role Attribute Module
      7. 4.4.7. Section Roles inherited from XHTML Role Attribute Module
  5. 5. Supported States and Properties
    1. 5.1. Characteristics of States and Properties
      1. 5.1.1. Related Concepts
      2. 5.1.2. Used in Roles
      3. 5.1.3. Inherits into Roles
      4. 5.1.4. Value
    2. 5.2. Definitions for States and Properties
      1. 5.2.1. Widget states and properties
      2. 5.2.2. Live Regions
      3. 5.2.3. Drag and Drop
      4. 5.2.4. Relationships
      5. 5.2.5. User interface properties
  6. 6. Implementation in Host Languages
    1. 6.1. Introduction
    2. 6.2. General requirements on implementing host languages
      1. 6.2.1. Role attribute
      2. 6.2.2. State and property attributes
      3. 6.2.3. Focus navigation
    3. 6.3. Implementation using the Modularization Recommendation
  7. 7. Quality Assurance
    1. 7.1. Document Conformance
      1. 7.1.1. Host language conformance
      2. 7.1.2. Information Pattern Conformance
    2. 7.2. Authoring practices
      1. 7.2.1. Authoring tools
      2. 7.2.2. Testing practices and tools
    3. 7.3. User Agent Conformance
      1. 7.3.1. Non-interference with the host language
      2. 7.3.2. Applicable ARIA role
      3. 7.3.3. All ARIA in DOM
      4. 7.3.4. Accessibility API mapping
    4. 7.4. Assistive Technologies
  8. 8. Appendices
    1. 8.1. Implementations
      1. 8.1.1. Roles Implementation
      2. 8.1.2. ARIA Attributes Module
      3. 8.1.3. Sample XHTML plus ARIA DTD
    2. 8.2. Glossary
    3. 8.3. References
    4. 8.4. Acknowledgments
      1. 8.4.1. Participants in the PFWG at the time of publication
      2. 8.4.2. Other previously active PFWG participants and other contributors to the Accessible Rich Internet Applications specification
      3. 8.4.3. Enabling funders

1. Introduction

This section is informative.

The domain of Web accessibility defines how to make Web content usable by people with disabilities. People with some types of disabilities use Assistive Technology (AT) to interact with content. AT can transform the presentation of content into a format more suitable to the user, and can allow the user to interact in different ways than the author designed. In order to accomplish this, AT must understand the semantics of the content. Semantics are knowledge of roles, states, and properties, as a person would understand them, that apply to elements within the content. For instance, if a paragraph is semantically identified as such, AT can interact with it as a unit separable from the rest of the content, knowing the exact boundaries of that paragraph. A slider or tree widget is a more complex example, in which various parts of a widget each have semantics that must be properly identified for the computer to support effective interaction.

Established content technologies define semantics for elements commonly used in those technologies. However, new technologies can overlook some of the semantics required for accessibility. Furthermore, new authoring practices evolve which override the intended semantics—elements that have one defined semantic meaning in the technology are used with a different semantic meaning intended to be understood by the user.

For example, Rich Internet Applications developers can create a tree widget in HTML using CSS and JavaScript even though HTML lacks a semantic element for that. A different element must be used, possibly a list element with display instructions to make it look and behave like a tree widget. Assistive technology, however, must present the element in a different modality and the display instructions may not be applicable. The AT will present it as a list, which has very different display and interaction from a tree widget, and the user may be unsuccessful at understanding and operating the widget.

The incorporation of WAI-ARIA is a way for an author to provide proper type semantics on custom widgets (elements with repurposed semantics) to make these widgets accessible, usable and interoperable with assistive technologies. This specification identifies the types of widgets and structures that are recognized by accessibility products, by providing an ontology of corresponding roles that can be attached to content. This allows elements with a given role to be understood as a particular widget or structural type regardless of any semantic inherited from the implementing technology. Roles are a common property of platform Accessibility APIs which applications use to support assistive technologies. Assistive technology can then use the role information to provide effective presentation and interaction with these elements.

This role taxonomy currently includes interaction widget (user interface widget) and structural document (content organization) types of objects. The role taxonomy describes inheritance (widgets that are types of other widgets) and details what states and properties each role supports. When possible, information is provided about mapping of roles to accessibility APIs.

Roles are element types and should not change with time or user actions. Changing the role on an element from its inital value will be treated, via accessibility API events, as the removal of the old element and insertion of a new element with the new role.

Changeable states and properties of elements are also defined in this specification. States and Properties are used to declare important properties of an element that affect and describe interaction. These properties enable the user agent or operating system to properly handle the element even when these properties are altered dynamically by scripts. For example, alternative input and output technology such as screen readers, speech dictation software and on-screen keyboards must recognize the state of an element (such as: if an object is disabled, checked, focused, collapsed, hidden, etc.).

While it is possible for assistive technologies to access these properties through the Document Object Model [DOM], the preferred mechanism is for the user agent to map the States and Properties to the accessibility API of the operating system.

Figure 1.0 illustrates a typical Document Object Model (DOM) [DOM] node. Placed within the DOM node and the assistive technology is a box containing the contract provided by the user agent to the assistive technology. This data includes typical accessibility information found in the accessibility API for many of our accessible platforms for GUIs (role, state, caret, selection, event notification, parent/child information, relationship, and descriptions).

The contract model with accessibility APIs

Figure 1: The contract model with accessibility APIs

For more information see the WAI-ARIA Primer [ARIA-PRIMER] for the use of roles in making interactive content accessible.

In addition to the prose documentation, the role taxonomy is provided in Web Ontology Language (OWL) [OWL], which is an implementation of Resource Description Framework (RDF) [RDF]. Tools can use these to validate the implementation of roles in a given content document.

Note: the use of RDF/OWL as a formal representation of roles may be used to support future extensibility. Standard RDF/OWL mechanisms can be used to define new roles that inherit from the roles defined in this specification. The mechanism to define and use role extensions in an interoperable manner, however, is not defined by this specification. A future version of ARIA is expected to define how to extend roles.

1.1. Scope

The design aims of creating this specification include:

This draft currently handles two aspects of roles: GUI functionality and structural relationships of the element. For more information see the WAI-ARIA Primer [ARIA-PRIMER] for the use of roles in making interactive content accessible.

The role taxonomy is designed in part to support the common roles found in platform accessibility APIs. Reference to roles found in this taxonomy by dynamic Web content may be used to support interoperability with assistive technologies.

The schema to support this standard has been designed to be extensible so that custom roles can be created by extending base roles. This allows user agents to support at least the base role, and user agents that support the custom role can provide enhanced access. Note that much of this could be formalized in XML Schema [XSD]. However, being able to define similarities between roles, such as baseConcepts and more descriptive definitions, would not be available in XSD. While this extensibility is possible, this version of the specification does not define how this extension is to be achieved.

WAI-ARIA is supported by a set of informative resources. In addition to the WAI-ARIA Roadmap, the WAI-ARIA Primer [ARIA-PRIMER] provides a basic introduction to the concepts behind and reason for ARIA, and the WAI-ARIA Best Practices [ARIA-PRACTICES] describe recommended usage patterns for Web content developers. These documents are intended to help authors learn the practice of putting WAI-ARIA to use.

1.2. Use Cases

Keyboard accessible content helps users of alternate input devices. The new semantics when combined by our style guide work will allow alternate input solutions to facilitate command and control via an alternate input solution.

Low vision solutions benefit from ARIA markup in that the improved keyboard navigation helps people with extremely low vision. Low vision solutions offer a degree of screen reading functionality (like AI Squared's Zoom text). Furthermore, ARIA introduces navigation landmarks both through our taxonomy and the XHTML role landmarks which dramatically improves keyboard navigation productivity. This is a huge benefit for alternate input solutions as well.

ARIA will also be used to assist people with cognitive impairments. The additional semantics will allow authors to restructure and substitute alternative content in adaptive Web 2.0 solutions.

Assistive technology needs the ability to support alternative input forms by getting and setting the current value of widgets. AT also needs to determine what objects are selected, and manage widgets that allow multiple selections.

ARIA is used as a supplement for native language semantics, not a replacement. When the host language provides a feature that is equivalent to the ARIA feature, use the host language feature. ARIA should only be used in cases where the host language lacks the needed role, state, or property indicator. First use a host language feature that is as similar as possible to the ARIA feature, then refine the meaning by adding ARIA. For instance, a multiselectable grid could be implemented as a table, and then ARIA used to clarify that it is a grid, not just a table. This allows for the best possible fallback for user agents that do not support ARIA and preserves the integrity of the host language semantics.

2. Using WAI-ARIA

This section is informative.

Complex web applications become inaccessible when assistive technologies cannot determine the semantics behind portions of a document or when the user is unable to effectively navigate to all parts of it in a usable way (see the Roadmap for Accessible Rich Internet Applications [ARIA-ROADMAP]). ARIA divides the semantics into roles (the type defining a user interface element) and states and properties supported by the roles.

Authors must associate elements in the document to an ARIA role and the appropriate attributes (states and properties) during its lifecycle.

2.1. WAI-ARIA Roles

An ARIA role is set on an element using the a role attribute similar to the one defined in the XHTML Role Attribute Module [XHTML-ROLES].

<div role = "checkbox">

The roles defined in this specification include a collection of document landmarks and the ARIA role taxonomy.

The Roles in this taxonomy were modeled using RDF/OWL [OWL] to build rich descriptions of the expected behaviors of each role. Features of the role taxononmy provide the following information for each role:

Attaching a role from the role taxonomy to an element in the document gives assistive technology the information it needs to handle an element correctly.

2.2. WAI-ARIA States and Properties

ARIA provides a collection of accessibility states and properties which are used to support platform accessibility APIs on the various operating system platforms. Assistive technology may access this information through an exposed user agent DOM or through a mapping to the platform accessibility API. When combined with roles, the user agent can supply the assistive technology with information to render the information to the user at any instance in time. Changes in states or properties will result in a notification to an assistive technology to let them know that a change in behavior has occurred.

In the following example, a span has been used to create a checkbox which in this case has three possible states. A role is used to make the behavior of this simple widget known to the user agent. Properties that may change with user actions (such as checked) are defined in the States and Properties.

<span role="checkbox" aria-checked="mixed"
    onkeydown="return checkBoxEvent(event);" 
    onclick="return checkBoxEvent(event);" >
  A checkbox label
</span>

It should be noted that some accessibility state information is managed and controlled by the user agent. These are called managed states. Often these states have corresponding CSS pseudo-classes to reflect necessary style changes. An example of a managed state is focus. In contrast, the states in this specification are typically controlled by the author and are called unmanaged states. Some states are managed by the UA but the author can override them, such as posinset and setsize. The author should override those only if the DOM is not complete and thus the UA calculation would be incorrect. Both managed and unmanaged states are mapped to the platform accessibility APIs by the user agent.

Finally, an added value for ARIA is that user agents that support CSS attribute selectors ([CSS], Section 5.8) can allow the author to create UI changes based on the ARIA state information, dramatically reducing the amount of script used to create the equivalent functionality. In the following example, CSS selectors based on the value of the ARIA checked state are used to determine whether an image of a checked or an unchecked box is shown:

*[aria-checked=true]:before  {content:  url('checked.gif')}

*[aria-checked=false]:before {content:  url('unchecked.gif')}

2.3. Managing Focus

In any application there must always be an element with focus, as applications require users to have a place to provide user input. The element with focus must never be destroyed, hidden or scrolled off-screen. All interactive elements should be focusable. There should be an obvious, discoverable way, either through tabbing or other standard navigation techniques, for keyboard users to move the focus to any interactive element they wish to interact with. See User Agent Accessibility Guidelines, Guideline 9 ([UAAG], Guideline 9).

When using standard (X)HTML and basic WAI-ARIA widgets, application developers can simply manipulate the tab order or use script to create keyboard shortcuts to elements in the document. Use of more complex widgets requires the author to manage focus within them.

WAI-ARIA includes a number of "managing container" widgets, also often referred to as "composite" widgets. Typically, the container is responsible for tracking the last descendant which was active (the default is usually the first item in the container). When the container is navigated to with the Tab key, focus goes directly to the last active descendant. The user may also activate the container by clicking on one of the descendants within it.

When something in the container has focus, the user may navigate through the container by pressing additional keys such as the arrow keys to move relative to the current item. Any additional press of the main navigation key (generally the Tab key) will move out of the container to the next widget.

For example, a grid may be used as a spreadsheet with thousands of gridcells, all of which may not be present in the document at one time. This requires their focus to be managed by the container using the activedescendant property, on the managing container element, or by the container managing the tabindex of its child elements and setting focus on the appropriate child. For more information, see Providing Keyboard Focus in WAI-ARIA Best Practices ([ARIA-PRACTICES], section 3.2).

Containers that manage focus in this way are:

2.4. Features Managed by the User Agent

Editorial Note: Content is expected to come from the ARIA User Agent Implementors Guide. There are things like focused, focusable, selected, selectable, checkable, etc. Certain roles also have to be treated specially.

2.5. Building Accessible Applications with WAI-ARIA

This section provides a brief introduction to the process of making applications accessible using ARIA. The choice and usage of roles can be complex and context dependent. It is beyond the scope of this document to explain implementations for all the possible ARIA use cases. ARIA Best Practices [ARIA-PRACTICES] provides detailed guidance on ARIA implementation methodology as well as references to sample code.

First steps to making an application accessible:

  1. Each element or widget has full and correct semantics that fully describes its behavior (using element names or roles);
  2. The relationships between elements and groups are known;
  3. States, properties, and container relationships are valid for each element's behavior and are accessible via the Document Object Model [DOM] and the platform accessibility API;
  4. There is an element with input focus.

ARIA provides authors with the means to make the different elements in a Web application semantically rich. User agents use the role semantics to understand how to handle each element. Roles convey missing information that the assistive technology needs to anticipate the behavior of the elements inside the application such as how to present the corresponding ARIA states and properties to the user. The user agent will use the accessibility semantics from the host language and ARIA accessibility semantics which may override those of the host language and present them to an assistive technology through the Document Object Model or the platform accessibility API. When supporting the platform accessibility API the user agent will create accessible objects containing the accessibility semantics for each visual element on your page. It will use the chosen API to notify the assistive technology of changes to the semantics as well.

The following steps are recommended as ARIA is applied to content:

  1. Use native markup when possible

    Use the semantic elements that are defined in the host markup language. For example, with XHTML it is better to use the native checkbox than to use a div element with role checkbox as these should already be accessible through your browser. There may also be cases where ARIA can augment an existing element in the host language. For example, a grid and gridcells can reuse the functionality of a table when overlaying it. ARIA roles, states, and properties are best used when the markup language does not support all the semantics required. When a role attribute is added to an element, the semantics and behavior of the element are overridden by the role behavior.

  2. Apply the appropriate roles from ARIA

    Set roles to make sure elements behave predictably and correctly describe the behavior of each element within the application (unless elements behaviors are fully described by the native markup language). Roles for interactive elements should support all the states that the element could use. Once a role attribute is set it should not be changed as this could confuse an assistive technology. This does not preclude an element being removed which has the role attribute set. Only states and properties may be changed for a given element.

  3. Preserve semantic structure

    Structural information is critical to providing context to people with disabilities. This is achieved through preserving DOM hierarchy within structural elements and widgets; forming logical groups within within user interface widgets such as treeitems in a group. Look for groups within a page, and mark them using the most appropriate role that best describes their usage. For example: a region of the page that contains a group of elements that are likely to change through an Ajax application could be tagged as a region. The preservation of semantic web structure involves your entire web page such as through the use of document landmarks to facilitate keyboard navigation for screen reader and mobility impaired users as well as page restructuring and simplification for users with cognitive and learning impairments.

  4. Build relationships

    Look for relationships between elements, and mark them using the most appropriate property or attribute. For example: If container A contains search results, and container B contains the search widgets, then mark each container as a region and set the controls property in region B to reference region A. See relationships in WAI-ARIA.

    Some relationships are determined automatically from the host language, such as by using the label tag in HTML.

  5. Set and properties in response to events

    Once the role for an element has been set, select the appropriate states and properties for that role during the element's life cycle. This is often done in response to user input events. States are special properties for widgets that may change frequently during a widget's life cycle due to user interaction, while properties are more stable attributes of objects. User agents should notify assistive technology of state changes. Conversely, assistive technology notification of property changes depends on the method by which an assistive technology communicates with the user agent. For example, the multiline property is not something that changes frequently, whereas the checked state changes frequently in response to user input.

    When setting states and properties, set them until the behavior of the element is fully defined. Only use those supported for the chosen role or element as defined in this specification.

  6. Support full, usable keyboard navigation

    Usable keyboard navigation in a rich internet application is different from the tabbing paradigm in a static document. Rich internet applications behave more like desktop applications where the user tabs to significant widgets and uses the arrow keys to navigate within the widget, such as a spreadsheet or menu. The changes that ARIA introduces in keyboard navigation makes this enhanced accessibility possible. For a more in-depth understanding of keyboard navigation in ARIA, see the ARIA Best Practices [ARIA-PRACTICES]

  7. Synchronize the visual UI with accessibility states properties for supporting user agents

    This will allow the state of your UI to be perceivable to the user as well as the assistive technology. There are many ways to do this using script or by using CSS attribute selectors (in conforming user agents) For example, the author should have an associated selector that responds to a form element being required or a gridcell being selected. Refer to the ARIA Best Practices [ARIA-PRACTICES] for techniques for proper UI synchronization with the accessible state of the document.

2.6. Example: building a tree widget

picture of a tree view

A basic tree view allows the user to select different list items and expand and collapse embedded lists. Arrow keys are used to navigate through a tree, including left/right to collapse/expand sub trees. Double clicking with the mouse also toggles expansion.

Building this user interface element with script could leave assistive technology guessing about the role of each element. To make this feature accessible we need to:

We can do that by following the steps below:

  1. Look at the native mark up language

    There is no tree element in HTML that supports our behavior including expansion. If such an element existed, we should use that to take advantage of existing support. Since it does not, we will need to use roles.

  2. Finding the right roles

    As we did not find a tree element in the native mark up we need to add roles that do this by referencing roles from this taxonomy that support states that we need.

    Our tree will need roles that support embedded list behavior and expandable/collapsible embedded lists. The roles that support tree behavior for a tree are:

    • tree: A tree is the main container element for our tree. It is a form of a select where subtrees can be collapsed and expanded.
    • treeitem: A treeitem is an option item of a tree. This is an element within a tree which may be expanded or collapsed.
  3. Look for groups and build relationships

    Tree relationships can be made simply via the DOM and logical structure of the page. A tree element will be the main container encompassing all other elements in the tree. Each selectable item in the tree will be a treeitem.

    When a treeitem contains an embedded list of treeitems they will be all embedded in a group. A group should be contained inside the tree item that is the parent item.

    Tree relationships are like list relationships in HTML. Group and tree elements act like list containers (ol and ul). A tree item acts like a list item (li) in HTML.

    Because treeitems and groups commonly both use div elements it is recommended to add a comment next to closing treeitems that contain embedded tree groups.

    <div role="tree">
     <div role="treeitem">Veggies</div>
     <div role="group">   <!-- veggies children ->
       <div role="treeitem">Green</div>
       <div role="group">  <!-- green children -->
         <div role="treeitem">Asparagus</div>
         <div role="treeitem">Kale</div>
         <div role="treeitem">Leafy</div>
         <div role="group">   <!-- leafy children -->
           <div role="treeitem">Lettuce</div>
           <div role="treeitem">Kale</div>
           <div role="treeitem">Spinach</div>
           <div role="treeitem">Chard</div>
         </div>   <!-- close leafy -->
         <div role="treeitem">Green beans</div> 
        </div>  <!-- close green -->
       <div role="treeitem">Legumes</div>
       <div role="treeitem">Yellow</div>
       <div role="group">   <!-- yellow children -->
         <div role="treeitem">Bell peppers</div>
         <div role="treeitem">Squash</div>
       </div>  <!-- close yellow --> 
      </div>  <!-- close veggies -->
    </div>  <-- close tree --> 
    
     

    Sometimes a tree structure is not explicit via the DOM and logical structure of a page. In such cases the relationships must still be made explicit using the states and properties. In the following example, the owns property indicates that the item with id "yellowtreegroup" should be considered a child of the div element with the property, even though it is not a child in the DOM.

    <div role="treeitem" aria-owns="yellowtreegroup">Yellow<div>
    …
    <div id="yellowtreegroup" role="group">
    <div role="treeitem">Bell peppers</div>
    <div role="treeitem">Squash</div>
    …
    </div>

    If the tree is not completely represented in the DOM at all times, don't use either the structured or owns methods. Instead use level, posinset and setsize.

  4. Use States, Properties in response to events

    Control the behavior of the element in response to user input events such as from the keyboard and the mouse as shown here:

    <div tabindex="-1" role="treeitem" aria-expanded="true"
        onclick="return toggleExpansion(event)"
        onkeydown="return processArrowKeystoToggleExpansion(event);"
    >Yellow</div>

    Use device independent events with supporting JavaScript to handle user interaction:

    <div role="tree" tabindex="-1"
        onfocus="return treeItemFocus(event);"
        onclick="return treeItemEvent(event);"
        ondblclick="return treeItemEvent(event);"
        onkeydown="return treeItemEvent(event);">

    Create JavaScript support to control the event driven behavior of the application.

3. Normative Requirements

This section is normative.

This specification indicates whether a section is normative or informative.

Normative sections provide requirements that must be followed for an implementation to conform to this specification. The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in Key words for use in RFCs to indicate requirement levels [RFC2119].

Informative sections provide information useful to understanding the specification. Such sections may contain examples of recommended practice, but it is not required to follow such recommendations in order to conform to this specification.

4. The Roles Model

This section is normative.

This section defines the WAI-ARIA role taxonomy and describes the characteristics and properties of all roles. A formal RDF representation of all the information presented here is available in Appendix 8.1: Implementation.

4.1. Relationships between concepts

The role taxonomy uses the following relationships to relate ARIA roles to each other and to concepts from other specifications, such as HTML and XForms.

4.1.1. Parent Roles

RDF Property
rdfs:subClassOf

The role that this role extends in the taxonomy. This extension causes all the properties and constraints of the parent role to propagate to the child role. Other than well known stable specifications, inheritance may be restricted to items defined inside this specification so that items cannot be changed and affect inherited classes.

For example: checkbox is a subclass or type of a option. If we change the properties and expected behavior of an option then the properties and behavior of checkbox will also change.

Inheritance is expressed in RDF using the RDF Schema subClassOf ([RDFS], section 3.4) property.

4.1.2. Child Roles

RDF Property
<none>

Informative list of roles for which this role is the parent. This is provided to facilitate reading of the specification but adds no new information as the list of child roles is the list of roles for which the current role is the parent.

4.1.3. Related Concepts

RDF Property
role:relatedConcept

Informative information about a similar or related idea from other specifications. Concepts that are related are not necessarily identical. Related concepts do not inherit properties from each other. Hence if the definition of a type changes, the properties, behavior and definition of a related concept is not affected.

For example: A grid is like a table. Therefore, a grid has a rdfs:seeAlso of table. However if the definition of table is modified, the ARIA definition of a grid will not be affected.

4.1.4. Base Concept

RDF Property
role:baseConcept

Informative information about objects that are considered prototypes for the role. Base concept is similar to type, but without inheritance of limitations and properties. Base concepts are designed as a substitute for inheritance for external concepts. A base concept is like a relatedConcept except that base concepts are almost identical to each other.

For example: the checkbox defined in this document has the same functionality and anticipated behavior as a checkbox defined in HTML.

Therefore, a checkbox has an HTML checkbox as a baseConcept. However, if the HTML checkbox is modified, the definition of a checkbox in this document will not be not affected, because there is no actual inheritance of type.

4.2. Characteristics of Roles

Roles are defined and described by their characteristics. Characteristics define the structural function of a role, such as what a role is, concepts behind it, what instances of the role can or must contain. In the case of widgets this also includes how it interacts with the user agent based on mapping to HTML forms and XForms. States and properties from WAI-ARIA that are supported by the role are also indicated.

The Roles Taxonomy defines the following characteristics. These characteristics are implemented in RDF as properties of the OWL classes that describe the roles.

4.2.1. Is Abstract

RDF Property
N/A
Values
Boolean

Abstract roles are the foundation upon which all other ARIA roles are built. They MUST NOT be used by authors because they are not implemented in the API binding. Abstract roles are provided to help with the following:

  1. Organize the role taxonomy and provide roles with a meaning in the context of known concepts.
  2. Streamline the addition of roles that include appropriate features.

4.2.2. Required States and Properties

RDF Property
role:supportedState
Values
Any valid RDF object reference, such as a URI or RDF ID reference.

States and properties required for the role. Content authors MUST provide values for required states and properties.

When an object inherits from multiple ancestors and one ancestor indicates that property is supported while another ancestor indicates that it is required, the property is required in the inheriting object.

4.2.3. Supported States and Properties

RDF Property
role:supportedState
Values
Any valid RDF object reference, such as a URI or RDF ID reference.

States and properties applicable to the role. User agents MUST support all supported states and properties for the role. Content authors MAY provide values for supported states and properties, but may not in all cases because default values are sufficient.

4.2.4. Inherited States and Properties

Informative list of properties that are inherited onto a role from ancestor roles. States and properties are inherited from ancestor roles in the role taxonomy, not from ancestor elements in the DOM tree. These properties are not explicitly defined on the role, as the inheritance of properties is automatic. This information is provided to facilitate reading of the specification. Inherited states and properties that are required are indicated as such in this field as well. The set of supported states and properties combined with inherited states and properties forms the full set of states and properties supported by the role.

4.2.5. Required Child Elements

RDF Property
role:mustContain
Values
Any valid RDF object reference, such as a URI or RDF ID reference.

A child element that must be contained in the DOM by this role. A child element is any descendent element specified with the required child role. For example, an element with role list must contain an element with role listitem.

When multiple required children are indicated, either of them are permitted.

4.2.6. Parent Element

RDF Property
role:scope
Values
Any valid RDF object reference, such as a URI or RDF ID reference.

Context where this role is allowed, in other words, roles for elements in which the present role MUST appear.

For example an element with role listitem MUST be contained inside an element with role list.

4.2.7. Name From

RDF Property
role:nameFrom
Values
One of the following values:
  • "author": name comes from values provided by the author in explicit markup features such as the labelledby property or the HTML "title" attribute.
  • "subtree": name comes from the text value of the element node. Although this may be allowed in addition to "author" in some roles, this is used in content only if "author" features are not provided.

Computational mechanism to determine the accessible name of the object to which the role applies. This may be computed from the descendants of the object or conditional text (e.g., the title attribute in HTML).

User agents MUST use the following approach to compute the accessible name:

Collect the name from the content subtrees pointed to by labelledby which contains the IDs for the label content. Use the IDs in the order they appear. For each ID, use a depth-first computation of the name, appending to the currently computed name.

If labelledby is unspecified:

  1. For container elements which allow name from descendants, use a depth-first computation of the name.
    1. If a text node, append the text contents;
    2. If a widget, append the current value for the widget;
    3. If an image or object with a text equivalent, append the text equivalent;
    4. If there is a forced line break (e.g. if the current object is styled with display:block), append a space character.
  2. If not such a container, or the descendant computation generated an empty name, use the contents of conditional text, if specified.

4.2.8. Children Presentational

RDF Property
role:childrenArePresentational
Values

Boolean (true | false)

The DOM children are presentational. User agents SHOULD NOT expose descendants of this element through the platform accessibility API. If user agents do not hide the children, some information may be read twice.

4.3. Global States and Properties

Some states and properties are applicable to all roles, and most are applicable to all elements regardless of role. In addition to explicitly expressed supported states and properties, the following global states and properties are supported by all roles as well. These include:

Global states and properties are applied to the role roletype, which is the base role, and therefore inherit into all roles. To facilitate reading, they are not explicitly identified as either supported or inherited states and properties in the specification. Instead, the inheritance is indicated by a link to this section.

4.4. Roles

To support the current user scenario, this specification defines roles that A, help define Widgets (For example, a tristate Checkbox) and B, help define page structure (for example, a section header).

Class diagram of the relationships described in the role data model

Class diagram of the relationships described in the role data model

View larger version of class diagram

Roles are categorized as follows:

  1. Taxonomy Roles
  2. User Input Controls
  3. User Interface Elements
  4. Document Structure
  5. Specialized Regions

Below is an alphabetical list of ARIA roles to be used by rich internet application authors (excluding abstract roles which are not used directly). A detailed definition of the taxonomy supporting these ARIA roles follows.

alert
A message with important information.
alertdialog
A separate window (may be simulated) with an alert, where initial focus goes to the window or a widget within it.
application
A software unit executing a set of tasks for its users.
article
Represents a section of a page consisting of a composition forming an independent part of a document, page, or site.
banner
A region that contains the prime heading or internal title of a page.
button
Allows for user-triggered actions.
checkbox
A widget that has three possible values: "true", "false", or "mixed".
columnheader
A table cell containing header information for a column.
combobox
Combobox is a presentation of a select, where users can type to select an item.
complementary
Any section of the document that supports but is separable from the main content, but is meaningful on its own even when separated from it.
contentinfo
Meta information which applies to the first immediate ancestor whose role is not presentation.
definition
A definition of a term or concept.
description
Descriptive content for a page element.
dialog
A dialog is a small application window that sits above the application and is designed to interrupt the current processing of an application in order to prompt the user to enter information or require a response.
directory
A list of references to members of a single group.
document
Content that contains related information.
grid
A grid contains cells of tabular data arranged in rows and columns (e.g., a table).
gridcell
A cell in a grid.
group
A section of user interface objects which would not be included in a page summary or table of contents by an assistive technology.
heading
A heading for a section of the page.
img
A container for a collection of elements that form an image.
link
Interactive reference to a resource.
list
Group of non-interactive list items.
listbox
A widget that allows the user to select one or more items from a list of choices.
listitem
A single item in a list.
log
A region where new information is added and old information may disappear.
main
Main content in a document.
marquee
A marquee is used to scroll text across the page.
math
Content that represents a mathematical expression.
menu
Offers a list of choices to the user.
menubar
A container of menu items (items with role menuitem).
menuitem
An option in a group of choices contained in a menu.
menuitemcheckbox
Defines a menuitem which is checkable.
menuitemradio
Indicates a menuitem which is part of a group of menuitemradio roles, only one of which can be checked at a time.
navigation
A collection of links suitable for use when navigating the document or related documents.
note
The content is parenthetic or ancillary to the main content of the resource.
option
A selectable item in a list represented by a select.
presentation
An element whose role is decorative, not meaningful, and does not need to be mapped to the accessibility API.
progressbar
Displays the execution status for tasks that take a long time to execute.
radio
An option in single-select list.
radiogroup
A group of radio buttons.
region
Region is a large perceivable section on the web page.
row
A row of grid cells.
rowheader
A table cell containing header information for a row.
search
The search tool of a web document.
separator
A line or bar that separates and distinguishes sections of content.
slider
A user input where the user selects a value from within a given range.
spinbutton
A form of range that expects a user to select from amongst discrete choices.
status
Container for processing advisory information to give feedback to the user.
tab
A header for a tabpanel.
tablist
A list of tabs, which are references to tabpanels.
tabpanel
A container for the resources associated with a tab.
textbox
Inputs that allow free-form text as their value.
timer
A numerical counter which indicates an amount of elapsed time from a start point, or the time remaining until an end point.
toolbar
A collection of commonly used functions represented in compact visual form.
tooltip
A popup that displays a description for an element when a user passes over or rests on that element. Supplement to the normal tooltip processing of the user agent.
tree
A form of a list having groups inside groups, where sub trees can be collapsed and expanded.
treegrid
A grid whose rows can be expanded and collapsed in the same manner as for a tree.
treeitem
An option item of a tree. This is an element within a tree that may be expanded or collapsed.

4.4.1. Base Types

The following roles are used as base types for applied roles. Base classes are used to build a picture of the role taxonomy class hierarchy within the taxonomy. Note that while all roles in this section are abstract, not all abstract roles are in this section. This section includes only the most high-level abstractions in the taxonomy.

Roles in this section include:

Role: roletype

Base role from which all other roles in this taxonomy inherit.

Properties of this role describe the structural and functional purpose of objects that are assigned this role (known in RDF terms as "instances"). A Role is a concept that can be used to understand and operate instances.

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles:  
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties:
Inherited States and Properties:  
Name From:  
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: widget

A component of a Graphical User Interface (GUI).

Widgets are discrete user interface elements with which the user can interact. Widget roles all map to standard features in accessibility APIs.

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles: roletype
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties:  
Inherited States and Properties:
Name From:  
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: structure

A document structural element.

Roles for document structure support the accessibility of dynamic Web content by helping assistive technology to determine active content vs. static document content. Structural roles by themselves do not all map to accessibility APIs, but are used to create widget roles or assist content adaptation.

The taxonomy of structural roles is likely to evolve as new use cases are added to the scope of this specification.

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles: roletype
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties: expanded
Inherited States and Properties:
Name From:  
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: composite

A widget that may contain navigable descendants or owned children.

The composite widget SHOULD exist as a single navigation stop within the larger navigation system of the web page. Once the composite widget has focus, it SHOULD provide a separate navigation mechanism for users to document elements that are descendants or owned children of the composite element.

Descendants of this role MUST NOT have the "nameFrom" value of "subtree" set. This role and its descendants must not have a childrenArePresentational value of "true".

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles: widget
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties: activedescendant
Inherited States and Properties:
Name From: author
Accessible Name Required:  
Inherits Name Required:  
Children Presentational: False
Inherits Presentational:  

Role: window

Browser or application window.

Elements with this role have a window-like behavior in a GUI context, regardless of whether they are implemented as a window in the OS. This is helpful when there is the visual appearance of a window that is merely a styled section of the document.

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles: roletype
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties: expanded
Inherited States and Properties:
Name From: author
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

4.4.2. User Input Widgets

These roles are common widgets used to collect and maintain user input.

Roles in this section include:

Role: input

Generic type for widgets for which users can input a value.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles: widget
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties:  
Inherited States and Properties:
Name From: author
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: select

A form widget that allows the user to make selections from a set of choices.

An element with role select MUST contain elements with role option.

Note: This is used for the ontology and authors must not use this role in content.

Characteristics:
CharacteristicValue
Is Abstract: True
Parent Roles:
Child Roles:
Base Concept:  
Required States and Properties:  
Supported States and Properties:  
Inherited States and Properties:
Name From: author
Accessible Name Required:  
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: listbox

A widget that allows the user to select one or more items from a list of choices.

Items within the list are static and may contain images. List boxes contain children whose role is option.

Instances of this role MUST manage focus of descendants, as described in Managing Focus.

Although listbox inherits the expanded state, if there is a use case to use that state, authors should consider using a combobox instead.

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles:
Child Roles:  
Base Concept:  
Parent Element:  
Required Child Elements: option
Required States and Properties:  
Supported States and Properties: multiselectable
Inherited States and Properties:
Name From: author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: combobox

Combobox is a presentation of a select, where users can type to select an item.

Combobox is the combined presentation of a single line textbox with a drop down select widget. The combobox may be editable. Typically editable combo boxes are used for autocomplete behavior, and the autocomplete property would be used on the child textbox.

NOTE: In XForms [XFORMS] the same select can have one of 3 appearances: combo-box, drop-down box, or group of radio-buttons. Many browsers (if not all of them) allow users to type in a drop-down select as well. This specification does not constrain the presentation of the combobox.

Instances of this role MUST manage focus of descendants, as described in Managing Focus.

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles: select
Child Roles:  
Base Concept:  
Parent Element:  
Required Child Elements: listbox
Required States and Properties: expanded
Supported States and Properties:  
Inherited States and Properties:
Name From: author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: option

A selectable item in a list represented by a select.

An option MUST appear inside an element with select role.

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles: input
Child Roles:
Base Concept: HTML option
Parent Element: select
Required Child Elements:  
Required States and Properties:  
Supported States and Properties:
Inherited States and Properties:
Name From:
  • subtree
  • author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: checkbox

A widget that has three possible values: "true", "false", or "mixed".

Many checkboxes do not use the "mixed" value, and thus are effectively boolean checkboxes. However, the checked state supports the "mixed" value to support cases such as installers where an option has been partially installed.

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles: input
Child Roles:
Base Concept:  
Parent Element:  
Required Child Elements:  
Required States and Properties: checked
Supported States and Properties:  
Inherited States and Properties:
Name From:
  • subtree
  • author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: radiogroup

A group of radio buttons.

A radiogroup is a type of select list that can only have single entries checked, not mutliple. User agents MUST enforce that only one radio button in a radiogroup can be checked at the same time. When another button is checked, previously checked buttons become unchecked (their checked state becomes "false").

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles: select
Child Roles:  
Base Concept:  
list
Parent Element:  
Required Child Elements: radio
Required States and Properties:  
Supported States and Properties:  
Inherited States and Properties:
Name From: author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: radio

An option in single-select list.

Elements with role radio MUST be be explicitly grouped in order to indicate which ones affect the same value. This should be done by enclosing them in an element with role radiogroup. If it is not possible to make the radio buttons DOM children of the radiogroup, use the owns property on the radiogroup element to indicate the relationship.

Characteristics:
CharacteristicValue
Is Abstract:  
Parent Roles: checkbox
Child Roles:
Base Concept:  
Parent Element:  
Required Child Elements:  
Required States and Properties:  
Supported States and Properties:  
Inherited States and Properties:
Name From:
  • subtree
  • author
Accessible Name Required: True
Inherits Name Required:  
Children Presentational:  
Inherits Presentational:  

Role: textbox

Inputs that allow free-form text as their value.

If the multiline property is true, the widget accepts line breaks within the input, as in a HTML textarea. Otherwise this is a simple text box.

Intended use is in languages that do not have a text input object (such as SVG), or cases in which an element with different semantics is repurposed as an input box. Another use is for a rich text edit textbox, or one that validates