Open Accessibility (A11y) Working Group     The Linux Foundation

Accessibility and Document Object Model (DOM) API Comparisons

Credits

Author
Original Comparisons: Catherine Laws, IBM Accessibility Center
Contributors
AT-SPI information: Bill Haneman, Sun Microsystems, Inc.
Editors
Gregory J. Rosmaita (Vice-Chair, Open Accessibility at The Linux Foundation)
Janina Sajka (Chair, Open Accessibility at The Linux Foundation)

Change History

Initial draft: April 2005
Contents Last Updated: May 6, 2005 (AT-SPI updates from Bill Haneman)
Markup Validation and Accessification Begun: January 27, 2008
Markup Last Modified: October 20, 2008
Latest Version:
http://accessibility.linux-foundation.org/a11yspecs/atspi/adoc/a11y-dom-apis.html
This Version:
http://accessibility.linux-foundation.org/a11yspecs/atspi/adoc/a11y-dom-apis_20081020.html
Previous Versions:
http://accessibility.linux-foundation.org/a11yspecs/atspi/adoc/a11y-dom-apis_20080324.html
http://accessibility.linux-foundation.org/a11yspecs/atspi/adoc/a11y-dom-apis_20050506.html
ToDo:
Add equivalent information about IAccessible2 (collaborator: Pete Brunet)
Add equivalent information about the Mac OS X Accessibility Protocol (AX API) (need collaborator)
Add equivalent information about UI Automation (need collaborator)
Add equivalent information about WAI-ARIA (add after ARIA goes to LC, CR or TR?)
Add equivalent information about ODF DOMs
For a complete listing of APIs and DOMs to be added/considered, please consult Appendix B: Notes

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 Open Accessibility (formerly part of FSG, now part of The Linux Foundation) 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:

  1. Navigations and Actions,
  2. Attributes,
  3. Selection and Focus,
  4. Editing,
  5. Spatial Mapping,
  6. Events,
  7. Relationships, and
  8. Preferences

Table 1: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

N/A

NumberOfChildren

IAccessible::get_accChildCount

N/A

Node::hasChildNodes

N/A

NavigateParent

IAccessible::get_accParent

Accessible::getIndexInParent

N/A

N/A

NavigateAll

N/A

N/A

N/A

PlayBegin
fromPOR
FromNextItem
FromCursor

Activate

IAccessible::accDoDefaultAction

Action::doAction

  • ActivateLink
  • ActivateAccesskey
  • IWatNode::Activate

CollectAll

N/A

N/A

N/A

CollectAllAsync
(for printing, saving)

Search

N/A

N/A

N/A

RenderSearchAsync
First, Previous, Current, Next
Match Case

NavigateLists

N/A

N/A

Document::GetElementsByTagName

CollectLinksAsync
(links list)

NavigateWithinContainer

N/A

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

N/A

Action::doAction

HTMLFormElement::Submit
HTMLFormElement::Reset
RunImpliedSubmission
(for forms without submit button)
RunFormSubmission
ConfigureFormSubmission

NavigateDocument

N/A

Action::doAction

N/A

Back
Forward
Refresh
NextFrame

Table 2: 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_FLOATING,
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

N/A

IWatNode::IsDisabled
IWatNode::IsReadOnly
IWatNodeSelector::
GetAttributeString
IsVisible

Value

IAccessible::get_accValue

AccessibleValue::
getMinimumValue
getMaximumValue
getCurrentValue
setCurrentValue
Node::nodeValue
Attr::value
Attr::specified

N/A

ID Value Missing

N/A

Accessible::isEqual

N/A

N/A

Locale

N/A

Application::getLocale

N/A

IWatNodeSelector::Language

HyperLink

N/A

Hyperlink::
getNAnchors
getStartIndex
getEndIndex
getObject
getURI
isValid

N/A

N/A

HyperText

N/A

Hypertext::
getLink (returns Hyperlink)
getLinkIndex
getNLinks

N/A

N/A

Image

N/A

Image::
getImageExtents (Height, Width, x, y)
getImagePosition
getImageSize

N/A

N/A

Table

N/A

Table::
getAccessibleAt
getColumnAtIndex
getColumnExtentAt
getIndexAt
getRowAtIndex
getRowExtentAt
  • getNRows
  • getNColumns
  • getCaption
  • getSummary
  • getnSelectedRows
  • getnSelectedColumn

N/A

RenderWhereAmI
getTableSummary
RenderATRJump
(includes headers)

Component

N/A

Component::
getSize
getPosition
getMDIZOrder
getLayer
getExtents
getAccessibleAtPoint
contains

N/A

N/A

Frames

N/A

N/A

N/A

GetNumberOfDocuments
(frames)

Style

N/A

AccessibleText::
getAttributes

N/A

GetBodyStyleAttributes
(for Zoom)
IWatNodeSelector::
put_StyleAttributes
get_StyleAttributes

Table 3: Selection and Focus

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Selection

IAccessible::accSelect
SELFLAG_NONE, SELFLAG_TAKEFOCUS, SELFLAG_TAKESELECTION, SELFLAG_EXTENDSELECTION SELFLAG_ADDSELECTION, SELFLAG_REMOVESELECTION
Selection::
clearSelection
selectAll
selectChild
deselectSelectedChild
Text::
addSelection
removeSelection
setSelection
Range::
setStart
setEnd
setStartBefore
setStartAfter
Collapse
selectNode
selectNodeContents
CompareBoundaryPoints
deleteContents
insertNode
surroundContents
cloneRange
toString
detach
DocumentRange::
createRange
CollectMarkAsync
(a range)
AsyncSelectAll

FocusPOR

IAccessible::get_accFocus
Component::
grabFocus
registerFocusHandler
deregisterFocusHandler
AccessibleState::FOCUSED
AccessibleState::ACTIVE

N/A

  • SetPOR
  • GetPOR
  • ResetPOR
  • MovePorToRenderable
  • MovePorToUndoJump
  • MovePorToEventElement
  • MovePorToMouseEvent

Get Selection

IAccessible::get_accSelection

Selection::
getSelectedChild
isChildSelected
Text::
getNSelections
getSelection

N/A

MovePORToSelection
get_Selection
put_Selection
CollectSelectionAsync

Table Selection

N/A

Table::
addColumnSelection
addRowSelection
getSelectedColumns
getSelectedRows
isColumnSelected
isRowSelected
isSelected
removeColumnSelection
removeRowSelection
  • get_nSelectedRows
  • get_nSelectedColumns

N/A

N/A


Table 4: Editing Text

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Clipboard

N/A

EditableText::
copyText
cutText
deleteText
insertText
pasteText

N/A

(uses Windows APIs)

Attributes

N/A

EditableText::setAttributes
Text::
getAttributes
  • [also yields attribute run information]
getDefaultAttributes
getCharacterExtents

N/A

N/A

Contents

N/A

EditableText::setTextContents
Text::
getText
getTextAfterOffset
getTextAtOffset
getTextBeforeOffset
  • (with character, word, sentence, or line delimiting)
Text
Text::splitText

N/A

Selection

N/A

Selection::
clearSelection
selectAll
selectChild
getSelectedChild
deselectSelectedChild
isChildSelected
Text::
addSelection
removeSelection
getNSelections
getSelection
setSelection

N/A

N/A

Range

N/A

Text::
getBoundedRanges
getRangeExtents

N/A

N/A

Character Offset

N/A

Text::
getCharacterAtOffset
getOffsetAtPoint
setCaretOffset

N/A

N/A


Table 5: Spatial Mapping

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Location

IAccessible::accLocation
pxLeft and pyTop screen coordinates
pcxWidth and pcyHeight in pixels
Component::
contains
getExtents
getPosition
getSize
getLayer (z order)
getMDIZOrder
(z order)

N/A

N/A

Hit Test

IAccessible::accHitTest
xLeft and yTop

getAccessibleAtPoint

N/A

N/A


Table 6:Relationships

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Labels

N/A

Accessible::getRelationSet
Relation::getRelationType
RELATION_NULL
RELATION_LABEL_FOR
RELATION_LABELLED_BY
RELATION_CONTROLLER_FOR
RELATION_CONTROLLED_BY
RELATION_MEMBER_OF
RELATION_TOOLTIP_FOR
RELATION_NODE_CHILD_OF
RELATION_EXTENDED
RELATION_FLOWS_TO
RELATION_FLOWS_FROM
RELATION_SUBWINDOW_OF
RELATION_EMBEDS
RELATION_EMBEDDED_BY
RELATION_POPUP_FOR
RELATION_LAST_DEFINED
Relation::getRelationTypeName
Document::GetElementByID
HTMLDocument::
GetElementsByName
RenderWhereAmI
Position relative to page
Heading
Element type
Container type, position within
Label for control
Heading for table cell
RenderJump
(includes control labels )

Targets

N/A

Relation::
getNTargets
getTarget

N/A

N/A

Table Headers

N/A

Table::
getColumnDescription
getColumnHeader
getRowDescription
getRowHeader

Document::GetElementByID

RenderWhereAmI
getTableSummary
RenderATRJump
(includes headers)

Document Summary

N/A

N/A

N/A

MakeDocumentSummary
Title.
Number of:
  • Tables,
  • Links,
  • Headings,
  • Frames,
  • Forms,
  • Controls,
  • Items.
Current frame number.

Table 7: Events

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

Listeners

NotifyWinEvent

EventListener::notifyEvent
DeviceEventListener::notifyEvent
Application::
registerObjectEventListener
DeviceEventController::
notifyListenersAsync
notifyListenersSync
registerDeviceEventListener
deregisterDeviceEventListener
Registry::
getDeviceEventController
registerGlobalEventListener
deregisterGlobalEventListener
deregisterGlobalEventListenerAll
EventTarget::
addEventListener
removeEventListener
displatchEventListener
Event::
initEvent
preventDefault
stopPropagation
CollectEventHandlers
HPRBrowserListener

Document

NotifyWinEvent
EVENT_OBJECT events:
  • CREATE
  • DESTROY
  • SHOW
  • HIDE
  • REORDER
  • FOCUS
  • SELECTION
  • SELECTIONADD
  • SELECTIONREMOVE
  • SELECTIONWITHIN
  • STATECHANGE
  • LOCATIONCHANGE
  • NAMECHANGE
  • DESCRIPTIONCHANGE
  • VALUECHANGE
  • POINTCHANGE
  • HELPCHANGE
  • ACCELERATORCHANGE
  • DEFACTIONCHANGE
EVENT_SYSTEM events:
SCROLLINGSTART
SCROLLINGEND
CONTEXTHELPSTART
CONTEXTHELPEND
MOVESIZESTART
MOVESIZEEND
Registry::
registerGlobalEventListener
Object events:
object:children-changed
object:visible-data-changed
object:selection-changed
object:text-selection-changed
object:text-changed
object:text-caret-moved
object:row-inserted
object:row-reordered
object:row-deleted
object:column-inserted
object:column-reordered
object:column-deleted
object:model-changed
Property change events:
object:property-change object:property-change:accessible-name object:property-change:accessible-state
object:property-change:accessible-description object:property-change:accessible-parent
object:property-change:accessible-value object:property-change:accessible-role
object:property-change:accessible-table-caption object:property-change:accessible-table-column-description
object:property-change:accessible-table-column-header object:property-change:accessible-table-row-description
object:property-change:accessible-table-row-header object:property-change:accessible-table-summary
Event::
initEvent
preventDefault
stopPropagation
DocumentEvent::createEvent
Load, unload, abort, error, select, change, submit, reset, focus, blur, resize, scroll
UIEvent::initUIEvent
DOMFocusIn, DOMFocusOut, DOMActivate
HprBrowserListener
OnError
OnSelectChange
OnNewDocuments
OnNewPOR
OnPacketsReady
OnProgressUpdate
OnUnload
OnLocalNavigation
OnWindowClosing
OnMoveWindow
OnResizeWindows

Pause Resume

N/A

Application::pause
Application::resume

N/A

N/A

Keyboard

N/A

DeviceEventController::
registerKeystrokeListener,
deregisterKeystrokeListener
DeviceEventController::
generateKeyboardEvent

EventListener::handleEvent

MovePorToEventElement
CollectEventHandlers
putActivatableJSEvents
getActivatableJSEvents
FireJSEvents
Onkeydown, onkeyup, onkeypress, onclick
onfocus, onblur
SetOnKeyDown
(for keypress event handler)
HprBrowserListener
OnKeyDown
OnKeyUp

Mouse

N/A

DeviceEventController::
generateMouseEvent
  • ("button1", "button2", "mousemove").
EventListener::handleEvent
MouseEvent::initMouseEvent
click, mousedown, mouseup, mouseover, mouseout, mousemove
MovePorToEventElement
CollectEventHandlers
putActivatableJSEvents
getActivatableJSEvents
FireJSEvents
IsProgrammaticEvent
Onclick, onfocus, onblur, onmousedown, onmouseup, onmouseout, onmouseover
HprBrowserListener
OnMouseClick
OnMouseUp
OnMouseMove
MovePorToMouseEvent

Mutations

N/A

Registry::
registerGlobalEventListener
Object events:
  • object:children-changed
  • object:visible-data-changed
  • object:selection-changed
  • object:text-selection-changed
  • object:text-changed
  • object:row-inserted
  • object:row-reordered
  • object:row-deleted
  • object:column-inserted
  • object:column-reordered
  • object:column-deleted
  • object:model-changed
Property change events:
  • object:property-change object:property-change:accessible-name object:property-change:accessible-state
  • object:property-change:accessible-description object:property-change:accessible-parent
  • object:property-change:accessible-value object:property-change:accessible-role
  • object:property-change:accessible-table-caption object:property-change:accessible-table-column-description
  • object:property-change:accessible-table-column-header object:property-change:accessible-table-row-description
  • object:property-change:accessible-table-row-header object:property-change:accessible-table-summary
MutationEvent::initMutationEvent
DOMSubtreeModified
DOMNodeInserted
DOMNodeRemoved
DOMNodeRemovedFromDocument
DOMAttrModified
DOMCharacterDataModified

N/A

Application

N/A

Registry::deregisterApplication
Registry::registerApplication

N/A

N/A

Desktop

N/A

Registry::
getDesktop
getDesktopCount
getDesktopList

N/A

N/A


Table 8: Set Preferences

ID

MSAA

AT-SPI

W3C DOM

HPR WAT

String

N/A

N/A

N/A

  • strHeadingTextBefore
  • strHeadingTextAfter
  • strVisitedTextBefore
  • strVisitedTextAfter
  • strLinkTextBefore
  • strLinkTextAfter
  • strListTextBefore
  • strListTextAfter
  • strEventTextBefore
  • strEventTextAfter

Integer

N/A

N/A

N/A

  • intBlockNavThreshold
  • intInstallLanguage
  • intCurrentLanguage
  • intAutoMetaRefresh
  • intEventAnnouncement
  • intAnnounceRubyTextVal

Boolean

N/A

N/A

N/A

  • bCellInfoAfter
  • bReadRowHeader
  • bReadColumnHeaders
  • bBrowserSuppressJSErrors
  • bBlurActiveElements
  • bTrackActiveElements
  • bDisplayNoAlt
  • bDisplayEmptyAlt
  • bAnnounceTableSummary
  • bTxtViewAbbrevExpand
  • bAccesskeyAnnouncement
  • bHighlighting
  • SetTableNavMode

Appendix A: HPR WAT APIs

Some further descriptions for some of the HPR WAT APIs.

Navigation (HPR WAT)

/**
* Perform the indicated jump and render content at landing spot.
*
* Repositions the document cursor as specified, then renders
* any jump announcement (such as "table row 2") that is defined
* for the jump. Will also usually render the next renderable 
* content that follows the landing spot.
*
* Caller is responsible for freeing the memory in the
* returned packet sequence.
*/

DOMResult RenderJump(IDispatch**ppdispCollection, NavDirection direction, NavUnit unit);


/**
* Do a non-rendering jump across select boxes
*
* This is a jump that can be called on a select or option element.
* This jump will land on a selected option, or if no selected options 
* in the direction of the jump, will land on the select element as 
* a start tag or end tag as appropriate.
*/


void JumpSelectOption(NavDirection direction);


/**
* Provides the "Play" function. 
*
* Causes us to enter asynchronous mode. Collects PacketCollections
* and returns them via the FirePacketsReady event, and also schedules
* subsequent collections on future time slices.
* @param fromWhere Indicates whether to start the Play from
* the current POR or from the next item.
*/


HRESULT  PlayBegin(long cookie,WATPLAYPARAMfromWhere);

// activates access key: returns false if the char is not access key

bool ActivateAccesskey( UINT nChar );


/**
* Activate the DOM node
*
* For Anchor nodes with 'href' attributes, we will follow the
* hyperlink. For form controls, we operate the control.
* @param keys Enumeration representing important key combinations
* pressed with Enter
*/

virtual void Activate(KeyCombokeys=KEY_None) = 0;


/**
* Perform an asynchronous CollectAll operation.
*
* Collected packets are broadcast back to all registered listeners
* via the Collector.FireOnPacketsReady interface.
*/


STDMETHOD(CollectAllAsync)(long cookie);


/*
* 
* Search for text string, update document position when found.
* 
* Search both web page content and metatext which we generate.
* Render the result, with the serach string in its own packet with
* unique attribute set (HPR 2.5 speaks the search text in link voice).
*/


STDMETHOD(RenderSearchAsync)(long iCookie, BSTR text, enum WATNAVDIRECTION direction, VARIANT_BOOL bMatchCase, VARIANT_BOOL bFirstSearch);


/*
*
* Perform an asynchronous CollectLinks operation.
*
* Collected packets are broadcast back to all registered listeners
* via the Collector.FireOnPacketsReady interface.
*/


STDMETHOD(CollectLinksAsync)(long cookie);


/**
* Perform the indicated jump for AdvTableReading Mode.
*
* Repositions the POR as specified, then renders
* any jump announcement (such as "width 2") that is defined
* for the jump. Will also render the cell content.
*/

HRESULT RenderATRJump(WATNAVATRDIRECTION direction, IDispatch** ppSeq);

Attributes (HPR WAT)


/**
* Retrieves the string value of a certain attribute 
* (instance version of class method of same name).
* @param strName Name of the attribute to retrieve
* @param strValue String to return the value in
* @return true if the attribute was retrievable, false otherwise
*/

bool GetAttributeString( const CWatStr& strName, CWatStr& strValue) const;

static bool GetAttributeString(IHTMLElement* pElem, const CWatStr& strName, CWatStr& strValue);


/**
* Collect the Accesskeys in the DOM and transmit them, one by one, to the
* registered event listener.
*/


class CCollectAccesskeysIterator : public CIterator


// CCoWatPacket

/**
* A CoWatPacket represents text from the DOM and is the basic class which 
* is used to exchange textual content between objects.
*
* Packets contain the text which will ultimately be rendered in one or more
* views for the end user. The packet has "start" and "length" attributes
* associated with it. The intent here is that Character and Word mode
* navigation will be accomplished by selecting a subrange within the packet.
* Language identification is provided with the "lang" attribute.
* 
* All text retrieved from the DOM will have an association with a node 
* in the DOM and any character within that text has a specific offset. 
* Thus, any character within the text has a point of regard (POR) - which is
* defined as having a node in the DOM and an offset.
*
*/

class ATL_NO_VTABLE CCoWatPacket


Selection (HPR WAT)

/*
*
* Collect the content, asynchronously, between the POR saved by a SetMark
* operation, and the current POR.
*
* Collected packets are broadcast back to all registered listeners
* via the Collector.FireOnPacketsReady interface.
*/


STDMETHOD(CollectMarkAsync)(long cookie);


/*
*
* Moves backwards, one step, through the jump history.
*
* A history of node selectors (aka node handles) associated with
* jump departure points is maintained by the Collector. This 
* method moves the POR back one jump in the jump history. Only the
* node handle is saved, the offset is lost.
* 
* A separate history is maintained for each frame.
* This method backs up only within the current frame.
* That is, switches between frames are not maintained as part of the history.
* 
* The jump history facility doesn't keep track of jumps in table
* navigation mode, character, or word reading mode.
* 
*/


STDMETHOD(MovePorToUndoJump)();

/*
*
* Moves the POR to the position the event fired from
* @param pEvt Pointer to the Event object
*/


DOMResult MovePorToEventElement(IHTMLEventObj* pEvt, int iFrame);

/*
*
* Moves the POR to the mouse location the event fired from
*
* Updates the POR location and the offset to an x,y event position
*/

DOMResult MovePorToMouseEvent(IHTMLEventObj* pEvt, int iFrame);

/*
*
* Collect the content, asynchronously, between SelBegin and SelEnd
* Collected packets are broadcast back to all registered listeners
*/

DOMResult CollectSelectionAsync(int cookie);


Appendix B: Notes

AT-SPI Classes Not Included in This Comparison

  • LoginHelper,
  • StateSet, and
  • StreamableContent

DOM Interfaces Not Yet Included in This Comparison

  • DOMException,
  • Document createxxxx methods,
  • Node methods (insertBefore, replaceChild, removeChild, appendChild),
  • NamedNodeMap,
  • CharacterData,
  • Comment, CDATASection,
  • DocumentType,
  • Notation,
  • Entity,
  • EntityReference,
  • ProcessingInstruction,
  • namespace methods in DOM Level 2 [DOM2],
  • DOMImplementation,
  • DocumentView,
  • AbstractView.

Still To Do

  • MSAA Extensions for OpenOffice and DHTML
  • DOM Level 2 Style [DOM2 STYLE],
  • HTML
  • DOM Level 3 [DOM3]
  • DOMs for:
    1. Adobe PDF,
    2. OpenOffice Write/Calc/Impress,
    3. MS Office Word/Excel/PowerPoint,
    4. Firefox DOM,
    5. IE DOM
  • MS UI Automation
  • Mac Accessibility API
  • MS Active Accessibility Text Services


Normative References

[AT-SPI IDL]
AT-SPI IDL Documentation
Available from:
http://www.linuxbase.org/~gk4/a11y/idl/index.html
[MSAA]
Microsoft Active Accessibility User Interfaces
Available from:
http://msdn2.microsoft.com/en-us/library/ms697707.aspx
[DOM REQ]
Document Object Model Requirements (W3C Working Group Note). 26 February 2004. editors: Chang, Ben; Champion, Mike; Davidson, James; Diaz, Angel; Heninger, Andy; Kesselman, Joe; Le Hégaret, Philippe; Le Hors, Arnaud; Pixley, Tom; Sorensen, Jared; Whitmer, Ray; Wood, Lauren.
Available at:
http://www.w3.org/TR/2004/NOTE-DOM-Requirements-20040226/
[DOM2]
Document Object Model (DOM) Level 2 Specifications
Available at:
http://www.w3.org/DOM/DOMTR#dom2

Informative References

[DOM BIND]
Language Bindings for DOM Specifications. McCormack, Cameron, editor.
Available at:
http://www.w3.org/TR/DOM-Bindings/
[DOM2 STYLE]
Document Object Model, Level 2: Style, editors: Apparao, Vidur; Le Hégaret, Philippe; Wilson, Chris. 13 November 2008.
Available at:
http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/
[DOM3]
Document Object Model, Level 3
Available at:
http://www.w3.org/DOM/DOMTR#dom3
[MATH DOM]
The MathML DOM Bindings
Available at:
http://www.w3.org/Math/DOM/
Please address any technical difficulties experienced with this page to webmaster@a11y.org. Please send any comments upon this document to accessibility-rfc@a11y.org.

Valid XHTML 1.0 Strict (check for yourself!) Web-Content Accessibility Guidelines, Level Triple-A Compliant W3C Validated Cascading Style Sheets!