Accessibility and Document Object Model (DOM) API Comparisons

Author

Catherine Laws
IBM Accessibility Center, WW Strategic Platform Enablement
11400 Burnet Road, Bldg 903 Office 5B004
Austin, Texas 78758
Phone: (512) 838-4595, FAX: (512) 838-9367
E-mail: claws [at] us.ibm.com
Web: http://www.ibm.com/able

Change History

Initial draft: April 2005
Contents Last Updated: May 6, 2005 (AT-SPI updates from Bill Haneman
Markup Last Modified: January 27, 2008

Overview

 

Using today's accessibility APIs, developers of assistive technologies face difficult challenges trying to implement logical navigation of the content and structures of complex documents for users with vision, learning, physical, and cognitive impairments. Some of the challenges include:

 

To address these challenges, IBM will work with an open source standards working group in a standards organization such as FSG to do the following:

As input, a "gap analysis" chart will be developed to categorize and compare all the different accessibility APIs and other APIs used by assistive technologies on different platforms today to access document content and structure information (including AT-SPI and ATK, Microsoft's MSAA and UI Automation, various Document Object Models, IBM Home Page Reader Web Access Technology (WAT), and others). Use cases will also be developed as input. Then the group should start drafting an API recommendation for extending cross-platform APIs (such as DOMs) which should map to accessibility APIs (AT-SPI and potentially MSAA/UI Automation and others such as for the Mac) to provide a richer accessible document interface that addresses performance and semantic information issues when navigating today's complex documents. Acessibility APIs need to include the content, structure, attributes, and event handling of a DOM as well as additional services such as descriptive relationships and structure navigation.


Accessibility API and DOM Comparison Charts

Today, applications and assistive technologies use a combination of DOMs, accessibility APIs, native platform APIs, and hard-coded heuristics to provide an accessible user interface. To achieve portability and interoperability, applications need to be able to implement a cross-platform API like a DOM interface that can connect to platform-specific accessibility APIs.

Three types of APIs will be compared and classified: Document Objects Models (DOMs), accessibility APIs, and assistive technology services.

The DOMs will include the W3C XHTML DOM, OMG DOMs, Adobe's PDF DOM, and word processing, spreadsheet, and presentation DOMs from Open Office and Microsoft Office.

 

Accessibility APIs will include Microsoft�s Active Accessibility (MSAA) and User Interface (UI) Automation, the Gnome Accessibility Toolkit (ATK) and Assistive Technology Service Provider Interface (AT-SPI), and Mac Accessibility API.

 

Assistive technology services in addition to those provided by accessibility APIs will include example interfaces like the IBM Home Page Reader Web Access Technology (WAT) and desirable use cases for accessing complex documents.

 

The classifications for the comparisons will include: Navigations and Actions, Attributes, Selection and Focus, Editing, Spatial Mapping, Events, Relationships, and Preferences.�� ���


 

 

Navigation and Actions

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

NavigateByUnit

IAccessible::accNavigate

NAVDIR_UP,

NAVDIR_DOWN, NAVDIR_FIRSTCHILD, NAVDIR_LASTCHILD , NAVDIR_LEFT,

NAVDIR_ RIGHT, NAVDIR_NEXT, NAVDIR_PREVIOUS

Accessible::getChildAtIndex 
AccessibleTable::
getSummary
getCaption

Node or TreeWalker

parentNode

firstChild

lastChild

previousSibling

nextSibling

TreeWalker

previousNode

nextNode

CharacterData::substringData

NodeIterator::

nextNode

previousNode

RenderJump

Direction: Previous, Current, Next, First, Last

Unit: Word, Character, Item, Link, Form Control, Table, Heading, Block

JumpSelectOption

NavigateChild

IAccessible::get_accChild

Accessible::getChildAtIndex

Node::childNodes

 

NumberOfChildren

IAccessible::get_accChildCount

 

Node::hasChildNodes

 

NavigateParent

IAccessible::get_accParent

Accessible::getIndexInParent

 

 

NavigateAll

 

 

 

PlayBegin

fromPOR, FromNextItem, FromCursor

Activate

IAccessible::accDoDefaultAction

Action::doAction

 

ActivateLink

ActivateAccesskey

IWatNode::Activate

CollectAll

 

 

 

CollectAllAsync

(for printing, saving)

Search

 

 

 

RenderSearchAsync

First, Previous , Current, Next

Match Case

NavigateLists

 

 

Document::GetElementsByTagName

 

CollectLinksAsync

(Links List)

NavigateWithinContainer

 

Accessible::getChildAtIndex
AccessibleTable::
getAccessibleAt
getColumnAtIndex
getColumnDesc
getColumnExtent
getColumnHeader
getRowAtIndex
getRowDesc
getRowExtent
getRowHeader
getIndexAt

 

RenderATRJump (for table nav)

Direction: Right, Left, Up, Down, EdgeRight, EdgeLeft, EdgeUp, EdgeDown, SpanRight, SpanLeft, SpanUp, SpanDown, First, Last, Current

SubmitForm

 

 Action::doAction

HTMLFormElement::Submit

HTMLFormElement::Reset

RunImpliedSubmission

(for forms without submit button)

RunFormSubmission

ConfigureFormSubmission

NavigateDocument

 

 

 Action::doAction

 

Back

Forward

Refresh

NextFrame


 

Attributes

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Action

IAccessible::get_accDefaultAction (such as check, press)

Action::getDescription

Action::getName

 

IWatNode:IsActivatable

Attributes

IAccessible::get_accDescription

(such as alt, title)

 Accessible::
getDescription
getStateSet

Element::

getAttributes

setAttributes

removeAttributes

getAttributeNode

setAttributeNode

removeAttributeNode

Node::hasAttributes

 

GetActivateableNode (then use IHTMLElement (DOM interface) to get object attributes)

IWatNode:GetAttributes

IWatNodeSelector::

GetAttributeString

 

Help

IAccessible::get_accHelp

IAccessible::get_accHelpTopic

BSTR* pszHelpFile

 

 

 

Keys

IAccessible::get_accKeyboardShortcut

Action::getKeyBinding

Element::

getAttributes

CollectAccesskeysIterator

GetAccessKeysList

IWatNodeSelector::

GetAttributeString

IsTabindexPresented

Name

IAccessible::get_accName

Accessible::

getName

 

Node::nodeName

Attr::name

IWatNodeSelector::

GetAttributeString

Role

IAccessible::get_accRole

ROLE_SYSTEM_ALERT,

ROLE_SYSTEM_ANIMATION, ROLE_SYSTEM_APPLICATION,

ROLE_SYSTEM_BORDER, ROLE_SYSTEM_BUTTONDROPDOWN , ROLE_SYSTEM_BUTTONDROPDOWNGRID, ROLE_SYSTEM_BUTTONMENU ,

ROLE_SYSTEM_CARET,

ROLE_SYSTEM_CELL,

ROLE_SYSTEM_CHARACTER,

ROLE_SYSTEM_CHART,

ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CLIENT ,

ROLE_SYSTEM_CLOCK,

ROLE_SYSTEM_COLUMN , ROLE_SYSTEM_COLUMNHEADER , ROLE_SYSTEM_COMBOBOX ,

ROLE_SYSTEM_CURSOR,

ROLE_SYSTEM_DIAGRAM,

ROLE_SYSTEM_DIAL,

ROLE_SYSTEM_DIALOG,

ROLE_SYSTEM_DOCUMENT,

ROLE_SYSTEM_DROPLIST,

ROLE_SYSTEM_EQUATION ,

ROLE_SYSTEM_GRAPHIC ,

ROLE_SYSTEM_GRIP ,

ROLE_SYSTEM_GROUPING , ROLE_SYSTEM_HELPBALLOON , ROLE_SYSTEM_HOTKEYFIELD , ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_IPADDRESS,

ROLE_SYSTEM_LINK,

ROLE_SYSTEM_LIST,

ROLE_SYSTEM_LISTITEM,

ROLE_SYSTEM_MENUBAR,

ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_MENUPOPUP,

ROLE_SYSTEM_OUTLINE, ROLE_SYSTEM_OUTLINEBUTTON, ROLE_SYSTEM_OUTLINEITEM, ROLE_SYSTEM_PAGETAB,

ROLE_SYSTEM_PAGETABLIST, ROLE_SYSTEM_PANE , ROLE_SYSTEM_PROGRESSBAR, ROLE_SYSTEM_PROPERTYPAGE, ROLE_SYSTEM_PUSHBUTTON, ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_ROW, ROLE_SYSTEM_ROWHEADER, ROLE_SYSTEM_SCROLLBAR, ROLE_SYSTEM_SEPARATOR, ROLE_SYSTEM_SLIDER, ROLE_SYSTEM_SOUND, ROLE_SYSTEM_SPINBUTTON, ROLE_SYSTEM_SPLITBUTTON, ROLE_SYSTEM_STATICTEXT, ROLE_SYSTEM_STATUSBAR, ROLE_SYSTEM_TABLE, ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TITLEBAR, ROLE_SYSTEM_TOOLBAR, ROLE_SYSTEM_TOOLTIP, ROLE_SYSTEM_WHITESPACE, ROLE_SYSTEM_WINDOW

Accessible::
getRole

getRoleName

getLocalizedRoleName

ROLE_INVALID ������������������������������������

ROLE_ACCELERATOR_LABEL �����������

ROLE_ALERT ���������������������������������������

ROLE_ANIMATION �������������������������������

ROLE_ARROW ������������������������������������

ROLE_CALENDAR �������������������������������

ROLE_CANVAS �����������������������������������

ROLE_CHECK_BOX �����������������������������

ROLE_CHECK_MENU_ITEM ������������������

ROLE_COLOR_CHOOSER �������������������

ROLE_COLUMN_HEADER ��������������������

ROLE_COMBO_BOX ����������������������������

ROLE_DATE_EDITOR ���������������������������

ROLE_DESKTOP_ICON ������������������������

ROLE_DESKTOP_FRAME ��������������������

ROLE_DIAL ������������������������������������������

ROLE_DIALOG �������������������������������������

ROLE_DIRECTORY_PANE ��������������������ROLE_DRAWING_AREA ����������������������

ROLE_FILE_CHOOSER ������������������������

ROLE_FILLER ���������������������������������������

ROLE_FOCUS_TRAVERSABLE �����������

ROLE_FONT_CHOOSER ����������������������

ROLE_FRAME ��������������������������������������

ROLE_GLASS_PANE ���������������������������

ROLE_HTML_CONTAINER �������������������

ROLE_ICON ������������������������������������������

ROLE_IMAGE ���������������������������������������

ROLE_INTERNAL_FRAME ��������������������

ROLE_LABEL ���������������������������������������

ROLE_LAYERED_PANE �����������������������

ROLE_LIST �������������������������������������������

ROLE_LIST_ITEM ���������������������������������

ROLE_MENU ����������������������������������������

ROLE_MENU_BAR �������������������������������

ROLE_MENU_ITEM �������������������������������

ROLE_OPTION_PANE ��������������������������

ROLE_PAGE_TAB �������������������������������

ROLE_PAGE_TAB_LIST ����������������������

ROLE_PANEL ���������������������������������������

ROLE_PASSWORD_TEXT �������������������

ROLE_POPUP_MENU ���������������������������

ROLE_PROGRESS_BAR ����������������������

ROLE_PUSH_BUTTON �������������������������

ROLE_RADIO_BUTTON �����������������������

ROLE_RADIO_MENU_ITEM ������������������

ROLE_ROOT_PANE �����������������������������

ROLE_ROW_HEADER ��������������������������

ROLE_SCROLL_BAR ���������������������������

ROLE_SCROLL_PANE �������������������������

ROLE_SEPARATOR �����������������������������

ROLE_SLIDER ��������������������������������������

ROLE_SPIN_BUTTON ���������������������������

ROLE_SPLIT_PANE ������������������������������

ROLE_STATUS_BAR ���������������������������

ROLE_TABLE ���������������������������������������

ROLE_TABLE_CELL ����������������������������

ROLE_TABLE_COLUMN_HEADER �������

ROLE_TABLE_ROW_HEADER �������������

ROLE_TEAROFF_MENU_ITEM �������������

ROLE_TERMINAL ���������������������������������

ROLE_TEXT �����������������������������������������

ROLE_TOGGLE_BUTTON ��������������������

ROLE_TOOL_BAR �������������������������������

ROLE_TOOL_TIP ����������������������������������

ROLE_TREE �����������������������������������������

ROLE_TREE_TABLE ����������������������������

ROLE_UNKNOWN ��������������������������������

ROLE_VIEWPORT ��������������������������������

ROLE_WINDOW �����������������������������������

ROLE_EXTENDED���������������������������������

ROLE_HEADER ������������������������������������

ROLE_FOOTER ������������������������������������

ROLE_PARAGRAPH ����������������������������

ROLE_RULER ���������������������������������������

ROLE_APPLICATION ����������������������������

ROLE_AUTOCOMPLETE ����������������������

ROLE_EDITBAR �����������������������������������

ROLE_EMBEDDED ��������������������������������

ROLE_LAST_DEFINED�����������

Node::nodeName

(depends on nodeType)

Node::nodeType

Element

Attribute

Text

CDATASection

EntityReference

Entity

ProcessingInstruction

Comment

Document

DocumentType

DocumentFragment

Notation

 

IWatNodeSelector::

GetAttributeString

 

CoWatPacketAttributes:

get_ActivateableEvents

put_ActivateableEvents

get_LinkHref

put_LinkHref

get_EltClass

put_EltClass

EltClass_DEFAULT

EltClass_AREA,

EltClass_EmbededObject,

EltClass_BUTTON,

EltClass_CAPTION,

EltClass_DD,

EltClass_DL,

EltClass_DT,

EltClass_FORM,

EltClass_Heading,

EltClass_IMG,

EltClass_LI,

EltClass_INPUT_Button,

EltClass_INPUT_Checkbox,

EltClass_INPUT_File,

EltClass_INPUT_Image,

EltClass_INPUT_Password,

EltClass_INPUT_Radio,

EltClass_INPUT_Reset,

EltClass_INPUT_Submit,

EltClass_INPUT_Text,

EltClass_LABEL,

EltClass_MAP,

EltClass_OL,

EltClass_OPTION,

EltClass_SELECT,

EltClass_TABLE,

EltClass_TD,

EltClass_TH,

EltClass_TR,

EltClass_TEXTAREA,

EltClass_UL

get_SearchResult

put_SearchResult

get_Item

put_Item

get_Header (H1, H2, etc)

put_Header

get_MetaText

put_MetaText

get_ListItem

put_ListItem

get_Link

put_Link����������

put_VisitedLink

WatBrowser::isFrameSet

State

get_accState

STATE_SYSTEM_ANIMATED,

STATE_SYSTEM_BUSY,

STATE_SYSTEM_CHECKED, STATE_SYSTEM_COLLAPSED, STATE_SYSTEM_DEFAULT,

STATE_SYSTEM_EXPANDED, STATE_SYSTEM_EXTSELECTABLE, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_FOCUSED,

STATE_SYSTEM_HASPOPUP, STATE_SYSTEM_HOTTRACKED, STATE_SYSTEM_INVISIBLE,

STATE_SYSTEM_LINKED,

STATE_SYSTEM_MARQUEED,

STATE_SYSTEM_MIXED,

STATE_SYSTEM_MOVEABLE, STATE_SYSTEM_MULTISELECTABLE, STATE_SYSTEM_NORMAL ,STATE_SYSTEM_OFFSCREEN, STATE_SYSTEM_PRESSED, STATE_SYSTEM_PROTECTED, STATE_SYSTEM_READONLY, STATE_SYSTEM_SELECTABLE, STATE_SYSTEM_SELECTED, STATE_SYSTEM_SELFVOICING, STATE_SYSTEM_SIZEABLE, STATE_SYSTEM_TRAVERSED, STATE_SYSTEM_UNAVAILABLE

Accessible::getState

STATE_INVALID ����

STATE_ACTIVE������������������������������������

STATE_ARMED ������������������������������������

STATE_BUSY ��������������������������������������

STATE_CHECKED ��������������������������������

STATE_COLLAPSED ���������������������������

STATE_DEFUNCT���������������������������������

STATE_EDITABLE ��������������������������������

STATE_ENABLED ��������������������������������

STATE_EXPANDABLE �������������������������

STATE_EXPANDED ������������������������������

STATE_FOCUSABLE ���������������������������

STATE_FOCUSED ��������������������������������

STATE_HAS_TOOLTIP�������������������������

STATE_HORIZONTAL ��������������������������

STATE_ICONIFIED ��������������������������������

STATE_MODAL������������������������������������

STATE_MULTI_LINE �����������������������������

STATE_MULTISELECTABLE 

STATE_OPAQUE ����������������������������������

STATE_PRESSED���������������������������������

STATE_RESIZABLE �����������������������������

STATE_SELECTABLE ��������������������������

STATE_SELECTED �������������������������������

STATE_SENSITIVE �������������������������������

STATE_SHOWING��������������������������������

STATE_SINGLE_LINE ���������������������������

STATE_STALE �������������������������������������

STATE_TRANSIENT �����������������������������

STATE_VERTICAL �������������������������������

STATE_VISIBLE �����������������������������������

STATE_MANAGES_DESCENDANTS����

STATE_INDETERMINATE ,

STATE_LAST_DEFINED 

 

IWatNode::IsDisabled

IWatNode:IsReadOnly