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@us.ibm.com, Web: http://www.ibm.com/able

 

Change History

 

Initial draft: April, 2005

5/6/05 AT-SPI updates from Bill Haneman

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:

 

 

  • Lack of rich semantic information to identify different document object types (text, dynamic, embedded, enabled, etc) and document structure
  • Performance issues when navigating large documents and structures and when running out of process
  • Missing dynamic document changes
  • Different cross-platform APIs (MSAA on Windows versus AT-SPI on Linux/Gnome) and application APIs (COM and DOM interfaces in Windows) for accessing similar documents (word processing, Web pages and applications, spreadsheets, PDF, presentation, etc) and similar applications (Microsoft Office, OpenOffice, Adobe Reader, Mozilla, Internet Explorer, etc)
  • Extensibility and scriptability of the APIs

 

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: 

  • Create and propose a standard cross-platform, cross-document accessibility API extension for navigating all content and structure and for handling events and changes in complex documents.

  • Include new techniques for handling performance issues

  • Provide for extensibility and scriptability

���������������������������

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. Accessibility 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 ����