【注意】
この文書は、W3C / WAI が公開している2008年2月4日付の「WAI-ARIA Primer」(原文は英語)を、W3Cの定めた事項に従い株式会社日立製作所がボランティアとして日本語に翻訳したものです。
正式な文書は、あくまで W3C のサイト上で公開されている英語版であり、この日本語訳文書には翻訳上の間違い、あるいは不適切な表現が含まれている可能性がありますのでご注意ください。また、リンク先が英語の場合、あるいはダミーのページである場合もあります。ご了承ください。
その他のWAI-ARIA関連文書の日本語訳をご覧になりたい場合はWAI-ARIA(日本語訳)をご覧ください。
Copyright © 2008 All Rights Reserved. すべての著作権はW3C®(MIT、ERCIM、慶應義塾大学)に帰属します。W3Cの免責事項、商標、文書利用に関する規定が適用されます。
WAI-ARIA入門書は、WAI-ARIA [ARIA] を使って障がいのある人のための動的なウェブコンテンツのアクセシビリティに対応することを、開発者に紹介するものである。DHTMLやAjaxなどのハイブリッドな技術によって引き起こされるアクセシビリティ問題を説明するほか、コントロールをマッピングする技術、Ajaxのライブリージョン、アクセシビリティAPIへのイベントを取り上げ、リッチ・インターネット・アプリケーションに使われるカスタムコントロールなども含めて紹介していく。また、この入門書では、メニュー、1次コンテンツ、2次コンテンツ、バナー情報、その他のウェブ構造タイプといった一般的なウェブ要素をマークする新しいナビゲーション方法も説明する。これらの新しい技術は、障がいのある人に対するウェブリソースのアクセシビリティとユーザビリティを高める目的で使え、またウェブリソースの既存ライブラリを大幅に変更する必要もない。この文書は、WAI-ARIA概要で説明されるWAI-ARIAの一部と位置付けられている。
このセクションは、この文書の発行時点でのステータスを説明したものであり、この文書に取って代わる他の文書がすでに存在している可能性もある。W3Cの現行の発行物およびこの技術報告書の最新改訂版は、W3C技術報告書の索引(http://www.w3.org/TR/)で見つけることができる。
この文書は、ウェブ・アクセシビリティ・イニシアティブ(WAI)のプロトコル・フォーマット作業部会(PFWG)が作成した最初の公開ワーキングドラフトである。アクセシブル・リッチ・インターネット・アプリケーション(WAI-ARIA) [ARIA] 仕様をサポートして、WAI-ARIAが解決しようとしているアクセシビリティ問題について基本的な情報を提供するとともに、技術的アプローチを説明する。この文書のコンテンツの大半は、ARIAのためのロードマップ [ARIA-ROADMAP] から流用された。ロードマップは、動的なコンテンツにまつわるアクセシビリティ問題を解決するための計画に重点を置いているが、この入門書は、その問題に対するWAI-ARIAのソリューションを紹介するものである。
PFWGでは、この文書で説明された情報に対するフィードバックを受け付けている。
ぜひコメントをお寄せいただき、この文書の向上にお力を貸してほしい。この文書に対するコメントは、public-pfwg-comments@w3.org(アーカイブ)で受け付けている。締め切りは2008年3月3日だが、2008年2月20日までにお送りいただければ、予定された会合でコメントを議題にしやすくなる。とはいえ、それ以降に届いたコメントも、検討させていただく。
ワーキングドラフトとして発行された場合も、W3Cメンバーによって是認されたことを意味するものではない。この文書は、ドラフト文書であって、他の文書によって随時更新、置換されるか、また旧バージョンとなる可能性がある。この文書は、未完成の文書という扱いにおいてのみ、引用すべきである。
この文書は、2004年2月5日W3C特許方針に則って活動するグループによって作成された。このグループでは、この文書がW3C勧告になるとは考えていない。W3Cでは、このグループの作成物に関連する全開示特許の公開リストを作成しており、そのページには、特許開示にあたっての指示も含まれている。エッセンシャルクレイムを含んでいると思われる特許について実際の知識を持っている人は、W3C特許方針のセクション6に従ってその情報を開示しなければならない。
このグループの参加者に課される開示の義務は、グループの憲章で説明されている。
SecuritySpaceが発行する技術普及報告書(Technology Penetration Report)によると、今日のウェブサイトの55%以上はJavaScriptを含んでいて、障がいのある人のウェブコンテンツへのアクセス能力に大きな影響を及ぼしている。新しいリッチ・インターネット・アプリケーションは、カスタムウィジェットをレンダリングして、リッチなデスクトップコンポーネントを模倣することによって、ページ全体をリロードしなくてもUIを更新できるという、GUIによく似た環境を実現している。レガシーGUIのアクセシビリティフレームワークは、包括的なアクセシビリティ・アプリケーション・プログラミング・インタフェース(API)とインフラストラクチャを介してこれらの問題に対応することで、支援技術との相互運用性を達成している。これらのAPIは、スクリーンリーダーなどの支援技術とアプリケーションとの間に規約を構成することで、必要とされる適切なセマンティクスを持ったリッチで動的なコンテンツに対し、支援技術がアクセスして使用可能な代替物を生成できるようにする。しかし現状では、リッチ・インターネット・アプリケーションと支援技術の間にこのような規約が存在しないために、障がいのある人にアクセシビリティギャップをもたらしている。
残念ながら、HTMLとその他のマークアップ言語は、アクセシブルな動的コンテンツに適切なサポートを提供していない。これまでのところ、W3CのWAIでは、JavaScriptを使用しないよう呼びかけ、それをウェブ・コンテンツ・アクセシビリティ・ガイドライン(WCAG)1.0([WCAG1] 、チェックポイント6.1)にも盛り込んできた。W3Cでは、数々のイニシアティブを立ち上げて、宣言的マークアップのアプローチを使ってこの問題に対応しようとしている。この入門書では、現行のHTMLとXHTMLのマークアップに適切なメタデータを組み込んで現在のアクセシビリティAPIをサポートすることによって、現在の支援技術が抱える相互運用性の問題に対応する手段を説明していく。さらに、ARIAの概念的な理解をウェブ開発者にもたらすことによって、WAI-ARIA仕様 [ARIA] への準備とすることを意図している。WAI-ARIAは、(X)HTMLの開発者がマークアップ内で使える幅広い技術を作ることによって、デスクトップの高度なアクセシビリティ機能をウェブにもたらすものだ。これらの技術がもたらすメタデータは、GUIウィジェットや文書構造を記述し、支援技術のベンダーがアクセシブルでユーザブルなソリューションを提供するのを助ける。W3CのWAI内に作られたPFWGでは、ユーザーエージェントのメーカーや支援技術のベンダー、さらにはアクセシビリティツールのプロバイダなどと協力して、エンド・トゥ・エンドの実用ソリューションを確立する作業に取り組んでいる。
WAI-ARIAの導入としては、アクセシブル・リッチ・インターネット・アプリケーション・スイート(WAI-ARIA)概要を参照できる。このWAI-ARIA入門書は、WAI-ARIA仕様をサポートする一連のリソースの1つであり、ARIAの背後にある概念と理由について基本的な説明を加えることを目的としている。一方、WAI-ARIAベストプラクティス [ARIA-PRACTICES] では、ウェブコンテンツ開発者のための推奨使用パターンを説明する。WAI-ARIAスイートは、ARIAのためのロードマップ(WAI-ARIAロードマップ) [ARIA-ROADMAP] で指摘されたギャップを埋めるものである。これらの文書は、明確な定義や説明がないと思われるトピック分野において、それを明確にするという重要な役割を担っている。
伝統的なHTMLは、複数の側面において、動的なコンテンツのアクセシブルなサポートを難しくしている。例えば、以下の点が挙げられる。
JavaScriptで生成されるコンテンツを開発する開発者は、テーブルや順序の決まったリストのように実際のユーザーインタフェースを定義する標準的なタグ要素だけに縛られることを好まない。DIVタグのような要素を幅広く使って、スタイルシートや動的なコンテンツ変化も利用しながら、UIを動的に実現させている。しかし、HTMLのDIVタグは、セマンティクス情報を提供するものではない。例えば、ポップアップメニューや順序の決まったリストなどの開始を定義するために、DIVが使われるかもしれない。が、HTMLには、以下の点を達成するメカニズムが存在しない。
DIVのロール(role)をポップアップメニューであると特定する。つまり、JavaScriptには、ネイティブプラットフォーム上のアクセシビリティフレームワークに対してユーザーエージェントがソリューションをマッピングするためのアクセシビリティアーキテクチャが必要ということだ。

図1.0:JavaScriptを伴わないDOMノードのアクセシビリティ相互運用性
図1.0は、モデル・ビュー・コントローラ(MVC)のアーキテクチャにおける典型的なDOMノードを示している。このノードでは、データ、つまり「モデル」にセマンティクス情報が含まれていて、これはユーザーインタフェースの表現、つまり「ビュー」とは分離されている。ここでは、文書要素がユーザーエージェントによって管理されていて、それは要素のデフォルト動作に基づいている。文書要素におけるユーザーエージェントのデフォルト動作は、コントローラを形成する。DOMノードと支援技術の間に置かれているのが、ユーザーエージェントから支援技術に提供される規約を含んだボックスだ。このデータには、アクセシブルなGUIプラットフォームの多くに対応するアクセシビリティAPIに見られる典型的なアクセシビリティ情報(ロール(role)、ステート(state)、キャレット、選択、テキスト、ハイパーテキスト、名前記述、親/子情報、関係)が含まれている。HTMLと他のW3Cのマークアップでは、要素のタグ名とそのタグにマッピングされるアクセシビリティ属性だけに基づいて、アクセシビリティ情報が提供される。例えば、テーブルのアクセシブルなロール(role)はtableだ。そして、開発者は、title属性を割り当てることによって、アクセシブルな記述を提供する。

図2.0:JavaScriptを伴ったDOMノードのアクセシビリティ相互運用性
図2.0は、図1.0と同じDOMノードだが、新しいコントローラとして機能するJavaScriptを伴っている。JavaScriptは、このDOMノードにおいて、ユーザーエージェントのデフォルト動作を上書きする。ユーザーによるインタラクションの結果として起きるイベントに応答して、JavaScriptがデータ、コンテンツ、スタイルを操作し、カスタムウィジェットを作り出す。この状況では、デフォルトのアクセシビリティ情報は有効ではなくなり、規約も無効となる。図2.0では、規約内のロール(role)、ステート(state)、アクション、値、イベント変更、関係にアスタリスクが付いているが、これは、アクセシビリティにエラーが起きる可能性があること、ベースマークアップにギャップが生じる可能性があることを示している。これらのギャップは、規約をサポートするのに必要な新しいセマンティクスデータを開発者が提供しなかった結果として起きている。
アクセシブルなリッチ・インターネット・アプリケーションの作成を支援するソリューションはすべて、以下の要件を満たさなければならない。
問題点の説明から明らかに分かるのは、適切なアクセシビリティ情報をマークアップで提供し、それによってターゲットとするプラットフォーム上のアクセシビリティAPIをサポートする手段が、開発者にはないという点だ。この問題は、HTMLだけに限ったことではなく、スケーラブル・ベクター・グラフィックス [SVG] などの他のマークアップにも及んでいる。この入門書では、デスクトップブラウザに出力されるウェブコンテンツの問題に対応して、HTMLとXHTMLの両方に使える共通の拡張機能を紹介する。それが、アクセシブル・リッチ・インターネット・アプリケーション(WAI-ARIA)バージョン1.0 [ARIA] だ。目標は、これをHTML 5の標準機能とすることにある。
この問題に対応するためのテンプレートとして図1.0を使用し、また米国リハビリテーション法第508条のアクセシビリティ標準に則って、表1.0を作成した。この表では、インフラストラクチャに見られるギャップが明らかにされているほか、その問題への対応として使われるべきW3Cの標準も示されている。右側の列で空白になっているセルや制限が記載されているセルは、HTMLとXHTMLにアクセシビリティギャップがあることを示している。
W3C WAIのPFWGによる現在の取り組みは、W3C ARIAをHTML 5への移行パスとともに提供し、ホスト言語を拡張することによって、HTML 4.01とXHTML 1.xに拡張機能をもたらすことに、主な焦点を置いている。この成果は、アクセシブル・リッチ・インターネット・アプリケーション [WAI-ARIA] 仕様に盛り込まれるだろう。WAI-ARIAが提供する拡張機能によって、アクセシビリティAPIのインフラストラクチャと動的な(X)HTMLコンテンツをサポートするために埋めなければならないギャップのほとんどは埋められるだろう。WAI-ARIAの策定に使われた(X)HTMLの総合的なギャップ分析、およびWAI-ARIAがこれらのギャップをどのように埋めるかは、表1.0に示したとおりだ。将来的には、ARIAを多くのホスト言語に統合して、アクセシビリティを向上させたいと考えている。支援技術との高い相互運用性を通じて動的なウェブコンテンツをアクセシブルにするのに必要とされる重要な拡張機能は、以下のように要約できる。
ステート(state)およびプロパティ属性 ― これは、完全なキーボードフォーカスを提供するために必要な(X)HTMLの属性変更だ。ステート(state)とプロパティがプラットフォームのアクセシビリティAPIに直接的または間接的にマッピングされることによって、ARIAに対する支援技術の完全な相互運用性が実現する。
ロール(role)属性 ― ロール(role)属性は、XHTML Role属性モジュール [XHTML-ROLES] から借用された概念で、これにより開発者は、要素の目的に関するセマンティクス情報を機械的に抽出できるかたちで、ホスト言語に注釈として付けられるようになる。アクセシビリティ、機器適応、サーバーサイド処理、複雑なデータ記述などを目的としている。図2:JavaScriptを伴ったDOMノードのアクセシビリティ相互運用性に見られるように、ARIAでは、支援技術に対してロール(role)情報をもたらす目的でロール(role)属性を使っている。
文書ランドマークのロール(role)値 ― これらの値も、やはりXHTML Role属性モジュール [XHTML-ROLES] から借用されていて、ロール(role)属性の標準値を提供する。これにより、文書の適切な部分(ランドマーク)がアクセシビリティ目的で定義される。ユーザーエージェントは、例えばデスクトップのユーザーエージェントであればキーマッピングなどによって、文書内のこれらのセクションをナビゲートできるかもしれない。
ARIAのロール(role)値のタクソノミー ― このタクソノミー(系統的な階層分類)には、WindowsおよびLinuxのアクセシビリティAPIに見られる中心的な必須のロール(role)と、文書構造を表現するロール(role)が含まれる。文書構造を使用することは、支援技術が複雑な文書をナビゲートし、ウェブページ内のアクティブなエリア、例えばスクリプトで動的に生成されたウェブアプリケーションなどに入った場合にそれを理解するために必要だ。このタクソノミーは、ロール(role)がサポートしているプロパティをユーザーエージェントやオーサリングツールが判断するのを助け、これらのプロパティのアクセシビリティAPIへのマッピングを支援する。タクソノミーは、クラスの階層構造に似ていて、セマンティクスと構造を伝えるのに使われ、また各ロール(role)に関する情報を説明する。現時点では、このタクソノミーは、RDF/OWLをモデルとして作られている。
つまり、WAI-ARIAは、スクリプトで生成される動的なウェブコンテンツ、特に(X)HTMLマークアップにJavaScriptを使ったウェブコンテンツのアクセシビリティを修正するのに使われるだろう。幅広い用途を意図しており、SVGなどの他のマークアップにも適用できるはずだ。また、(X)HTMLのアクセシビリティにとっての重要性という点ではやや低いものの、やはり有益なものとして、XMLイベントへの記述拡張と新しいAccess要素が挙げられる(リンクを入手するには、この文書が公開ワーキングドラフトに組み込まれなければならない)。ウェブ・コンテンツ・アクセシビリティ・ガイドライン2.0では、ARIAのプロパティを要求しており、これに関連した記述が、ガイドライン4.1「現行および未来の支援技術を含むエージェントとの互換性を最大化する」(ロール(role)、ステート(state)、プロパティ、値)、およびガイドライン1.3「情報や構造を失うことなく、様々な形式(音声読み上げやシンプルなレイアウトなど)で表現できるコンテンツを作成する」(関係)に見られる。
次のセクションでは、どのようにしてこれらの仕様を一緒に使うのか、またHTML 4に実装するのかを説明する。
HTMLで書かれた複雑なユーザーインタフェースに対して代替アクセスをもたらす必要がある適応技術は、しばしば、HTML文書の特定部分に込められたセマンティクスを推測で判断せざるを得ない状況に置かれている。例えば、XHTMLの文書が、多数のDIVなど特定のHTML構造を使って、ナビゲーションバー、サイトナビゲーションメニュー、その他のGUIのようなインタフェースウィジェットを作っている場合がある。この問題に対応するため、私たちは、ロール(role)属性を導入して、アクセシブルなステート(state)のプロパティを割り当て、新しいTABINDEXの機能を使ってオブジェクトに対するフォーカスを与えた。この情報を加えたことで、開発者は、適応技術がアクセスするアクセシビリティAPIをユーザーエージェントがサポートするにあたって必要な情報を提供できるようになった。
プラットフォームのアクセシビリティAPIは、GUIオブジェクトに対する「ロール(role)」という概念をそれぞれに持っている。このことは、Java Accessibility API [JAPI] 、Microsoft Active Accessibility [MSAA] 、Apple Accessibility for COCOA [AAC] 、Gnome Accessibility Toolkit (ATK) [ATK] 、 UI Automation for Longhorn [UIAUTOMATION] (UI自動化におけるコンテンツタイプと呼ばれている)に当てはまる。W3CのARIA仕様は、XHTML 1.xを基本として、ロール(role)属性を含んでいる。「ロール(role)」属性は、QNameを取ることによって、開発者が ARIA のロール(role)からロール(role)属性を参照できるようにしている。以下の例では、QNameを使って、WAI-ARIA仕様にあるmenuのロール(role)を参照している。
例:ネームスペースを使って、ロール(role)情報をXHTML 1.xに加えている
<?xml version="1.1" encoding="us-ascii"?> <!DOCTYPE html PUBLIC "Accessible Adaptive Applications//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <body> <div role="menu"> File </div> </body> </html>
HTML作業部会では、ロール(role)をQNameにすることで、他者による一連の標準ロール(role)の定義を可能にすることを選んだ。また、これらのロール(role)は拡張可能であるべきだ。HTML作業部会の意図は、要素を定義するRDFをこれらのQNameが参照するようにすることにある。最終的には、RDFがオブジェクトを定義すべきだ。WAI-ARIA仕様では、このタクソノミーの目的に加えて、どのようにRDFを使ってこれらのロール(role)を記述できるかについても、説明している。
新しく定義されたこれらのオブジェクトは、動的なコンテンツであるため、ステート(state)が変化する。WAI-ARIA仕様は、すでに定義されたプラットフォームのアクセシビリティAPIから提供されるアクセシブルなステート(state)とプロパティをサポートするために必要となるアクセシブルな共通プロパティを提供するだろう。この仕様は、MSAAとASKで定義されたアクセシビリティプロパティの分析に基づいて策定された。この情報を取り込むため、やはりここでもネームスペースを使って、XHTMLを拡張している。以下の例では、haspopupのアクセシビリティプロパティを追加することで、これまでのアプローチを拡張した例が示されている。
例:ネームスペースを使って、アクセシブルなステート(state)情報をXHTML 1.xに加えている
<?xml version="1.1" encoding="us-ascii"?> <!DOCTYPE html PUBLIC "Accessible Adaptive Applications//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > <body> <div role="menu" aria-haspopup="true"> File </div> </body> </html>
Windowsのユーザーエージェントでは、現在、このプロパティをMSAAのSTATE_SYSTEM_HASPOPUPのステート(state)にマッピングすることができる。このステート(state)を追加または削除すれば、Windowsのユーザーエージェントは、EVENT_OBJECT_STATECHANGEのイベントを支援技術に送るだろう。この結果、JavaScriptページで開発者がすべきタスクは、このステート(state)の属性を維持することになる。それは、DOMコールを使うことによって簡単に達成可能だ。
スクリーンリーダーやオンスクリーンキーボードなど、事実上すべての適応技術ソリューションが、現在フォーカスの置かれているオブジェクトを把握しなければならない。例えば、開発者は、現在フォーカスが置かれているオブジェクトにテキストを挿入したり、そのオブジェクトに関する情報を提示したりしたいと考えるかもしれない。現在のHTML 4.01とXHTML 1.xでは、スクリプト開発者がフォーカスを置けるのはformおよびanchor要素に限られているが、DOM仕様ではすべての要素がキーボードイベントを含む様々なイベントを受けられるようになっている。つまり、スクリプト開発者がすべてのHTML要素をキーボードでアクセスできるようにしたいと考えたとしても、HTMLが本来的にそれをできなくしている。この問題があることによって、デスクトップブラウザ上のTabキーを使って要素にアクセスするタイプのウェブページは、ユーザビリティに影響を来している。遅くて非生産的なこのアプローチによって、ポータルのナビゲーションは困難になる。すべてのアクティブな要素が、Tabキーで移動して、文書内の最後のポートレットにあるアクティブな要素にフォーカスできなければならないためだ。この問題をXHTML 1.xで解決するために、私たちは、FirefoxとIEの機能を統合して、「-1」に対するタブインデックスを定義した。これにより、スクリプト開発者は、タブ順序(Tabキーでフォーカスが移動する順序)内に要素を置かなくても、要素にフォーカスできるようになる。以下の表は、新しいアクセシブル・アダプティブ・アプリケーション仕様に盛り込まれる予定のこれらの変更を示している。
| tabindex属性 | マウスまたはJavaScriptのelement.focus()でフォーカス可能かどうか | タブがナビゲートできるかどうか |
|---|---|---|
| 存在しない | 要素のデフォルト動作に従う(フォームコントロール、リンクなどでは可) | 要素のデフォルト動作に従う |
負(例:tabindex="-1") |
可 | 不可、矢印キーまたはその他のキーを押した結果として、開発者がelement.focus()でフォーカスしなければならない |
ゼロ(例:tabindex="0") |
可 | 文書内の要素の位置に対する相対的なタブ順序となる |
正(例:tabindex="33") |
可 | この要素がタブ順序内でどこに位置すべきかを、tabindexの値が直接的に指定する。これらの要素は、タブ順序内でtabindex="0"の要素の前に置かれるか、タブ順序に自然に包含される(form要素およびリンク) |
以下の例は、TABINDEXを使って、新しいアクセシビリティのメタデータを持ったDIVにフォーカスを与えた例を示している。
例:XTHML 1.xでtabindexを使用して、formまたはanchorではない要素にフォーカスを与えている
<?xml version="1.1" encoding="us-ascii"?> <!DOCTYPE html PUBLIC "Accessible Adaptive Applications//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > <body> <div role="menu" aria-haspopup="true" tabindex=-1> File </div> </body> </html>
XHTMLとは異なり、HTML 4.01は拡張性がない。これはつまり、ネームスペースの使用を通じてHTML 4を拡張できないということだ。しかし、PFWGのメンバーは、HTML作業部会とも協力して、ネームスペースを使わない手法で合意した。現時点ではXHTMLとHTMLからサポートされていて、HTML 5が勧告になった暁にはHTML 5からもサポートされる予定だ。この手法の実装という点では、Firefox 3が最も進んでいるが、他のブラウザメーカーもサポート努力に取り組んでいる。このテクニックは、ARIAで定義されたロール(role)の値すべてを(XHTML Role属性モジュールによって定義されたものも含めて)、ネームスペースの接頭辞なしに指定できるようにするものだ。さらに、ARIAのステート(state)とプロパティは、「aria-」に続いてそのARIAのステート(state)またはプロパティを記すことで表現される。
例:セクション5.1.3のtabindexの例を、ブラウザによってサポートされたHTMLで表すテクニック
<html lang="en"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head> <body> <div role="menu" aria-haspopup="true" tabindex=-1> File </div> </body> </html>
HTMLとXHTMLに対して拡張されたこれらの属性を確認するため、WAIのPFWGでは今後、各ホスト言語に対して高度なスキーマまたはDTDを作成することを検討していく予定だ。
ARIA のロール(role)に含まれる共通ロール(role)に加えて、XHTML 2.0とXHTML Role属性モジュール([XHTML-ROLES] 、セクション4)では、文書の適切な部分をアクセシビリティ目的で定義する共通ロール、リージョナル、ランドマークを定義している。ユーザーエージェントは、例えばデスクトップのユーザーエージェントであればキーマッピングなどの機器等価物を統合することによって、文書内のこれらのセクションをウェブサイトに依存せずナビゲートできるかもしれない。これらのセマンティクスが追加されることによって、ユーザーエージェントは、一般的な文書セクションに対して標準化されたナビゲーションを提供できるようになる。これは、ポータルのユーザビリティを向上するうえで、特に重要だ。これらは、以下の例で示されているように、文書内のセクションに適用することによって、XHTML 1.xで属性として使用できる。注:これらのロール(role)は、XHTMLの一部になっていることから、ネームスペースに入れる必要はない。
例:XHTML 1.x文書のナビゲーションセクションに対して、XHTMLのナビゲーションロール(role)を使ってランドマークを定義している
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>application/xhtml+xml: Navigation Roles Example 1</title> <link rel="stylesheet" href="css/nav1_xhtml.css" type="text/css" ></link> <script type="text/javascript" src="../js/globals.js"></script> <script type="text/javascript" src="../js/widgets_xhtml.js"></script> <link rel="icon" href="http://www.cites.uiuc.edu/favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="http://www.cites.uiuc.edu/favicon.ico" type="image/x-icon" /> </head> <body onload="widgets.init()"> . . . <div id="leftnav"> <h2 class="nav" id="leftnav_label">Career Center Services</h2> <ul title="Career Center Services" role="navigation" aria-labelledby="leftnav_label"> <li><a href="http://www.uiuc.edu/">Career Home</a></li> <li><a href="http://www.uiuc.edu/">Career Counseling</a></li> <li><a href="http://www.uiuc.edu/">Pre-Health Advising</a></li> <li><a href="http://www.uiuc.edu/">Services</a></li> <li><a href="http://www.uiuc.edu/">Workshops</a></li> <li><a href="http://www.uiuc.edu/">Resource Center</a></li> <li><a href="http://www.uiuc.edu/">Question Board/FAQ</a></li> </ul> ... </body>
上記の例は、イリノイ大学アーバナ・シャンペン校のキャリアセンターのウェブサイトのヘッダーから引用した。この大学の学生は、ジョン・ガンダーソン氏の教えに従って、Mozilla/Firefoxのためのアクセシビリティエクステンションを開発した。ページ開発者やユーザーがナビゲーションランドマークのリストを見られるようにするのが、開発目的の1つだった。このツールは、図3.0のとおり、ページ上のナビゲーションセクションをリストアップする。このナビゲーションバーのリストをキーボードでナビゲーションすれば、対応する文書のセクションがハイライトされる。リストでは、各ナビゲーションリージョンのタイトルが表示されている。

図3.0:ヘッダー内にあるナビゲーションランドマークから作成されたコンテンツの目次
図3.0は、イリノイ大学アーバナ・シャンペン校が開発したMozilla/Firefoxのためのアクセシビリティエクステンションによって文書のランドマークがレンダリングされた例を示している。イリノイ大学キャリアセンターのホームページをFirefoxブラウザで表示した様子だ。この例では、ツールバーのエクステンションによって起動した「List of Navigation Bars」というビューアーが表示されている。そして、このビューアーでは、2次コンテンツである「Career Center Services」が選択されていて、結果として文書内の該当セクションが黄色でハイライトされている。このビューアーには、ナビゲーションセクションに対応する以下のタイトルがリスト表示されている。
WAI-ARIAのロール(role)タクソノミーは、セマンティックウェブ技術を使って、リソース記述フレームワーク(RDF) [RDF] およびウェブオントロジー言語(OWL) [OWL] の形式で策定された。知識ベースのクラス階層構造をロール(role)に定義するための手段だ。このモデルは、タクソノミー内の各ロール(role)がどのステート(state)とプロパティをサポートしているかを示している。クラスの階層構造に含まれているロール(role)は、その先祖からプロパティを継承し、また独自のプロパティを定義する。必要に応じてセマンティックウェブ技術が使われて、関連する概念が他のネームスペース内で定義される。この情報は、ロール(role)をどのように選び、ロール(role)とどうインタラクトするかを見極めるにあたって重要だ。ロール(role)のタクソノミーでは、データを使ってデータを記述し、W3Cの標準に基づくアプローチでこの情報を表現するために、RDFを使用している。

図4.0:ARIAに拡張されたロール(role)としてのButtonUndoロール(role)の可能性を示した部分的なRDFマップの例
図4.0は、オブジェクトを定義している一連の用語と関係について定義する、基本的なRDFマッピングを示している。中央にあるのは、すべてのGUIウィジェットに共通するステート(state)とプロパティを定義するウィジェットオブジェクトだ。このButtonオブジェクトは、ウィジェットを拡張し、定義されたアクセシビリティプロパティをスーパークラスウィジェットから継承する。また、Linkオブジェクトに対してrelatedConceptのプロパティも定義する。ButtonUndoのロール(role)は、Buttonを拡張する。HTMLのinputオブジェクトのrelatedConceptを持っていて、さらに、オブジェクト記述などのダブリン・コア・メタデータを導入する。relatedConceptとrequiredStateは、対応するRDFスキーマの一部として定義される用語である。ロール(role)のインスタンスは、それぞれがWindowsやGnomeのようなプラットフォームのアクセシビリティAPI、およびコンテンツ構造に見られる標準のロール(role)を表現する。そして、これらのロール(role)が、タクソノミーを形成する。ホスト言語のブラウザ実装は、ネームスペースなしにARIAのロール(role)を参照するかもしれないが、ロール(role)に対するRDFの表現は、ホストXMLマークアップ言語からのQNameを使って参照されるかもしれない。以下の例では、XHTMLが、ARIAタクソノミーのRDF表現においてgridのロール(role)を参照している。
<div role="wairole:grid"> whereby wairole:grid expands to: http://www.w3.org/2005/01/wai-rdf/GUIRoleTaxonomy#grid in the button markup.
このデザインによって、ウェブオーサリングツールは、対応するRDF/OWLのマークアップに戻り、どのプロパティがアクセシビリティAPIのマッピングにサポートされているのかを判断できるようになる。そして、付加的なミドルウェアソリューションは、リッチブラウザ、および構造化されたリッチなフレームワークの背後にあるセマンティクスを処理して、ウェブコンテンツをインテリジェントに変化させられるようになる。PFWGの当面の目標は、スクリプトで生成されるウェブコンテンツのアクセシビリティ問題を解決することだ。支援技術は、標準的なロール(role)を使って、ほとんどのコンテンツをどのようにレンダリングするかを決定するだろう。PFWGでは、将来的には、RDFを必要とせず、QNameを提供しないHTMLにもっと適したARIAのロール(role)タクソノミーをモデル化するための追加的な手段を定義するつもりだ。
図5.0は、XHTML、JavaScript、CSSを使ってGUIのようなアプリケーションを作成したDHTMLの例を示している。このDHTMLのウェブページの例は、IBMが開発したもので、伝統的なデスクトップGUIのように動作するデータグリッドを含んだノートブックタブを示している。このデータグリッド内のキーボードナビゲーションは、矢印キーで行われる。ページタブ間のナビゲーションにも、やはり矢印キーを使う。ノートブックタブ、編集フィールド、ボタン、データグリッド間のナビゲーションは、Tabキーで可能だ。WAI-ARIA のロール(role)、ステート(state)、プロパティ仕様からのアクセシブルなロール(role)およびステート(state)のメタデータが、GUIウィジェットとして動的に使われたXHTML要素それぞれに対して、属性として追加されている。ここではFirefoxになっているが、ユーザーエージェントが、この情報をプラットフォームのアクセシビリティAPIにマッピングする。図6.0は、フォーカスが置かれた「DataGrid」ページタブ上に新しく提供されたアクセシビリティマークアップをMicrosoft Active Accessibilityでレンダリングした様子を示している。

図6.0:Microsoft Inspectツールによる「DataGrid」ページタブのレンダリング
図6.0は、図5.0で示した「DataGrid」ページタブをMicrosoftのInspect 32でレンダリングしたものだ。Inspect32は、Microsoft Active Accessibility情報を提供するもので、ここでは、「page tab」のアクセシブルなロール(role)とアクセシブルなステート(state)、つまり「focused(フォーカスされた)」「focusable(フォーカス可能)」「linked(リンクされた)」の情報を示している。XHTMLには、ページタブ要素はない。このため、ここではXHTMLのDIV要素が使われて、JavaScriptコントローラによってノートブックタブのように見えるようにされている。こうすることによって、標準的なXHTML 1.xとは異なり、フォーカスを受けることができるようになり、しかもTabキー操作の必要もない。スクリプト開発者は、これらの仕様を使うことで、アクセシビリティプロパティを追加してプラットフォームのアクセシビリティAPIをサポートできるようになる。「DataGrid」ページタブのアクセシブルなステート(state)プロパティは、「focused(フォーカスされた)」「focusable(フォーカス可能)」「linked(リンクされた)」と示されている。GUIアプリケーションとは異なり、開発者がアプリケーションを一度だけ作成すれば、複数のオペレーティングシステムプラットフォームで動作するようになる。
PFWGでは、スクリプトで生成されるウェブコンテンツを超えて、ロール(role)の使用を拡張し、他の使用ケースでも動作するようにしたいと考えている。これには、以下のものが含まれる可能性がある。
アプリケーションと支援技術の間の相互運用性を達成するには、アクセシビリティを目的としたイベント通知が必要となる。表2.0に示したイベントは、ユーザーエージェントを介して起動されるだろう。そのアクセシブルな値とステート(state)プロパティの変更は、DOM属性の変更に応答するかたちで、AAA仕様の定義に従って生成される。プラットフォームのアクセシビリティAPIをサポートするユーザーエージェントは、ステート(state)の変更や値の変更といったイベント通知をサポートする。
リッチ・インターネット・アプリケーションの開発者が、1999年のWCAG 1.0標準に基づくアクセシビリティ順守条項をサポートしようとして、アプリケーションをディグレードさせ、ARIAの使用を避けることが多々ある。まずこれは、HTML 4またはXHTML 1.xを使って、ウェブページをキーボードでアクセスできるようにすることを意味する。WCAG 1.0では、キーボードでアクセスできるようにしなければならないと言っているが、使えるようにしなければならないと言っているわけではない。これをHTMLで行うには、アクティブな要素がリンクになるか、form要素がキーボードでアクセスできるようにならなければならない。また、これは、ホスト言語が提供する以上のセマンティクスが必要というわけではないことも意味する。さらに、ブラウザのCSSをオフにした状態でも使うことができなければならない。このことは、以下のようなユーザビリティ問題を引き起こす。
図7.0:ツリーウィジェットのユーザビリティについて、WAI-ARIAのセマンティクスを実装したWCAG 2.0ガイドラインとWAI-ARIAを使わないWCAG 1.0を比較したモデル
図7.0は、ツリーウィジェット内のツリー項目のための「アクセシブル」なウィジェットを示している。WCAG 1.0をARIAなしで使っていて、スクリーンリーダーに送られた段階では、「link folder PJ111」と読み上げられる可能性がある。このフォルダが閉じられている(expandedが「false」になっている)ことを示す情報は提供されていない。また、階層の深さ(aria-levelが「2」)、セット内のポジション、このレベルでのセットの大きさを示す情報もない。これらはすべて、目の見えるユーザーには当然と思われがちな文脈をもたらすものだ。これがツリー項目であることは、ロール(role)を使って示されていて、これにより、この項目がツリー項目のように動作し、キーボードでナビゲートできるべきであることが分かる。一方、ARIAのバージョンを使っているスクリーンリーダーは、「Closed Folder PJ111, Closed Folder one of four, Depth 2, unchecked」と読み上げる可能性がある。さらに、ARIAのバージョンでは、ツリー項目が矢印キーでナビゲートでき、ウェブページ全体を統制するTabキー送りのスキームの一部としてナビゲートすることは要求しない。これはそもそも、ツリーウィジェットに対してユーザーが期待することではないだろう。さらに、ウェブページ上のすべてのウィジェットがリンクだと言われたら、いったいどれほどのユーザビリティだろうか。
ここで問わなければならないのは、次の質問だ。「なぜアクセシビリティに投資が必要なのか、なぜ非生産的なユーザーを作り出す必要があるのか」。デスクトップのユーザー全員が、ARIAから恩恵を受けるだろう。
この入門書は、スクリプトで生成される動的なウェブコンテンツを今日のブラウザでレンダリングする際のアクセシビリティに対応するとともに、W3Cが策定するXHTML 2のような宣言的な標準の未来に対して効果的な架け橋を築くために作られている。XHTML 1.xのために作られた拡張機能は、幅広い対象を視野に入れている。この入門書では、WCAG、ATAG、UAAGが共通戦略の中核を成すべきだと、明らかに述べている。すべての作業部会が、互いに依存していて、影響を受け合っている。さらに、HTML、CSS、機器非依存などメインストリームの作業部会と密接に協力することで、実用的なソリューションというのみならず、XHTMLだけに留まらない幅広い影響力のある実用的なソリューションができるだろう。
| 必須のコンポーネント | 現状でどれが何をするのか(X)HTML | HTML 4.01とXHTML 1.xのギャップを埋めるテクニック |
|---|---|---|
| イベント: | ||
| フォーカスの変更 | DOM 2 UI イベント([EVENTS] 、セクション1.6.1) | DOM 2 UI イベント([EVENTS] 、セクション1.6.1) |
| 有効化 | DOMレベル2の機器に依存しないUIイベント([EVENTS] 、 セクション1.6.1、UIイベント) | |
| キャレットの変更 | ユーザーエージェントのAPI | ユーザーエージェントのAPI |
| * 値の変更 | (X)HTMLのWAI-ARIAのロール(role)、ステート(state)、プロパティ内にあるvaluenow、valuemax、valueminのステート(state)を、ユーザーエージェントがモニターする。ロール(role)によって指定されたプラットフォームのアクセシビリティAPIの値を表現するプロパティについては、アクセシブルな値の変更イベントを生成する(下記のステート(state)の変更イベントを参照) | |
| * ステート(state)の変更 | (X)HTMLのWAI-ARIAのロール(role)、ステート(state)、プロパティ内にある特定のアクセシビリティのステート(state)を、ユーザーエージェントがモニターする。ロール(role)によって指定されたプラットフォームのアクセシビリティAPIのステート(state)またはプロパティを表現するステート(state)およびプロパティについては、アクセシブルなステート(state)またはプロパティの変更イベントを生成する(下記のステート(state)の変更イベントを参照) |
|
| 選択の変更 | ユーザーエージェントのAPI | ユーザーエージェントのAPI |
| ミューテーション(変異) | DOMのイベント | DOMのイベントのマッピング |
| アクセシブルなアクション: | ||
| * イベントハンドラの機能情報および記述ショートカット | ||
| * アクション列挙のために使用できるイベントハンドラへのアクセス | DOM 3のイベント | |
| * ステート(state)情報: | WAI-ARIAのロール(role)、ステート(state)、プロパティ仕様からのステート(state)およびプロパティ | |
| * ロール(role)情報: | 標準のHTMLタグ名に限られる(コンテンツと表現の両方) | WAI-ARIAのロール(role)、ステート(state)、プロパティ仕様が定義するロール(role)とそれに対応する値 |
| 関係:親/子 | DOM(スタイルに影響される)に限られる(コンテンツと表現の両方) | |
| 関係:(Label、MemberOf - Group、ControllerFor) | HTMLに限られる(Title, alt, label) | |
| テキスト: | パースしたHTMLからのコアDOM 1 | |
| コンテンツ選択: | ユーザーエージェント | |
| フォント/フォントスタイル情報: | 設定できるが最終のフォーマットは得られない | CSS2 APIまたはプラットフォームのアクセシビリティAPIを使って、ユーザーエージェントが最終的にフォーマットをスタイリングする |
| * 記述/ヘルプ: | HTML 4.0(Alt Text, title text)に限られる | WAI-ARIAのロール(role)、ステート(state)、プロパティ仕様が定義するdescribedbyのプロパティ |
| * アクセシブルな値: | form要素に限られる | WAI-ARIAのロール(role)、ステート(state)、プロパティ仕様が定義するvaluenow、valuemax、valueminのプロパティ |
| 座標(矩形範囲など): | ユーザーエージェント、プラットフォームのアクセシビリティAPI | |
| アクセシブルな名前: | HTMLタグからユーザーエージェントが決定する | |
| * 応答デスクトップフォント/カラーの変更 | 部分的(CSSおよびJavaScriptに競合) | |
| * 機器に依存しないナビゲーション: | <link rel"">を介してXHTMLのランドマークを使用 | |
| * アクセシビリティAPIへのマッピング: | 部分的 ― ユーザーエージェント | |
| アクティブな要素すべてに対するフォーカスの提供 | ベストプラクティスはTABINDEX=-1 |
表2.0は、(X)HTMLの表1.0のギャップを埋めるためのロードマップを示している。この取り組みでは、HTML文書にロール(role)およびステート(state)属性を組み込むためのW3Cのテクニックを使って、HTMLコンテンツのギャップを埋めることを目指している。必須のコンポーネントでアスタリスクが付いているものは、ロードマップで埋めるべきギャップを示している。
このセクションの目的は、一般情報を提供することにある。
この文書の策定にあたっては、以下の方々からの協力を仰いだ。
アーロン・レベンサール(Aaron Leventhal)に特別な謝意を表明したい。彼の尽力と見識があったからこそ、アクセシビリティAPIバインディングの実践的なプロトタイプが実装された。
また、ジム・アラン(Jim Allan)(TSBVI)、サイモン・ベイツ(Simon Bates)、ジュディ・ブリューワー(Judy Brewer)(W3C/マサチューセッツ工科大学)、クリスチャン・コース(Christian Cohrs)、ベッキー・ギブソン(Becky Gibson)(IBM)、アンドレ・ゴンザレス(Andres Gonzalez)(Adobe)、ジョルジオ・グリゴリアディ(Georgios Grigoriadis)(SAP AG)、ジェフ・グライムズ(Jeff Grimes)(Oracle)、バーバラ・ハーテル(Barbara Hartel)、ショーン・ヘイズ(Sean Hayes)(Microsoft)、ジョン・フバティン(John Hrvatin)(Microsoft)、アール・ジョンソン(Earl Johnson)(Sun)、マサヒコ・カネコ(Masahiko Kaneko)(Microsoft)、ジャエル・クルツ(Jael Kurz)、アレックス・リー(Alex Li)(SAP AG)、ウィリアム・ローバラ(William Loughborough)、リンダ・マオ(Linda Mao)(Microsoft)、アンダース・マークッセン(Anders Markussen)(Opera)、デイブ・ポーソン(Dave Pawson)(RNIB)、T・V・ラマン(T.V. Raman)(Google)、ビタリー・スリコフ(Vitaly Sourikov)、ライアン・ウィリアムズ(Ryan Williams)(Oracle)、トム・ウロドコウスキ(Tom Wlodkowski)の各位にもお礼を申しあげる。