Copyright © 2021 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
テキスト読み上げ(TTS)合成による正確な発音は、多くの 文脈で非常に 重要であり、教育、出版、コミュニケーション、 エンターテインメント、 その他の分野では不可欠です。TTSは、Web上のデジタルコンテンツへの アクセスを提供するための重要な技術となっています。しかし、現在、 一般的に使用されているTTSエンジンや動作環境全体で、TTSが生成した出力を 正しく提示できるようにコンテンツをマークアップする方法はありません。
本公開文書では、ユーザーが使用することを選択する可能性のある動作環境 (または支援技術)に関係なく、コンテンツ 作者がHTMLコンテンツの信頼できる 発音を実現できるようにするための2つのマークアップ手法を示します。各手法は、 一貫した結果をもたらすことが実証されています。どちらの手法を W3Cによる規範的な勧告ステータスへ 進めるべきかを判断するため、作者および実装者からのフィードバックを求めています。
各候補手法は、Speech Synthesis Markup Language(SSML)のサブセットに基づいています。選択した サブセットは、あらゆる支援技術および 動作環境全体で、音声提示に一貫性と予測可能性をもたらすよう 慎重に選定されています。本公開文書で説明する2つの技術的手法はいずれも、SSMLが ネイティブHTML技術になることを妨げてきた行き詰まりを慎重に 回避しているため、一般に適用可能であるはずです。ここで説明するいずれの手法も、 支援技術に関する要件を満たし、HTMLコンテンツを音声形式で 消費し提示する音声 アシスタントにも有用です。 Webコンテンツの音声提示のあらゆる応用にわたって、どの手法が最も実装しやすいかについて フィードバックを求めています。
このセクションでは、この 文書の公開時点におけるステータスについて説明します。他の文書が この文書を置き換える可能性があります。現在のW3C公開文書の一覧および この技術報告書の 最新リビジョンは、 W3C技術報告書 インデックス( https://www.w3.org/TR/)で確認できます。
この文書は、Pronunciation Task Forceにより、Accessible Platform Architectures Working Groupの First Public Working Draftとして公開されました。 この文書は、W3C勧告になることを意図しています。
この文書は、テキスト読み上げ(TTS) 合成がHTMLコンテンツを適切に発音できるようにするための規範的仕様およびベストプラクティスのガイダンスを提供します。この更新版作業草案は、Speech Synthesis Markup Language(SSML)を使用して、作者が制御するHTMLコンテンツの発音のための2つの可能な 技術的手法を説明します。いずれの手法もアクセシビリティ要件を満たします。しかし、広く適用可能な手法を確立することを目指しています。そのため、Task Forceはこれらの手法について、特に ここで説明するオーサリング技法を聴覚的 提示へ変換するコンテンツ作者および実装者から、さらなる意見を求めています。
コメントするには、W3C pronunciation GitHubリポジトリで課題を提出してください。それが 可能でない場合は、public-pronunciation@w3.orgへメールを送信してください (購読、 アーカイブ)。コメントは 2021年10月30日までにお願いします。文書への進行中の更新は、公開されている編集者草案で確認できます。
作業草案としての公開は、 W3Cメンバーシップによる支持を意味するものではありません。
これは草案文書であり、いつでも他の文書によって 更新、置換、または廃止される可能性があります。この 文書を作業中のもの以外として引用することは不適切です。
この文書は、 W3C 特許 ポリシーの下で運営されるグループによって作成されました。 W3Cは、 グループの成果物に関連して行われた 特許開示の公開リストを維持しています。 そのページには、特許を開示するための 手順も含まれています。ある特許が 必須クレームを含むと 実際に認識している個人は、 W3C特許ポリシーのセクション6に従って その情報を開示しなければなりません。
この文書は、 2020年9月15日版W3Cプロセス文書に準拠しています。
このセクションは非規範的です。
このFirst Public Working Draft(FPWD)公開文書では、すべての 動作環境にわたり、併用される支援技術の有無に関係なく、 Text-to-Speech(TTS)エンジンによる正確で一貫性があり、 信頼できる発音を実現するための2つの 独立した手法を定義します。これら2つの手法のどちらが より望ましいと考えられるか、そしてその理由について、より広いコミュニティから フィードバックを得るため、現在2つの手法を公開しています。
Text-to-speechは障害のある人にとって必要であり、すべての人にとって有用です。 正確な発音は、 教育や教育評価(学生のテスト)など、多くの状況で 不可欠です。現在、多くのコンピューターやモバイル デバイスにはTTS機能が組み込まれており、障害のない人々にも、 運転中や個人用 データアシスタントとのやり取りなど、 さまざまな状況で一般的に使用されています。
W3CのWeb Content Accessibility Guidelines(WCAG)は、 正しい発音の 重要性を強調しています。
たとえば英語では、heteronymとは同じつづりでありながら 発音と意味が異なる単語であり、 desert(放棄する)とdesert(乾燥地域)などがあります。… さらに、一部の言語では特定の文字が さまざまな方法で発音されることがあります。たとえば日本語には、 複数の発音を持つ漢字のような文字があります。 … 誤って読み上げられると、コンテンツは ユーザーにとって意味をなさなくなります。 達成基準 3.1.6: 発音を理解するWCAGは正しい発音を示すための多数の回避策を提供していますが、 信頼できる技術的解決策を示すことができないため、成功基準 3.1.6をAAAとして分類せざるを得ません。
W3Cには、発音に関連する成熟した仕様が2つあります:
これらは、作者がHTML 文書に発音(および関連する音声提示)マークアップを埋め込めるようにする 技術的方法を長年提供してきましたが、SSMLの手法は複数の技術的 理由により採用されていません。また、さまざまなブラウザおよび支援 技術ベンダーからのフィードバックは、 これが有望または実行可能な手法ではないことを 示しています。したがって本仕様では、この車輪を再発明しようとはせず、 むしろSSMLをHTMLで使用することを 妨げてきた長年の技術的障壁を橋渡しします。私たちの手法は両方の 仕様に直接依存し、HTML検証で受け入れられる 属性としてそれらを包み込みます。
前述のように、2つの候補手法を特定しました:
タスクフォースは、実装者および作者に対し、これらの手法について フィードバックを提供することを奨励します。分析後、そのフィードバックは どの 手法が最終的な規範的W3C勧告になるかを判断する助けとなります。
以下のセクションには、各手法のサンプルコードが含まれます。 既存のTTS技術との比較については、音声ファイルを含む サンプルコンテンツ の例を参照してください。
data-プレフィックスを使用することは、
編集者の推奨または選好ではありません。むしろ、これはHTML
5.x仕様で定義されている、HTMLへの拡張を開発するための標準的な
手法です。
この標準に基づく開発手法により、実験的な
実装が可能になり、それがさらにこの
仕様の発展に役立ちます。
発音の問題および関連するW3C 文書についてのより詳細な導入は、Pronunciation Overviewを参照してください。
SSMLタグおよび属性をHTML属性へ変換することにより、 作者はHTML文書に発音(および関連する音声提示)を 埋め込むことができます。 作者は、サポートされるほとんどのタグを相互に組み合わせて、 複数の音声効果を適用できます。
SSMLに含まれるマークアップの大部分は、多くのコンテンツ開発者にとって
使用に適しています。
ただし、phonemeや
prosodyなど一部の機能には専門知識が必要になる場合があります。
日本の出版社は、SSMLのphoneme要素について、EPUB 3の
類似した
技法を使用しています。
Edgar Allen PoeのThe Raven:
<p data-ssml-prosody-rate="slow" data-ssml-prosody-pitch="low">
Once upon a midnight
<span data-ssml-phoneme-alphabet="ipa" data-ssml-phoneme-ph="ˈdrɪəri">dreary</span>
<span data-ssml-break-time="500ms"></span>,
while I pondered, weak
<span data-ssml-break-time="150ms"></span> and weary,<br data-ssml-break-time="500ms" />
Over many a quaint and curious volume of forgotten
<span data-ssml-prosody-rate="x-slow" data-ssml-prosody-pitch="low"> lore—</span><br />
While I nodded, nearly napping, suddenly there came a tapping,
<br data-ssml-audio-src="/soundlibrary/wood/hits/hits_11" />
As of some one gently rapping,
<span data-ssml-audio-src="/soundlibrary/wood/hits/hits_11"></span>
rapping at my chamber door.
<span data-ssml-audio-src="/soundlibrary/wood/hits/hits_11"></span>
<br data-ssml-audio-src="/soundlibrary/wood/hits/hits_11" />
<span data-ssml-prosody-volume="x-soft" data-ssml-prosody-rate="medium">
"'Tis some visitor,"
</span>
I muttered, <span data-ssml-prosody-volume="x-soft" data-ssml-prosody-rate="x-slow">
<span data-ssml-phoneme-alphabet="ipa" data-ssem-phoneme-ph="tæpɪŋ">"tapping</span>
at my chamber door—</span><br data-ssml-break-time="750ms" />
Only this <span data-ssml-break-strength="weak"></span> and nothing
<span data-ssml-break-strength="none"></span>
<span data-ssml-prosody-volume="soft" data-ssml-prosody-rate="75%"> more."</span>
</p>
data-ssml-*
複数属性セット
これらの属性は、対応するSSMLと機能的に等価なものを 提供します。これらの属性は、次のHTML要素で 有効です:
data-ssml-say-as(-*)
作者が要素のテキストコンテンツを分類できるようにします。
属性は、SSML
say-as要素および関連するプロパティから派生しています。
interpret-asは余分であり、
暗黙的であるべきと思われますdata-ssml-say-as
値:
date | time | telephone | characters | cardinal | ordinal
data-ssml-say-as-format(任意)
値: W3C Note、
SSMLの
say-as属性値で定義される時刻/日付形式。SSML 1.0
say-as
属性
data-ssml-say-as-detail(任意)
値: W3C Note、SSML
say-as
属性値で定義されるdetail。SSML
1.0 say-as属性
data-ssml-say-as-detail属性により、作者は
実装固有のTTSエンジンの機能または挙動を
対象にできます。
According the 2010 US Census, the population of <span data-ssml-say-as='characters'>90274</span>
increased to 25209 from 24976 over the past 10 years.
data-ssml-phoneme-*
音素/音声的な発音のための2つの必須属性を定義します。
phoneme属性を持つ要素は、
テキストのみを含むことができます(要素は含められません)。これらの
属性は、SSML
phoneme要素および関連するプロパティから派生しています。
data-ssml-phoneme-ph値: 音素文字列。
data-ssml-phoneme-alphabet値: 使用される音声記号体系。ipa | x-sampa
Once upon a midnight <span data-ssml-alphabet="ipa" data-ssml-phoneme-ph="ˈdrɪəri">dreary</span>
data-ssml-sub-alias
発音のためにテキストコンテンツを置き換える文字列値です。
aria-labelと似ていますが、aliasは
つづり(すなわち点字ディスプレイ)を変更しません。
さらに、alias属性はアクセシビリティ
ツリーにアクセスしないTTS技術でも
使用できます。プロセッサーはalias
値にテキスト正規化を適用するべきです。この属性は、SSML
sub要素および関連するプロパティから派生しています。
値: 置換され、提示のためにTTSへ 渡されるテキスト文字列。
<span data-ssml-sub-alias="Sodium Chloride">NaCL</span>
data-ssml-voice-*
話者音声の変更を要求する生成値を定義する
属性の集合です。voice要素には2種類の属性があります。
1つは音声の望ましい特徴を示す属性、
もう1つは挙動を制御する属性です。
これらの属性は、SSML
voice要素および関連するプロパティから派生しています。
data-ssml-voice-gender(任意)
値: female | male | neutral
data-ssml-voice-age(任意)値: 年齢(年単位)に対応するinteger
data-ssml-voice-variant(任意)値: 数値の音声バリアントを示すinteger
data-ssml-voice-name(任意)
値: 現在のTTSエンジンに要求する特定の音声名
(例:
"David")。
data-ssml-voice-languages(任意)値: この音声で読み上げられる1つ以上の 言語を空白区切りで列挙したstring。
data-ssml-voice-languages属性は、
TTSエンジンが適切な音声を選択するのを支援するだけです。
コンテンツの言語を示すものではありません。言語を指定するには、
HTMLの
lang属性を使用してください。
She said, "<span data-ssml-voice-gender="female">My name is Marie</span>".
data-ssml-emphasis-level
テキストコンテンツを
強調して(prominenceまたはstressとも呼ばれます)
読み上げるよう要求します。これは単一の属性であり、
SSML
emphasis要素および関連するプロパティから派生しています。
値: strong | moderate | none | reduced
Please use <span data-ssml-emphasis-level="strong">extreme caution.</span>
data-ssml-break-*
トークン間のポーズまたはその他の韻律的境界を
制御するため、空要素に関連付けられるタイミングを
記述します。任意のトークン対の間でbreak属性を使用することは
任意です。要素がトークン間に存在しない場合、
合成
プロセッサーは、言語的
文脈に基づいて自動的にbreakを判断することが期待されます。
これらの属性は、SSML
break要素および関連するプロパティから派生しています。
data-ssml-break-strength
値:
none | x-weak | weak | medium (default) | strong | x-strong
data-ssml-break-time値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
Take a deep breath,<span data-ssml-break-time="1s"></span> and exhale.
data-ssml-prosody-*
音声出力のピッチ、読み上げ速度、音量の制御を
許可します。これらの属性は、SSML
prosody要素および関連するプロパティから派生しています。
data-ssml-prosody-pitch(任意)
値:
frequency-value"Hz" | +/- change value | "x-low" | "low" | "medium" | "high" | "x-high" | "default"
data-ssml-prosody-contour(任意)値: SSML 1.1勧告で定義される輪郭変化パラメーターの string。
data-ssml-prosody-range(任意)値: SSML 1.1 勧告で定義されるrange値のstring。
data-ssml-prosody-rate(任意)
値:
non-negative-percentage% | "x-slow" | "slow" | "medium" | "fast"| "x-fast" | "default"
data-ssml-prosody-duration(任意)値: 時間継続時間(例: "250ms"、 "1s"など)を含むstring。
data-ssml-prosody-volume(任意)
値:
+/- soundlevel>"dB" | "silent" | "x-soft" | "soft" | "medium" | "loud" | "x-loud" | "default"
The tortoise, said (slowly) "<span data-ssml-prosody-rate="x-slow">
I am almost at the finish line</span>."
data-ssml-audio-*
合成音声出力と組み合わせた録音済み音声ファイルの挿入を
サポートします。
要素は空でもかまいません。要素が空でない場合、
音声文書が利用できないときには、その内容が読み上げられるべきです。
これらの属性は、SSML
audio要素および関連するプロパティから派生しています。
data-ssml-audio-src値: 適切なメディア ファイルを持つ文書のURI。
data-ssml-audio-fetchtimeout
(任意)
値: 時間継続時間(例: "250ms"、 "1s"など)を含むstring。
data-ssml-audio-fetchint(任意)
値: safe | prefetch
data-ssml-audio-maxage(任意)値: string
data-ssml-audio-maxstale(任意)値: string
data-ssml-audio-clipBegin(任意)値: 時間継続時間(例: "250ms"、 "1s"など)を含むstring。
data-ssml-audio-clipEnd(任意)値: 時間継続時間(例: "250ms"、 "1s"など)を含むstring。
data-ssml-audio-repeatCount(任意)値: 音声クリップを繰り返す回数を示す integer。
data-ssml-audio-repeatDur(任意)値: 時間継続時間(例: "250ms"、 "1s"など)を含むstring。
You will hear a brief chime <span data-ssml-audio-src="/audio/chime.ogg"></span>
when your time is up.
SSMLタグおよび属性をJSON文字列 値を持つ単一のHTML属性に変換することにより、 作者はHTML文書に発音(および関連する音声提示)を 埋め込むことができます。 作者は、サポートされるほとんどのタグを相互に組み合わせて、 複数の音声効果を適用できます。
SSMLに含まれるマークアップの大部分は、多くのコンテンツ開発者にとって
使用に適しています。
ただし、phonemeや
prosodyなど一部の機能には専門知識が必要になる場合があります。
この手法は、
IMS
Question & Test Interoperability(QTI)Specificationに準拠するコンテンツを変換する手段として生まれました。QTI
標準は、教育評価で使用されるTTSツールのために、HTMLにSSMLを含めることを
サポートしています。
Edgar Allen PoeのThe Raven:
<p data-ssml='{"prosody":{"rate":"slow","pitch":"low"}}'>
Once upon a midnight
<span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"ˈdrɪəri"}}'>dreary</span>
<span data-ssml='{"break":{"time":"500ms"}'></span>,
while I pondered, weak
<span data-ssml='{"break":{"time":"150ms"}'></span> and weary,
<br data-ssml='{"break":{"time":"500ms"}' />
Over many a quaint and curious volume of forgotten
<span data-ssml='{"prosody":{"rate":"x-slow","pitch":"low"}}'>lore—</span><br />
While I nodded, nearly napping, suddenly there came a tapping,
<br data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'/>
As of some one gently rapping,
<span data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'></span>
rapping at my chamber door.
<span data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}'></span>
<br data-ssml='{"audio":{"src":"/soundlibrary/wood/hits/hits_11"}}' />
<span data-ssml='{"prosody":{"volume":"x-soft","rate":"medium"}}'>
"'Tis some visitor,"
</span>
I muttered, <span data-ssml='{"prosody":{"volume":"x-soft","rate":"x-slow"}}'>
<span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"tæpɪŋ"}}'>"tapping</span>
at my chamber door—</span><br data-ssml='{"break":{"time":"750ms"}'/>
Only this<span data-ssml='{"break":{"strength":"weak"}'></span>
and nothing<span data-ssml='{"break":{"strength":"none"}'> </span>
<span data-ssml='{"prosody":{"volume":"soft","rate":"75%"}}'>more."</span>
</p>
data-ssml
属性、プロパティ、および値
以下のプロパティが定義され、対応するSSMLと 機能的に等価なものを 提供します。
data-ssmlは、SSMLと機能的に等価なものを提供します。
この属性は、次のHTML要素で
有効です:
data-ssml属性の値は、単一引用符(')で囲まれた
JSON文字列であり、
特定のSSML関数を表す単一のJSONオブジェクトを
1つ以上のプロパティ/値ペアとともに含みます。
有効なオブジェクト、プロパティ、および
関連する値は、以下のセクションで定義されます。
JSONスキーマは付録Aに示されています。
say-as
作者が要素のテキストコンテンツを分類できるようにします。JSON
定義は、SSML
say-as要素および関連するプロパティから派生しています。
interpret-as
値:
date | time | telephone | characters | cardinal | ordinal
format(任意)
値: W3C Note
SSML
say-as属性値で定義される時刻/日付形式。
detail(任意)
値: W3C Note SSML
say-as
属性値で定義されるdetail。
detailプロパティにより、作者は
実装固有のTTSエンジンの機能または挙動を対象にできます。
According the 2010 US Census, the population of
<span data-ssml='{"say-as":{"interpret-as":"characters"}}'>90274</span>
increased to 25209 from 24976 over the past 10 years.
phoneme
音素/音声的な発音のための2つの必須属性を定義します。
phoneme属性を持つ
要素は、テキストのみを含むことができます(要素は含められません)。
JSON定義は、SSML
phoneme要素および関連するプロパティから派生しています。
ph値: 読み上げられるコンテンツに対応する 音声文字を含むstring
data-ssml-phoneme-alphabet
値: ipa | x-sampa。ph文字列で
使用される音声記号体系を定義します
Once upon a midnight
<span data-ssml='{"phoneme":{"alphabet":"ipa","ph":"ˈdrɪəri"}}'>dreary</span>
sub
alias属性値内のテキストが、発音のために
テキストコンテンツを置き換えることを示します。必須のalias
プロパティは、テキストコンテンツの代わりに読み上げられる
文字列を指定します。
プロセッサーはalias値にテキスト正規化を適用するべきです。
JSON定義は、SSML
sub要素および関連するプロパティから派生しています。
alias
値: subが適用される
要素のテキストコンテンツの代替として
読み上げられるテキストを含むstring。
<span data-ssml='{"sub":{"alias":"Sodium Chloride"}}'>NaCL</span>
voice
話者音声の変更を要求します。voiceには
2種類の属性があります。1つは音声の望ましい特徴を示すもの、
もう1つは挙動を制御するものです。JSON定義は、
SSML
voice要素および関連するプロパティから派生しています。
gender(任意)
値: female | male | neutral
age(任意)値: 年齢(年単位)に対応するinteger
variant(任意)値: 数値の音声バリアントを示すinteger
name(任意)
値: 現在のTTSエンジンに要求する特定の音声名を
定義するstring。例:
"Microsoft David (English)"
languages(任意)値: この音声で読み上げられる1つ以上の 言語を空白区切りで列挙したstring。
voice > languagesプロパティは、
TTSエンジンが適切な音声を選択するのを支援するだけです。
コンテンツの言語を示すものではありません。言語を指定するには、
HTMLのlang属性を使用してください。
She said, "<span data-ssml='{"voice":{"gender":"female"}}'>My name is Marie</span>".
emphasis
emphasisが適用される要素のテキストコンテンツを
強調して(prominenceまたはstressとも呼ばれます)
読み上げるよう要求します。JSON定義は、SSML
emphasis要素および関連するプロパティから派生しています。
level
値: strong | moderate | none | reduced
Please use <span data-ssml='{"emphasis":{"level":"strong"}}'>extreme caution.</span>
break
トークン間のポーズまたはその他の韻律的境界を
制御するため、空要素に関連付けられるタイミングを
記述します。任意のトークン対の間でbreakを
使用することは任意です。要素がトークン間に存在しない場合、
合成プロセッサーは言語的文脈に基づいて
自動的にbreakを判断することが期待されます。JSON
定義は、SSML
break要素および関連するプロパティから派生しています。
strength
値:
none | x-weak | weak | medium (default) | strong | x-strong
time値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring(s=秒、ms=ミリ秒)
Take a deep breath,<span data-ssml='{"break":{"time":"1s"}}'></span> and exhale.
prosody
音声出力のピッチ、読み上げ速度、音量の制御を許可します。
このオブジェクトには6つのプロパティがあります。JSON定義は、
SSML
prosody要素および関連するプロパティから派生しています。
pitch
値:
frequency-value"Hz" | +/- change value | "x-low" | "low" | "medium" | "high" | "x-high" | "default"
contour値: SSML 1.1勧告で定義される 輪郭変化パラメーターのstring
range値: SSML 1.1勧告で定義されるrange値の string
rate値:
non-negative-percentage% | "x-slow" | "slow" | "medium" | "fast"| "x-fast" | "default"
duration
値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
volume値:
+/- soundlevel>"dB" | "silent" | "x-soft" | "soft" | "medium" | "loud" | "x-loud" | "default"
The tortoise, said (slowly) "
<span data-ssml='{"prosody":{"rate":"x-slow"}}'>I am almost at the finish line</span>."
audio
合成音声出力と組み合わせた録音済み音声ファイルの挿入を
サポートします。
要素は空でもかまいません。要素が空でない場合、
音声文書が利用できないときには、その内容は
読み上げられるテキストであるべきです。JSON定義は、SSML
audio要素および関連するプロパティから派生しています。
src値: 適切なメディア ファイルを持つ文書のURI。
fetchtimeout値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
fetchint
値: safe | prefetch
maxage値: string
maxstale
値: string
clipBegin
値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
clipEnd値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
repeatCount値: 音声クリップを繰り返す回数を示す integer。
repeatDur
値: "250ms"、"1s"など、数値形式で表された 時間継続時間を含むstring。
You will hear a brief chime
<span data-ssml='{"audio":{"src":"/audio/chime.ogg"}}'></span> when your time is up.
各手法において、実装者はdata-ssml-
属性、値、
および関連するテキストコンテンツを処理して、
対象のTTS技術で必要とされる有効な形式を生成しなければなりません。
たとえば、Web Speech APIを対象にする場合、
実装は有効なSSMLを生成しなければなりません。各発音
関数のテキストコンテンツをどのように判断するかは、
どちらの手法の実装者にとっても課題となります。
複数属性手法に従う場合、実装者はすべての 関連属性を見つけ出し、 それらを適切なSSML表現へ収集しなければなりません。実装者は、 必須属性の欠落、 競合する関数、 または無効な値などのオーサリングエラーをどのように扱うかを 判断しなければなりません。
単一属性手法に従う場合、実装者はJSON
文字列値を解析しなければなりません。
HTMLの属性値としてJSON文字列を使用する既存の
W3C勧告はありませんが、
data-属性を使用するカスタムアプリケーションでの
使用例は確認されています。
JSONには 潜在的なセキュリティ上の懸念があり、オーサリングのエラーから生じる 不正なJSON文字列の影響は、 より広いレビューを必要とする問題の1つです。 実装者は、不正なJSONだけでなく、 不正なプロパティと 値の組み合わせをどのように扱うかを判断しなければなりません。 JSONスキーマの使用は、 単一属性手法の作者および実装者の助けとなる可能性があります。
JSONスキーマは提案されていますが、 SpeakableSpecificationのような 開発中の関連 標準が存在する可能性があります。 SSMLを適切なJSONスキーマへ変換することは、 実装者および作者に混乱を 引き起こす可能性があります。多くの場合、そのような変換は 「...完全に1対1の変換ではないが、非常に非常に近い」ものです。 オーサリングツールは、 作者がJSONを直接記述する必要をなくすことで、 これらの懸念に対処すると仮定されています。
こちらのJSON スキーマ例を参照してください。
このセクションは非規範的です。
以下の人々がこの文書の開発に貢献しました。