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.
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.�� ����
|
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 |
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 |
|
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 |
|
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:: |
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_ANIMATION, ROLE_SYSTEM_APPLICATION, ROLE_SYSTEM_BORDER, ROLE_SYSTEM_BUTTONDROPDOWN , ROLE_SYSTEM_BUTTONDROPDOWNGRID, ROLE_SYSTEM_BUTTONMENU , ROLE_SYSTEM_CHART, �ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CLIENT , ROLE_SYSTEM_COLUMN , ROLE_SYSTEM_COLUMNHEADER , ROLE_SYSTEM_COMBOBOX , ROLE_SYSTEM_CURSOR, ROLE_SYSTEM_GROUPING , ROLE_SYSTEM_HELPBALLOON , ROLE_SYSTEM_HOTKEYFIELD , ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_IPADDRESS, ROLE_SYSTEM_LINK, 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:: 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 ����������������������������������� |
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 |
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_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 |
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_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_LAST_DEFINED |
|
IWatNode::IsDisabled IWatNode:IsReadOnly |