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     

STATE_ACTIVE                                    

STATE_ARMED                                     

STATE_BUSY                                       

STATE_CHECKED                                 

STATE_COLLAPSED                            

STATE_DEFUNCT                                 

STATE_EDITABLE