7. ホスト言語における実装

この章は、規範的である。

この仕様で定義されるロールステート、およびプロパティは、完全なウェブ言語またはフォーマットを形成しない。これらは、ホスト言語のコンテキストで使用されることが意図される。この節は、ホスト言語が、WAI-ARIAを実装するための方法、ここで指定されるマークアップがホスト言語のマークアップとスムーズかつ効果的に統合されることを保証するための方法を論じる。

マークアップ言語は表面的に似て見えるが、マークアップ言語は、言語定義のインフラを共有しない。言語構築のアプローチの違いに対応するために、要件は一般的かつモジュール化固有の両方となる。仕様が書かれる方法の違いを可能にする一方で、意図は、WAI-ARIAの情報が著者に見え、WAI-ARIAがスクリプトによってDOMで操作される方法の一貫性を維持することである。

WAI-ARIAロール、ステート、およびプロパティは、要素属性として実装される。ロールは、ホスト言語が提供するrole属性のに出現するトークンの中でロールの名前を置くことによって適用される。ステートおよびプロパティはそれぞれ、この仕様における各特定のステートまたはプロパティに対して定義されるように値をもつ、独自の属性を取得する。属性名は、ステートまたはプロパティのaria接頭辞の名前である。

7.1. ロール属性

実装するホスト言語は、次の特性をもつ属性を提供する:

7.2. ステートおよびプロパティ属性

実装するホスト言語は、次の特性を持つ属性を許可しなければならない

XML名前空間[XML-NAMES]をサポートするホスト言語は、WAI-ARIA属性が名前空間とともに使用することを要求してもよい。この場合、WAI-ARIAステートおよびプロパティ属性に対する名前空間は、http://www.w3.org/ns/wai-aria/なければならない。ホスト言語が名前空間をサポートし、かつユーザーエージェントがWAI-ARIA名前空間を認識する期待がある場合、名前空間に対するサポートを明示的に記述しないホスト言語でWAI-ARIAを使用するために、著者は、この名前空間を同様に使用すべきである。名前空間接頭辞はこの仕様で定義されないが、一般に"aria"が期待される。

注:WAI-ARIAステートおよびプロパティ属性は、属性すべてが文字列"aria-"で開始するような命名規則を持つ。これは名前空間接頭辞でないが、ステートまたはプロパティ名の一部である。したがって、名前空間接頭辞をもつWAI-ARIAステートおよびプロパティを使用する場合、完全な属性名は"aria:aria-foo"のようになる。

ホスト言語が名前空間をサポートしないため、または設計者がWAI-ARIAをコア機能セットに組み込むようにしたいいずれかため、一部のホスト言語は、WAI-ARIAステートおよびプロパティ属性をもつ名前空間を使用しない。このホスト言語において、この属性の名前空間名は値がない。この属性の名前は、コロンによる接頭辞オフセットがない。名前空間の点で、これは接頭辞のない属性名である。たとえばDOMインターフェイスgetAttributeNSへの結合ECMAScriptは、この状態を表すものとして空文字列("")扱い、getAttribute("aria-busy")getAttributeNS("", "aria-busy")の両方が、DOMにおける同じaria-busy属性にアクセスする。

注:この節の要件によると、一部のユーザーエージェントは、名前空間をもつWAI-ARIAステートおよびプロパティを認識し、一部は名前空間をもたないものを認識し、そして一部は両方を認識するかもしれない。著者は、著者が使用しているホスト言語でサポートされる形式を意識することを勧める。ホスト言語およびサポートするユーザーエージェントが明示的に名前空間を要求することを示す場合を除き、著者は名前空間なしで属性を使用することを勧める。名前空間をサポートするユーザーエージェントでさえも、一般にアクセシビリティーAPIに名前空間されたWAI-ARIAステートおよびプロパティを公開しない。具体的には、XHTMLを含む、HTMLの現在の実装は、この名前空間をサポートしない。

7.3. フォーカスナビゲーション

実装するホスト言語は、すべてのインタラクティブな要素、つまり、すべてのレンダリング可能またはイベント受理要素をフォーカス可能にするためにサポートを著者に提供しなければならない。実装するホスト言語は、ウェブ著者にこれらのフォーカス可能かどうかを定義することを可能にする機能を提供しなければならず、インタラクティブな要素は、デフォルトでタブナビゲーション順序で出現する。HTML 5のtabindex属性は、1つの実装例である。

7.4. 暗黙のWAI-ARIAセマンティックス

ホスト言語がオブジェクトに対してネイティヴセマンティックスを欠く場合、WAI-ARIAは、オブジェクトに関するセマンティック情報を提供するように設計されている。とはいえ、WAI-ARIAは多数のホスト言語のために追加のセマンティックスを提供するよう設計されている。さらに、長い期間をかけてホスト言語は進化し、WAI-ARIAの機能に対応して新しいネイティヴな機能を提供することができる。そのため、WAI-ARIAセマンティックスがホスト言語のセマンティックスと冗長であるような多数の状況がある。

このホスト言語の機能は、「暗黙のWAI-ARIAセマンティックス」を持つとみなすことができる。暗黙のWAI-ARIAセマンティックスを持つ機能のユーザーエージェント処理は、WAI-ARIAの機能の処理と同様だろう。その処理はホスト言語の機能とWAI-ARIAの機能との間の構文上の違いにより同一ではないかもしれないが、一般に、ユーザーエージェントはアクセシビリティーAPIに同一の情報を公開するだろう。暗黙のWAI-ARIAセマンティックスを持つ機能は、必要な独自の要素、必要なステートやプロパティなど、WAI-ARIAの構造的要件を満たし、提供される明示的なWAI-ARIAセマンティックスを必要しない。

たとえば、チェックボックスやラジオボタンなど、機能性をもつ要素が既に存在する場合、ホスト言語のネイティヴセマンティックスを使用する。WAI-ARIAマークアップは、(たとえば、aria-requiredに必要であることを示す)ネイティヴセマンティックスを増強するためにのみ使用されることを意図する、または要素の標準機能を形成する、別の用途にセマンティックスを変更するために使用されることを意図する。

暗黙のWAI-ARIAセマンティックスは、以下のセクションにおける、ホスト言語のセマンティックスと競合する、衝突解決手続きに影響を与える。したがって、暗黙のWAI-ARIAセマンティックスは、ホスト言語仕様またはWAI-ARIAユーザーエージェント実装ガイド [ARIA-IMPLEMENTATION]などの規範的仕様で定義する必要がある。

7.5. ホスト言語のセマンティックスとの競合

WAI-ARIAのロール、ステート、およびプロパティは、これらのセマンティックスをもつネイティヴホスト言語の要素が使用不可であり、一般に自身のネイティヴセマンティックスを持たない要素で使用される場合に、セマンティック情報を付加することを意図する。それらもまた同様であるが非同一のセマンティックスを持つ要素に使用できる(たとえば、ネストされたリストがツリー構造を表すために使用できる)。再意図される要素のネイティヴプレゼンテーションが必要とされるスタイルおよびまたはスクリプトの量を減少させるため、この方法は、WAI-ARIAの実装を持たない古いブラウザー用のフォールバック戦略の一部にすることができる。以下に概説する場合を除き、ユーザーエージェントは、ホスト言語のセマンティックスを使用するよりもむしろ、アクセシビリティーAPIに要素を公開する方法を定義するために、WAI-ARIAセマンティックスを常に使用しなければならない

WAI-ARIAがネイティヴセマンティックスを上書きすることが期待されるこれら通常の状況に加えて、WAI-ARIAを上書きすることが不適切である要素が存在する。これは、同一のホスト言語のセマンティックスが存在するため、WAI-ARIAを必要としないため、またはWAI-ARIA由来のセマンティックスが直接ホスト言語のセマンティックスと競合するためであるかもしれない。同一のロールのセマンティックスと値をもつホスト言語における機能が使用可能である、かつ著者がホスト言語の機能を使用しないようにするための説得力のある理由がない場合、著者は、WAI-ARIAをもつ他の要素を再利用するよりもむしろ、ホスト言語の機能を使用すべきである。

ホスト言語は、ロールに対応する暗黙のWAI-ARIAセマンティックスを持つ機能を持つことができる。WAI-ARIAロールが与えられる場合、ロールがホスト言語によってネイティヴ要素で明示的に禁止されているWAI-ARIAステートおよびプロパティを必要としない限り、ユーザーエージェントは、処理のためにネイティヴセマンティックでなく、WAI-ARIAロールのセマンティックを使用しなければならない。ロールに対する値は、ステートおよびプロパティに対する値と同じように競合せず(たとえば、HTML 'checked'属性と'aria-checked'属性が競合する値を持つだろう)、著者は、通常は再利用されない要素でWAI-ARIAロールすら提供するための正当な理由があると予想される。

WAI-ARIAステートおよびプロパティが、同じ暗黙のWAI-ARIAセマンティックを持つホスト言語の機能と対応する場合、WAI-ARIAの機能を使用することが特に問題となるかもしれない。WAI-ARIAの機能およびホスト言語の機能が両方とも提供されるが、それらの値が同期しない場合、ユーザーエージェントおよび支援技術は、使用すべき値を知ることができない。したがって、支援技術に相反するステートとプロパティを提供しないように、その要素のネイティヴ属性と競合する各ホスト言語要素上のWAI-ARIA属性の使用箇所で、ホスト言語は明示的に宣言しなければならない。ホスト言語が指定された要素に対するネイティヴ属性と競合する直接セマンティックで存在するだろうWAI-ARIA属性を宣言する場合、ユーザーエージェントは、WAI-ARIA属性を無視しなければならず、代わりに同一の暗黙のセマンティックを持つホスト言語属性を使用しなければならない。

ホスト言語は、WAI-ARIAで上書きできない機能を文書化してもよい(これは「強いネイティヴセマンティックス」と呼ばれる)。これは、セマンティックスがWAI-ARIAで変更された場合、処理が不確実になる場所の機能だけでなく、暗黙のWAI-ARIAセマンティックスを持つ機能でもある。WAI-ARIAロールが強いネイティヴセマンティックスをもつ要素で使用される場合、適合性チェッカーはエラーまたは警告を通知してもよいが、上記のようにアクセシビリティーAPIに要素を公開する際に、ユーザーエージェントは依然としてWAI-ARIAロールのセマンティック値を使用しなければならない

7.6. ステートおよびプロパティ属性の処理

ステートおよびプロパティ属性はホスト言語に含まれており、したがって、属性の値型の表現に対する構文は、ホスト言語によって管理される。で定義される値の型ごとに、ホスト言語から適切な値の型が使用される。WAI-ARIAの値型とさまざまなホスト言語の値型との間の推奨される対応は、WAI-ARIAの値型の言語へのマッピングに挙げられる。これは、WAI-ARIAをサポートする新しいホスト言語に対応するための非規範的マッピングである。

リストの値型―ID参照リストおよびトークンリスト―は、提供される与えられた型の複数の値を許可する。値は、スペース文字、カンマなどの、リスト属性に対するホスト言語によって認識される区切り文字で区切られる。ある言語がさまざまな区切り文字を許可するかもしれない一方で、一部の言語は、特定の単一の区切り文字を要求するかもしれない。

グローバルなステートおよびプロパティは、ホスト言語における任意の要素でサポートされる。しかし、著者は、明示的なWAI-ARIAロールとして定義される、または適切なWAI-ARIAロールと一致するホスト言語セマンティックによって定義されるかのいずれかで、ステートまたはプロパティをサポートするロールをもつ要素上で非グローバルステートおよびプロパティのみを使用しなければならない。role属性がサポートするWAI-ARIAステートおよびプロパティを含む、要素、セマンティックスおよび要素の動作に追加される場合、ロールの動作によって増強または上書きされる。ユーザーエージェントは、明示的なWAI-ARIAロールとして定義される、または適切なWAI-ARIAロールと一致するホスト言語セマンティックで定義されるかのいずれかで、ステートまたはプロパティをサポートするロールをもたない要素で使用される非グローバルステートおよびプロパティを無視しなければならない。たとえば、aria-valuetext属性は、progressbarとしてのロールを明示的にかつ重複して指定するために著者の要求なしで、HTMLにおけるprogress要素で使用することができる。

WAI-ARIAロールが使用される場合、ロールが要求されない限り、DOMに存在しないサポートするステートおよびプロパティは、そのデフォルト値に従って処理される。トークンのステートおよびプロパティの場合、属性値は、長さゼロの文字列("")もデフォルト値に対応するのである。したがって、ユーザーエージェントは、存在しない属性を扱うのと同じ""の値をもつトークンのステートおよびプロパティ属性を扱うべきである。通常、これはデフォルト値(通常"undefined")に対応するが、値が必須属性である場合、ユーザーエージェントはエラーを通知する(NULL値は必須属性を提供するために失敗したのと同じであるため)。