Web 関連仕様 日本語訳
このページ は、
Web プラットフォーム関連の様々な仕様の日本語訳の一覧と,
それらの日本語訳に共通な事項についての説明です。
これらの翻訳の正確性は保証されません 。
これらの仕様の公式な文書は英語版であり、
日本語訳は公式なものではありません。
誤訳が無いことは保証されません。
[
当の仕様の策定者たちが想定している/当の仕様に期待されている
]意味論を完全かつ正確に反映することは保証されません。
翻訳なので、
語彙レベルで原文と正確に一致する意味を表すことは決してありません。
日本語は自然言語なので、
誰がいつどこで読んでも同じ解釈になることは保証されません。
)(
実際に誤訳が見つかることも時折あります。
それらについては見つかり次第修正され,
加えて用語の対訳や言い回しなども時折修正されるので、
これらの翻訳が「完成」する日は永遠に来ません。
逆に原文仕様が誤っていることもあり、
明白な誤りと見受けられるものなど,日本語訳にて修正している箇所もあります。
一部の仕様は日々更新され続けているので、
日本語訳は最新版と一致していないこともあります
— 特に,
WHATWG
による Living Standard ( “生きた標準” )/
W3C
による Editor's Draft ( “編集者草案” )。
原文の更新に伴う和訳の更新の際に,取り込み漏れがあるかもしれません。
その完全性は保証されませんが、
ツールを利用して不定期に検証してはいます
— 多数の更新が積み重なったときなど
( RFC 文書, W3C 勧告については、
原文の更新は無いので,原文テキストとの差分は検査済み)。
ほとんどのページは、
スクリプトのサポートと有効化( ES 6 以上)が必須です
— タイトルを除く内容すべてがスクリプト( JavaScript )により生成されているので
(この背景色のものだけそうでない )。
[
CSS / DOM / HTML
]のサポートが古いブラウザでは、
表示が崩れたり,一部の機能が働かないかもしれません。
古過ぎるブラウザ(すべての IE を含む)では表示すらされないでしょう
— 他のブラウザをご利用ください。
ほぼすべてのページは、
仕様のメタ情報を,タイトルの下に 次のようなクリックで開閉できる UI ( details
要素)で呈示しています:
この日本語訳は非公式な文書です(翻訳更新: <日付> )
ここには、
当の日本語訳が元にしている原文についてや, 定型的な事項など,翻訳に関するメタ情報が記される。
日本語訳の更新履歴を指すリンク(例:このページの更新履歴 )も,ここに挙げられる。
“翻訳更新” の日付は、
概ね,実質的な内容が変化した場合に限り,更新される。
マークアップの編集, 表記上の整理, 言い回しを等価に違える程度では、
更新されない(が,翻訳の誤りを訂正した場合は更新される)。
また、
原文の更新を反映した場合も,
同様に小さな編集(マークアップや綴りの修正)やメタ情報のみの場合は更新されないので、
原文の更新日より過去になることもある。
この文書についての詳細
ここには、
原文の冒頭に記されているメタ情報が,ほぼそのまま記される。
原文やその更新履歴, メーリングリスト, テスト一式, 実装報告, その他を指す URL など。
便宜のため、[
原文に記されていない/他所に記されている
]メタ情報を追加することもある。
©
ここには、
原文の著作権情報が記される
(が、仕様によっては,他所に記されることもある)。
索引など
ここには、
仕様内に記された課題( issue ),
定義されている IDL やプロパティ, 等々
を巡回するための UI が示される
(多くの原文には,それらに対応する索引節があるが、
和訳では省略して このような UI に代えている)。
Github リポジトリ
から全ファイルを一括ダウンロードできます(冒頭にある "Clone or download" から "Download Zip" を選ぶ)。
各ページに共通な表記規約
以下に述べる表記規約は原則であり,ページ間で多少異なることもあります。
スタイル
リンクは、次の3種の下線スタイルで呈示されます:
英文仕様を指すリンクのうち一部では、[
マウスを重ねたとき/フォーカスしたとき
]に,リンク先文書の【日本語訳】 へのリンクも追加で表示されます
(日本語訳はバージョンが異なっていたり,部分訳の場合もあります)
。
見本コードなどのコードブロック( pre
)において,
可用な幅に収まり切らない行は、
自動改行して呈示されます。
同様に,可用な幅に収まり切らない画像は、
収まるよう縮小して呈示されます。
その他のスタイルは、
原文のそれを残しているものもあれば,
まったく違えているものあります。
例えば、
マージンや行間を日本語に適したスタイルに改めたり,
各 仕様で一貫するよう別のスタイルに置換するなど。
マークアップ
基本的には,原文に即する様にしてありますが、
次に挙げる理由から,利用するマークアップ構造を改めている箇所もあります:
これらが翻訳結果の構成に大きく反映され、
見かけ上,原文と乖離する場合もときどきあります。
約物,記号類
[
曖昧さや多義性を抑制する/視認性を改善する
]目的で、
句読点, 記号, 括弧類, その他の約物は積極的に利用しています
( 2 種類の読点の混在など,日本語の一般的慣習を意図的に破っている用法もあります)
。
これらは、
仕様が対象にしている分野に関する知識や意味論に通じていない状態でも[
文脈から推定する労力を軽減し, 内容を正確に読み取り易くする
]ためのものであり†,必ずしも[
文法的な厳密さ(解釈が常に機械的に一意に定まる,等)を備えている/
適用可能な所には常に利用している/
全ページで完全に統一されている
]とは限りません:
(†
また,訳者の[
理解度/翻訳意図
]をより鮮明に表すものでもあるので、[
解釈/翻訳
]に誤りがあれば,それをより鮮明に示すことになる —
例えば,角括弧の用法:
英語の句
“strong X or Y ”
の解釈は、
文脈に依存して,
“[ 強い X ]または[ Y ]”
が意図されている場合もあれば,
“強い[ X または Y ]”
が意図されている場合もある。)
記号
説明/用法(原則)
隅付き括弧 【 , 】
訳者による【注釈/原文の補完】 。
全角 丸括弧 ( , )
後述の全角ダッシュとは対照的に、
主として,補助的な説明や例を挿入するために利用される
(例えば、この括弧内に記した句のように)。
半角 丸括弧 ( , )
主として,地の文の中で、
アルゴリズムの入力引数, あるいは数式を括るときに利用される。
(全角と見た目の区別が付きにくいが、文脈から容易に判別できるであろう。)
全角 角括弧 [ , ]
修飾や条件などの対象範囲を明確化するための括り。
例えば、
[[列挙された多数の語句]や長い語句]を文の中で一体として扱うとき,
あるいは 読点の結合順位(後述)だけでは不足する場合など
(例えばこの文では、
内側の [, ]により “列挙された” が “長い語句” にかからないようにした上で,
“一体として扱われる” 対象を明確化するために外側の [, ]で括っている)。
特に必要がない所でも,同じパターンが繰り返されるときは、
パターンを強調するために利用されることがある。
また、長文の構造を読み取り易くする際にも利用される。
(これは、[
話し言葉のように一息に話すことにより,ひとまとまりを表現するような柔軟性
]を,多少なりとも書き言葉に付与するためのものでもある。
また、
書き言葉であるからして,発音できない各種記号を使わない手はないであろう
— 語句の順序を 論理的な流れを追い易いものに保ちつつ,曖昧さを排除するためにも。
厳密さを追求するなら、
記号に頼らず,あらゆる関係構造をマークアップに落とし込んだ上で,
CSS で呈示に反映させるのが理想であろうが。)
全角コロン ": "
コロンの前の語句に,後続の文やブロックでその説明や定義を与える(特に,説明が長くなる場合)。
句点 "。 "
句点は "。" に統一。
全角読点 "、 ",
全角カンマ ", ",
半角カンマ ", "
結合度の低い順に,左の3種類が読点として利用される。
結合度が全角読点の一種類で済む場合でも、
連続性が強い所では,カンマが利用される。
また,半角カンマ(+半角スペース)は、
文脈の中で等格な[
語句/キーワード
]を列挙する際に特に利用される。
(これらは,実質的に “[ , ] ” の略記と見なせることが多い。)
全角ダッシュ " — "
この文のように,長めの語句を挿入する所
— 丸括弧が補助的な説明を挿入するのとは対照的に,規範的な語句を挿入するときなど —
では、
2 個のダッシュで括られる。
この文のように,二つの文の関連性を明示する所では、
1 個のダッシュで繋げられる
— 最初の文を句点で区切る代わりに。
(全角ダッシュ文字には
U+2015 ( HORIZONTAL BAR )
ではなく,
U+2014 ( EM DASH )
が利用される。)
全角スラッシュ "/ "
並立的な列挙:
例えば,
“a/b は C である”
は、
“a は C であり, b も C である”
の省略記法。
あるいは,
“ x = y/z ならば P である”
は、
“x = y ならば P であり,また, x = z ならば P である”
の省略記法。
別の言い方をするなら、
“a/b” は[
a, b
]の総称を表す
(すなわち、
a も b も同じように扱う
— ある用語 T が
“a, または b である”
と定義されているならば、
“a/b” は “T” と記されても同じことになる。)
(英文における “or” に対応するとは限らない。
例えば、
“Y and Z use X”
は
“[ Y / Z ]は X を利用する”
と等価になる
— 論理的には、
Y, Z について個別的に述べるのと同じことなので。
仮に,この “use” が三人称単数を表す “uses” であったなら、
Y, Z が成す一組としての扱いが意図されることになり,
“[ Y, Z ]が成す組は …”
などと訳されることになろうが。
また,
“Y or Z uses X”
は、
“[ Y, Z ]のどちらかが X を利用する”,
などと訳されることになろう。)
対応関係の明示:
例えば,
“a/b/c は A/B/C である”
は、
“a は A であり, b は B であり, c は C である”
の省略記法( “a は B である” 等は除外される)。
この対応関係の範囲は、
特に断らない限り,同じ文の中(すなわち,句点まで)に限られる。
(同順に対応する事例の方が,ずっと多いので、
同順を既定にしている。
同順に限られない場合、
“順不同” が付記される。)
半角カンマの代わりに利用される,等格な語句の区切り
(視認性の向上,あるいは 語句に読点が含まれているときなど)。
複数表現を孕む場合、
角括弧による表記法の相違に注意されたし。
例えば、
“ N 個の[英字/数字]からなる”
と記された所では,英字と数字が混在し得ることを表す一方で、
“[ N 個の英字/ N 個の数字 ]からなる”
と記された所では,英字か数字どちらかのみからなることを表す。
半角スペース
“小さな” 区切り:
[英単語, キーワード, 埋め込みコード類]等と 地の文との区切り
読点の結合度の順位数が足りない場合の補助
読点の挿入が不適切な所での、
文節の区切り
(例:
“〜の間 存続する” のように漢字が連続する地点, あるいは
“〜により近づく” のような多義的な解釈
( “〜により,近づく” / “〜に,より近づく”)
が生じる所での一義化)
より連続性が重視される所での,読点の代わり
同じパターンが繰り返される場合の,読点の省略形
[
連続する熟語/連続する外来語
]が長くなるときの区切り
(例: “リクエスト ヘッダフィールド” など
— このような場合、
意味構造をなるべく保つため,
“ヘッダ” と “フィールド” の合間にはスペースは挟まれない)
二重引用符:
(曲線型) “ …”
(半角) " …"
“曲線型” の方は、
通常の引用符
(説明用の[
比喩的/概念的
]な記述など)。
“半角” の方は、
仕様が規定するリテラルや記号類, 例示コード類の括りなど,
意味よりも文字列そのものの[
同一性/忠実さ
]が重視される所で利用される。
これらの記号を多用する理由は、
(前提として多義的に解釈されては困る)仕様の記述には,次に挙げるような資質があるため、
文脈から意味構造を一義的に決定するのが難しくなる傾向があることによる
(例えば
「黒い目のきれいな女の子 」
):
専門性が高いので、
初学者にとっては,初見の用語が数多くある
あらゆる事例に対処するため、
条件など様々な修飾が多用される
(したがって,文の構造も複雑になる)
前項と同じ理由で, あるいは
将来の拡張能を担保するため、
抽象的な用語が多用される
(例:いくつかの具象的な何かの総称として)
様々な処理を適用する結果,[
動作が表す意味と実際に現れる結果が合致しない例外的な場合もある
]ことが “普通” なので、
断定的な表現より,間接的な表現が多用される( “〜になり得る”, 等々)
Web に関係する仕様の大きな特質として,[
旧い仕様に基づいて作成された既存の内容
]との互換性を保つ必要があるため、
何層にも重ねられた複階的な要件が数多くある。
言語を規定するメタ言語的な側面もあるので、
遠回しな(入れ子にされた)表現が多用される
( “〜になるように〜することを確保しなければならない”, 等々)
説明などの補助的な内容は最小限に抑えられていたり,
互いに関連する内容が様々な[
箇所/仕様
]に分散しているため、
“ストーリー” に乏しい
(それら各内容からなる無数の組み合わせのそれぞれが “ストーリー” を構成するので、
“代表的な一つ” に絞れないことも多い)
RFC 2119 が規定する句に利用される対訳
どの和訳においても、
要件レベルを表す語句には,次に挙げる対訳を利用しています:
原語
対訳
要件レベル
MUST
〜するものとする ( UA 要件 ) / 〜しなければならない
(a)
MUST NOT
〜しないものとする ( UA 要件 ) / 〜してはならない
(a)
SHALL / SHALL NOT
MUST と同じ (*1)
(a)
REQUIRED
要求される (*2)
(a)
SHOULD
〜するべき である (*3)
(b)
SHOULD NOT
〜するべき でない/ 〜しないべき である
(b)
RECOMMENDED
推奨される
(b)
MAY
〜してもよい (*4)
(c)
OPTIONAL
任意選択 /
省略可能な〜 (*5)/
省略時は〜 (*5)
(c)
この表の要件レベル列の:
(a) は絶対的な要件
(b) は特別な理由が無い限り守るべき要件
(c) は字義どおり任意に選択できること
を意味する。
詳細は
RFC 2119
(日本語訳 )
を見よ。
これらの要件が課される主体は、
IETF 文書( RFC や Internet-Draft など)においては,一般にネットワーク通信の参加者
(クライアント, サーバ, プロキシなど)
であり、
他の文書においては,概ね次に分類される:
[
MUST / MUST NOT
]用の対訳 “ものとする” は、
実装者( UA など)に課される要件を述べるときに限り利用され、
IETF 文書には利用されない。
(IETF 文書以外の ほとんどの仕様は, UA 要件が大部分を占めるので、
頻度としては “ならない” よりずっと多いが、
表現上の都合により,少数の UA 要件には “ならない” も利用される
— 例:当の要件が課される主体が UA の他にもある場合など。)
原則として、
上に挙げた以外の対訳は利用していません(*6) 。
逆に、
他の句に上に挙げた対訳を利用することも避けています。
ただし,小文字の “must” 等は、
これらの語に大文字表記(またはマークアップ)を[
利用していない仕様 /
利用していないが RFC 2119 の意味の下で利用されていると考えて差し支えない所
]では、
マークアップを施さないまま,同じ対訳にしています。
(*1)
SHALL が現れることは滅多にない。
現れたとしても,和訳では MUST と同じに表記する
— 実質的に同じ意味なので。
(*2)
対して,“必要になる”, “要する” などは、
必然的に要件とされる(選択の余地がない/外部から要求されている)ことを表すときに利用される。
(この種の句に “必要” という語を利用しない理由は、
“need”, “necessary”, “have to”
などの対訳に必要になるからである。)
(*3)
ごく少数だが, “ought to” の対訳に(客観性を表す)受動的な表現 “〜されるべき” を利用することがある。
(*4)
(特に小文字の) “may” に関しては,
単に可能性を表す場合も多く、[
“〜することがある” 等の訳が適切になる場合/
両義的に受け取れる場合
]も多々あり、
そのように訳していることも多い
( “might” が実質的に “MAY” の意味に受け取れる場合もある)。
可能性を表す “can” や “may” は、
実際には,仕様の読者(実装者/ページ作者/他の仕様の策定者)に応じて訳を違えるべき場合が多く、
あらゆる読者に対応するためには,
“… UA 実装者にとっては 〜 され得る, または ページ作者にとっては 〜 できる”
のように記さなければならないことになるが、
それではあまりに煩雑になるので,そこまで対処してはいない。
(*5)
“optional”(または “optionally” )は、
仕様が定義する[
アルゴリズム/
API 用の手続き
]の省略可能な引数によく利用される。
これらは、
通例的に,[
“省略可能な 〜”,
あるいは引数の直後に丸括弧付きで “(省略時は X)”
( X は省略された場合にとるものとされる既定の値)
]と記される
— これは、[
そのアルゴリズムを利用する(当の, または他の)仕様/
その API を利用する作者
]にとっての “任意選択” を意味することになる。
(*6)
日本語表現の都合により,
同じ要件レベルを表す等価な句に変えることはたまにある。
また、
要件を対応する句とともに論理的な否定に置換して,
等価な表現に言い換えることもある
(例: “〜以外に設定しなければならない” → “〜に設定してはならない” )。
共通な慣用表現
多くの仕様では,以下に挙げる慣用句を利用しています(括弧内は原文の表現):
“各 O には P が結び付けられる
( O has an associated P )”
“〜を有する” / 〜の” / “〜に属する”
この句には、
一般に,次が含意される:
O は、
何らかの分類
(クラス, 型, 何らかの性質を満たすものの集合, 等々)
— 以下 C と記す —
に属する,任意の(所与の)個体(インスタンス)である。
(分類が,ある IDL インタフェース型 Foo
として指示される場合、
O は “Foo
オブジェクト” と称されることが多い
— この場合、
C は Foo
インタフェースを実装するオブジェクトの集合を表すことになる。)
P は、
何らかの分類(を表す名前)である。
分類 C を成す個体の集合から分類 P を成す個体の集合への,名前 P の対応関係(写像)が存在するものと規定される
( “O は、名前 P の対象を有する” )。
より形式的に述べるなら、
次のように規定されると解釈すればよいであろう:
C に属する任意の個体 O に対し,次の両者を満たすような個体
V がただ一つ存在する:
V は P に属する
順序対
( O , V )
は,関係
< C , P >
を満たす
そのような V を指すときは、
“ O に結び付けられている P ”,
あるいは略して
“ O の P ”
とも記される。
“結び付け” による対応関係は、
しばしば,[
C に属する一部の個体に対しては定義されない
]ものと規定される場合もある(
“O は P を有さない”
)。
そのような所では、
“結び付けられ得る ” という句が利用される
— あるいは “有さない” ことを[
P が値 null も含むようにした上で,
“O は P として値 null をとる”
]ことで表現する場合も多い。
仕様には明文化されないことが多いが、
この結び付けは “専属的” な関係を含意することもある
— すなわち, P に属する所与の個体 V に対し,関係
< C , P >
を満たす C に属する個体 O は、
あっても 1 つに限られる。
一方で,該当しない場合もあり、
この区別は文脈から判別する必要がある。
結び付けによる関係が専属的であれば、
V から それを結び付けている O が一意に定まり、
V に変更が加えられても, C に属する他の個体には影響しないことになる。
専属的でない場合( C に属する複数の個体が,同じ V を共有し得る)、
そのことを明らかにする目的で,和訳では
“O は V に属する ”
という句で表現することもある。
この場合、
O に対応する V を指すときは,
“O が属する P ”
という句で表現される。
また,
V を結び付けている[
C に属する個体の集合
]を指すときは、
“V に属する O (たち)”
という句も利用される。
( “属する” という語が意味論的に相応しくなければ、
他の語を利用することもある。)
P が primitive 値 の集合である場合、
“異なる各値ごとに 1 個しか存在し得ない”
と解釈する
(そう解釈すれば、統一的に扱えるので都合が良い)。
この解釈の下では、
どの primitive 値も それを P 値にとる C に属するすべての個体から共有されることになり、
通例, “専属的” にはなり得ない。
“結び付け” と同じ, または よく似た意味で “紐付け” という語も一般によく見受けられる
— が、その “紐付け” は、
“link” / “relation” / “connect” / “bind”
など,違う意味かもしれない。
“当の〜”
[
この語が利用された文脈により,一意に識別されるべき何か
]を指すときに利用される
(多くの場合、 "the" の対訳を成す)。
primitive データ型
技術的な分類は,個々の人工言語ごとに様々な定義があろうが、
一般概念としては,[
値それ自体が 個を識別するもの としても働くデータ型
]と捉えて差し支えないと見受けられる
— すなわち,そのような 2 つの値 a , b があって “等しい” ならば、
a , b は “同じ(同じ個体)” と見なされる
(オブジェクト的には、変異不能なオブジェクトである)。
具体的には、
文字列, 真偽値, 数量的な値, 抽象的な定数など。
リスト(配列)やマップなどの複合的な型(コンテナ型)は、
基本的な型ではあるが)この捉え方においては,
primitive データ型とは見なされない
— これらは一般に,オブジェクトとして扱われ、
異なる個体は,各成分が互いに等しくても “同じ” とされない。
(文字列は、
文字たちが成す配列であるとして,複合型に分類される言語もあるが、
Web プラットフォームにおいては,一般に primitive データ型とされる。
配列として扱われる(変異可能な)文字列は、
通例的に “バッファ” , 等々と称され,文字列と区別されることが多い。)
“新たな 〜 ( [create] a new 〜 )”
“〜 ” に記された型のオブジェクト
— IDL インタフェースを実装するオブジェクト, または,仕様が規定する概念的なオブジェクト —
のインスタンスを新たに作成する(構築する)ことを意味する(すなわち,既存のどのオブジェクトとも “同じでない”
— したがって、
primitive データ型 には,この語は利用し得ない)。
その他に(暗黙的に)新たなインスタンスが作成される機会としては、
複製するとき
(例: “〜 の複製(またはクローン)” 等)/
リテラル値として与えるとき
(例: “«1, 2, 3»” は、
新たなリスト を作成する)
が挙げられる。
オブジェクトを返す一部の API には、
新たなインスタンスを返すか既存のそれを返すか明確に指定されていないものもある
(多くの場合,その種のふるまいは、
IDL にて[
[SameObject] / [NewObject]
]拡張属性を利用して指定されるか,
API を定義する注釈文にて指定されるが)。
この場合のふるまいは、
実装に依存することになる
(であろう
— 意図的に実装に委ねられていると見受けられることが多いが、
単なる指定漏れや,モデルの意味論から暗黙的に推定できる場合もあるかもしれない)。
“〜群”
この接尾辞は、
一群の何かからなるが,データ構造としては
1 個のオブジェクトとして数えられるもの
— リストやマップなど —
を簡便に記す(特定のデータ構造を指定せずに記す)ために利用される。
通例的には、英文において複数形で記される語のうち,
そのようなコンテナ型の値を表すものの対訳に利用される
(例: options は “オプション群” と対訳される)。
(他の複数形は、必要な所では
— “すべての〜”, “各〜” など,文脈から複数個あり得ることが明らかな場合を除き —
“〜たち” などと訳される)。
〜個目
〜番
index (順序付けられた連列内の,ある特定の位置を指すもの)は、
一般に,[
1 から数える場合は “〜個目”(あるいは “〜本目”, 等々)/
0 から数える場合は “〜番”
]と表記される
(例:所与の文字列 S を成す[
0 番の文字, 1 個目の文字
]は、
どちらも, S を成す最初の文字を指す)。
null
一般に,意味を有さない値であること
— あるいは単純に “無い” こと —
を意味する特別な定数を表す
(値 null をとる 2 つのものは,同じと見なされる)。
概念上は,[
抽象 null 値,
IDL null 値( IDL null 可能 型 がとり得る特別な値 null ),
JavaScript null 値,
等々
]の区別があるが、
これらは,一般に交換可能に利用される
(言い換えれば、
比較時に区別されることはない)。
ε
存在しないことを表現する特別な定数
( null と同様に、値 ε をとる 2 つのものは,同じと見なされる)。
この記号は和訳に特有であり、
アルゴリズムや定義の記述を形式化して,簡潔に述べるために導入している
— 仕様にてこの意味を表す値として明示的に null が利用される場合もあるが、
そうでない場合も多々あるので。
一部の仕様の和訳では、
仕様にて null で表現されている場合でも,
IDL とは異なる文脈下にあることを明確化するために ε を利用している。
失敗 ( failure )
アルゴリズムが返す 失敗 は、
期待される結果が得られなかったことを表現する特別な定数であり、
特に,構文解析アルゴリズムに利用されることが多い
(入力を構文解析できなかったことを指示する)。
true, false
真偽値を表す特別な定数
— true は真(条件が満たされる), false は偽(条件が満たされない)
を表現する。
概念上は,[
抽象 真偽値,
IDL boolean 型 値,
JavaScript boolean 型値
]の区別があるが、
これらは,交換可能に利用される
( null のときと同じく)。
“〜フラグ( flag )” / “〜か”
“〜モード( mode )”
“〜フラグ” または “〜か”
という名前は、
主に,[
アルゴリズム/抽象オブジェクトのふるまい
]の制御目的に利用される[
2 つの状態をとり得るもの(変数やプロパティ)
]に利用される。
3 つ以上の状態をとり得るものには、
この名称が利用されることはない
— その種の制御変数は、
“〜モード” と命名されることが多い。
フラグの状態は、
真偽値(特に, IDL boolean 型値としてそのまま API に公開されるもの)や
意味を伴う名前が付与された定数で表現されることもある一方で,
英文では[
is set ( “何か が設定されている” )/
is unset( “何も設定されてない” )
]で表現されることも多い。
が,和訳においては、
常に明示的な値
— 通例的には真偽値( true / false ) —
で表現している
(そのままだと、[
日本語/アルゴリズム表記法(次節に述べる)
]で表現するには都合が悪いので)
。
和訳では、
ほとんどの “〜フラグ” を “〜か” に改称している
— これらは、その “処理を制御する資質” から,その意味は動詞に基づくものが多く、
“〜フラグ” のように名詞化を強制すると,日本語として[
意味が曖昧になる/意味を明瞭化しようとすると まわりくどくなる
]ことが多いからである(例:
“canceled flag” は、
“取り消されたか” のように訳される
— “フラグ” を接尾するなら、
“取り消しフラグ”,
“取り消されたフラグ”, あるいは もっと冗長に
“取り消されたか否かを指示するフラグ”
のように訳すことにもなる)。
加えて,これらの真偽値をとるものは、
新たに定義される用語では “フラグ” を付与しない名前で表現される
(あるいは、既存の “〜フラグ” から “フラグ” が除去される)
ことが多くなっている。
これらの名前は
— 特に、説明文など,地の文の中では —
語尾の “か” を省いて参照されることもある
(例: “…は取り消されたならば…” )
— それは、当のフラグが true に設定されたことを含意する
(否定形で参照された場合(例: “…は取り消されなかったならば…” )は false に設定されたことを含意する)
(原文でも、 “flag” を省いた動詞だけで表現されることはよくある)
。
アルゴリズムの入力として与えられるフラグ
“〜フラグ ” や “〜か ”
は、[
語尾の[
“フラグ” / “か”
]を除いた部分を成す名前の定数, 上述の ε
]の 2 値をとり得るように定義されることもある
(当のアルゴリズムを呼び出している箇所の引数を[
true / false
]で記した場合、意味が明らかにならないので)。
また、アルゴリズムを呼び出す際に省略され得る
— その場合のフラグの値は、
原文では,暗黙的に “ε をとる” ものと(暗黙的に)見なされていることもあるが、
和訳では常に,当のアルゴリズム定義の中で明示的に省略時の値を指定するようにしている。
(英語的感覚では、 “unset” と ε は,同義と考えられる。)
オブジェクトに結び付けられている “X フラグ” (または “X か” )は、
“オブジェクトは X である”
という意味を
“X フラグ は true ”
という形に形式化して反映している場合が多い。
その種のフラグは,初期時は false をとるよう定義されることが多いが、
例外もある。
∧ , ∨ , ¬
2 つの条件に挟まれた[
∧ は論理積( “かつ” )/
∨ は論理和( “または” )
]を表す。
条件の先頭に置かれた ¬ はその否定( “でない” )
を表す。
∧ , ∨ を同時に利用する所では(条件が 3 つ以上ある場合)、
常に,どちらが優先されるかが指示される
— 括弧やマークアップによる入れ子により。
条件は、
それを適用する対象が無い場合には,真に評価される
— 条件自体が何かの有無を問うものである場合は別として。
例えば,
“集合 S を成す どのアイテムも 〜 を満たす”
の様な条件は、
“〜” が何であれ,
S が空ならば真に評価される
(これは、
有無を問う条件 “〜 を満たさないアイテムは無い” と同義でもある)。
対して,
“集合 S を成す あるアイテムは 〜 を満たす”
の様な条件は、
有無を問うものなので
( “〜を満たすアイテムが在る” と同義),
S が空ならば偽に評価される。
条件の順序は、
意味論的には,有意になることもある:
∧ の場合、
先に現れる条件が満たされない限り
( ∨ の場合、その否定が満たされない限り),
後に現れる条件が意味を成さない
— すなわち,条件を適用する対象が無い —
こともあるので
(例:[
O は foo プロパティを有する
]∧ [
O の foo プロパティの値は 〜 に等しい
]の様な条件)。
逆順に記されたとしても、
論理的には,前述したとおり同義になるが。
∧ ↓ …
∨ ↓ …
後続する条件リストに挙げられた条件たちを所与の論理演算で結合した結果の条件を表す。
これは、
¬ と組み合わせて利用されることもある。
例えば, "¬ ∧ ↓" ( ∧ ↓ の否定)は、
条件リストを成す いずれかの条件が満たされない条件を表す。
A = B
A ≠ B
= は A と B が同じであることを表す(原文 “A is B” †)。
≠ は = の否定を表す。
仕様には明文化されていないことも多いが,同じであることの定義は、
比較対象が属する型に依存する —
通例的には、比較対象が[
オブジェクトの場合は 同一のインスタンスであるとき /
primitive 値 の場合は 値が等しいとき
]同じとされる。
(複合的な型の各成分の同等性を述べるときは、
一般に,専用の用語(例:同一生成元 )や下に述べる注釈記号を利用して述べられるか,あるいは各成分を列挙して
( A1 , A2 , … ) = ( B1 , B2 , … )
のように記される。)
(† “A is a B” は、
通例 “A は B である ” と訳される。)
> , ≥ , < , ≤
(真偽条件の文脈の下で)数値の比較を表す。
{ A 〜 B }
A 以上 B 以下の範囲を表す。
したがって,
A > B の場合、
範囲は空集合になる
(そうなり得る事例は滅多にないが)。
{ … }
括弧内に挙げられた対象たちが成す集合を表す。
e ∈ S
e ∉ S
e の集合 S への所属( ∈ )を表す。
∉ はその否定を表す。
例えば
e ∈ { a , b , c , … }
は、
e が右辺に列挙されたいずれかの項と同じ( = )であることを表す。
A = 注釈記号 B
注釈記号 が付いた比較は、
その記号の定義に基づいて解釈される
(例えば
“= 大小無視 ”
は、
文字大小無視に基づく文字列の比較を表すなど)。
記号の意味は、
個々の仕様の中で定義される。
= の代わりに ≠ , ∈ なども利用される
— その論理は 注釈記号 に定義される同値関係に基づく。
+ , − , × , ÷
(数式の文脈の下で)加減乗除算を表す。
単独の[
数値/変数/数式
]に接頭された + , − は正負符号を表す。
(負符号 "− " は Unicode MINUS SIGN 。
除算は 原文では通例 "/" で記されるが、
他の区切り記号にも多用されるので,和訳ではなるべく "÷" を利用している。)
段( step )
手続き( steps )
“段” は、
手続き(アルゴリズムの本体)を構成する 1 個の ブロックを指す。
具体的には、
手続きのマークアップ表現における,有順序リスト( ol
要素)の中のリストアイテム( li
要素)で表現される 1 個のブロック(入れ子階層の末端ブロックに限らず)。
例えば “前段” は、
その “前段” と記されたブロックと同じ階層レベルにおいて その直前にあるブロックを指す。
( “手続き” は “procedure” の定訳でもあるが、
この語が現れる仕様は,ごく限られる
— 実質的に同義なので、
和訳では同じ対訳を利用している。)
手続きは、
他の手続きの中に入れ子にされることもある。
ある手続き( “上位手続き” )の中に入れ子にされた一連の段が成すブロックは、
その冒頭に “手続き” を含んでいる句(例: “次の手続きを遂行する…” )を伴うとき,
入れ子にされた手続き( “下位手続き” )であることを指示する。
加えて、並列的 に遂行するよう指示されたブロックも,暗黙的に入れ子にされた手続きと見なされる。
入れ子にされた手続きは、
上位手続きの引数や その中で宣言された変数をそのまま参照するが、
その中に現れる RETURN (次節を見よ)は,
当の手続きのみを終了させる
(値を返すものは、上位手続きに結果を返す)
( JavaScript のクロージャ関数(関数内に定義される関数)と同様にふるまう)。
下位手続き
入れ子にされた手続きは、
ときには,上位手続きの外側(概して,その直後)に記されることもある
(元々の原文にて,そう記述されていることもあれば、
長大なので分けた方が見通しが良くなるなどの理由から,和訳にてそう記述することもある)。
そのような場合、
“下位手続き” という句で,
そのことが指示される
(それらが、[
通常の独立な手続きではないこと, 上位手続きの引数や変数を参照していること
]を指示するため)。
引数 (省略時は 既定値 )
アルゴリズムを導入する記述において,その入力を成す 引数 がこのように記されている場合、[
アルゴリズムを呼び出すとき 引数 を省略できる
]こと, および[
省略された場合、
引数 には自動的に 既定値 があてがわれる
]ことを表す。
“初期化される( is initialized to )”
“初期化時の値( value it was initialized to )”
“初期化される” という句は,多くの場合、
特に IDL 属性に対する,内部(仕様が定める処理モデル)からの値の設定を記す際に利用されている
(必ずしも, “一度限り” を意味するわけではないことに注意)。
仕様が定める概念的なモデルと, IDL インタフェースを通して外部に公開されるふるまいとの対応関係を明示的に記すための語、
と解釈すればよいであろう。
“初期化時の値” は,この初期化により設定された値を指す — すなわち,初期化された値が,スクリプトなど外部から影響されないことを明示する
(言い換えれば、次項の “設定子” により設定される値と区別する)
ための語と解釈すればよいであろう
(読み取り専用の属性に対し利用されることが多い)。
取得子( getter )
設定子( setter )
これらの語は、
JS のオブジェクトプロパティと同様に,
IDL 属性の値を[
取得する/設定する
]ためのアクセス子を表す
— 次項の[
取得子手続き/設定子手続き
]を見よ。
構築子手続き ( constructor steps )
メソッド手続き ( method steps )
取得子手続き ( getter steps )
設定子手続き ( setter steps )
IDL メンバ(構築子/メソッド/属性取得子/属性設定子)のふるまいを定義するときは、
これらの句を利用して導入される。
例:
“foo()
メソッド手続きは…”
(以下, 手続きの内容が後続する)
これらの( Web IDL 仕様により推奨される)句は、
導入されて日が浅いので( 2020年 5月頃),まだ利用されていない仕様もあるが、
ほとんどの日本語訳では原文に先行して採用している。
これらの手続きは、以前は[
“…'s construcor, when invoked, …”,
“… method, when invoked, …”,
“On getting, …”,
“On setting, …”
]のような句で導入されていた。
設定子手続きに現れる句 “所与の値” は、
字義どおり設定子に与えた値を意味するが,
正式には Web IDL に定義される所与の値 を指す。
構築子手続きにおいては、
新たなインスタンスを[
作成する/返す
]段は省略される
— それが受け持つのは、
当のインスタンス(後述の これ° で指示される)を適切に初期化することに限られるので
(構築子は、構築子手続きが例外を投出しない限り,当のインスタンスを返すことになる)。
これらの句で導入された ふるまいの要件レベルは、
他が指定されない限り,
“〜するものとする( UA に課される MUST )” になる 。
foo
手続き
API 用に定義される手続きは、
スクリプトからの利用が意図されるが,仕様内の一部のアルゴリズムからも直に呼び出されることがある。
IDL メンバ foo
に対する
“foo
手続き”
のような句は、
foo
のふるまいを定義している手続きを指す。
foo
が IDL 属性の場合、
手続きには取得子, 設定子の両方があり得るので,[
“foo
取得子手続き” /
“foo
設定子手続き”
]のように記される。
この句は、[
当の IDL メンバが作者スクリプトにより上書きされようが,当の手続きに従ってふるまう
]ことを明示的に指示するためとして,一部の仕様で利用されている。
(ほとんどの仕様では、
取得子手続きを呼び出す所では,
単に “foo
属性の値” と記される。)
引数 = ε
API メソッドのふるまいを定義する手続きに現れるこの句(条件)は、
概略的には,引数 を省略してメソッドが呼び出されたことを表すが、
正式には[
Web IDL に則って 引数 を IDL 値に解釈した結果は、
特別な値 missing になった
]ことを意味する。
ここでの 引数 は、
当のメソッドに宣言された引数であって,次をすべて満たすことが前提にある:
そのような引数に明示的に JavaScript undefined
値を渡してメソッドを呼び出した場合も、
missing に解釈されることになる。
(可変個引数(宣言に "...
" が付与されたもの)に渡された undefined
は、
必須の引数と同様に解釈される。)
(†省略可能な引数のうち, "= 既定値
" が宣言されているものは、
その引数を省略した場合,既定値として 既定値 を渡したものと見なされる。)
フック( hook )
拡張能を得るために、
当の仕様が,自身が規定する手続きのある段を[
外部(他の仕様など)から供される処理を( callback 関数のように)実行する場
]として,提供するもの
(参考 )。
(その目的の一つは、
他の仕様による monkey パッチを避ける ことにある。)
アルゴリズムに共通して利用される表記法
仕様の中のアルゴリズムは、
有順序リストの入れ子階層によるマークアップにより,
一般的なプログラミング言語と同様な[
実行順序, 制御構造
]が表現されています。
多くの仕様の和訳では、
アルゴリズムの中の定型的な記述を簡明に, かつ一貫させるため、
以下に挙げる記号や表記法を導入しています
(個別の仕様ごとに,追加の記号が導入されることもあります):
次に挙げる記号についての説明は、前節を参照されたし:
∧ , ∨ , ¬
= ≠ ,
ε,
+ , − , × , ÷
> , ≥ , < , ≤ , 〜
Assert :条件
いわゆる表明。
条件 で表現される暗黙的な不変則を明示的に示して,
アルゴリズムの明確化を図るものであり、
アルゴリズムの意味論に要件を追加するものではない。
アルゴリズムの入力が満たしているはずの条件が記されることが多い。
これ°
IDL this 値
の略記。
論の対象のインタフェース(インタフェース mixin も含む)のメンバ
(メソッド/属性取得子/属性設定子)が呼び出されたオブジェクト自身
— その種のメンバを定義しているインタフェースを実装している,ある特定のインスタンス —
を指す
( JavaScript の “this 値” に似るが、
定義は異なり,ずっと限定的である)。
ほとんどの場合、当のメンバのふるまいを定義するアルゴリズムの中で利用される。
構築子手続きの中でも利用され、
当のインタフェースを実装する新たなインスタンスを指す。
この用語は頻出し,原文では単に “this” と記されるが、
日本語的にすわりが悪いので
(および JavaScript の this と混同されないよう),
和訳では これ° と表記される。
アルゴリズム名 ( 引数 … )
アルゴリズム名 が指示する手続きを
引数 ( 0 個以上)を渡して適用することの略記。
アルゴリズム名 ( ↓ )
:引数ブロック
前項と同じ意味だが、
引数たちは 引数ブロック 内に(概して, 1 行に 1 個ずつ)列挙される。
この表記は、[
引数の個数が多い/
いくつかの引数は 長い注釈を伴うか名前が長い
]ときに,複数行に分けて可読性を改善するために利用される。
O 上の foo
手続き( 引数 … )
IDL メンバ foo
を実装しているオブジェクト O 上で,
foo
用に定義された手続きを
— 所与の 引数 ( 0 個以上)を渡して —
適用することの略記。
その手続き内の これ° は、
O を指すことになる。
A :← B
新たな変数 A を宣言した上で,その値を所与の値 B
( B が値があてがわれた何か(変数など)として記されたならば、その値)
に初期化することを表す
(原文では
“ Let A be B ”
と記される)。
A ← B
既存の変数 A
— あるいは、プロパティや属性など,値があてがわれる何か —
へ所与の値 B を設定することを表す
(原文では
“ Set A to B ”
と記される)。
論理的には、
この表記が現れる前後において,次のように変化することを意味する:
[
A = B
]を満たしていたなら何も変化しない。
[
A = B
]を満たしていなかったならば,
それを満たすようになり、
A 以外のどの変数(または値) X も[
X = A
]を満たしていたならば,それを満たさなくなる。
( :← や ← のような記法を用いる理由の一つは、
設定(もしくは定義)の日本語表現には
“A を B とする”,
“A を B に設定する”,
“A が B になる”,
“A を B にする”,
“A は B とする”,
…等々,多種多様な言い回しがあり、
文脈, あるいは A, B の役割や定義に依存して,
どちらが設定される側になるかの解釈も変わり得るため,[
誤解の余地も生じ易い/文脈を汲み取る労力
]を要するので。
もちろん,何らかの表現を一貫して用いることは考えられるが、
訳者自身もしばしば,どの表現に統一されているのか忘れることがあるので。
要するに翻訳の手間を省くことも目的の一つにある。)
IDL 属性 A に対するこの表記(あるいは初期化)は、
実際には, A に対応する “内部的な下層データ” を設定することを意味する
( IDL 属性自体は、アクセス用の演算子に過ぎない)。
この下層データは、
仕様には明示的には定義されないことが多い
— その場合、 A 属性を定義しているインターフェースを実装する各オブジェクトは、同じ名前の[
下層データを保持するための “内部スロット”
]を有するものと暗黙的 に定義される。
A += n
A −= n
変数 A に対する増減操作を表す。
+= は加算, −= は減算を表し,
n はその量を与える。
IS 条件
条件 を評価した結果を表現する真偽値を返す。
すなわち、
条件 が[
満たされるならば true /
満たされないならば false
]になる。
IF 条件
:ブロック
条件 が満たされるときに限り, ブロック の内容を実行することを表す。
これは、
∧ ↓ や ∨ ↓ (および条件リスト)と組み合わせて利用されることもある。
その場合、
ブロック は,
条件リストを成すブロックの後に配置される
— 次の様に
(文字 “…” は,継続を表現する):
IF [
∧ ↓
]…
条件リスト
…ならば
:ブロック
ELSE [ IF 条件 ]
:ブロック
直前に現れている, 同じ階層レベルの[ IF および それに後続する ELSE IF ]に与えられた どの条件も,それが評価された時点で満たされなかったときに限り
(すなわち,それらに対応するどのブロックも実行されなかったときに限り)、
加えて, IF 条件 も与えられた場合は その 条件 も満たされるときに限り、
ブロック の内容を実行することを表す。
したがって, ELSE 単独で現れている場合、
当の条件節の終端を表すことになる。
〜 に応じて
:分岐リスト
ここでの 分岐リスト は、
次のような形をとるリストでマークアップされる:
条件1
ブロック1
条件2
ブロック2
…
…
いわゆる switch 文。
〜 に記された対象が 分岐リスト を成す どの条件を満たすかに応じて、
対応するブロックのみを実行する(あるいは,その記述に従う)ことを表す。
各 条件 は、
多くの場合,対象がとる[
値/値の範囲
]として記される。
その場合、
対象の値が[
示された値と同じ/示された範囲に入る
]という条件として解釈することになる。
各 条件 による場合分けは,通例的には排他的になるが、
そうでなければ,他が指定されない限り[
最初に満たされた条件に対応する段
]に限り実行される。
WHILE 条件
:ブロック
条件 が満たされる間,ブロック の内容を繰り返し実行することを表す。
条件 は、
各 反復の最初に評価される。
条件 に “無条件” と記された場合、
無限に繰り返すことを表す
( ブロック の中の[
BREAK / GOTO / RETURN / THROW
]などによりループを終える)。
対象範囲 を成す 各 ( 対象 ) に対し
:ブロック
対象範囲 に記された対象範囲に属する
— あるいは、
対象範囲 が何らかの条件として表現された場合は,それを満たす —
各 対象 に対し
— それらの列挙順序が明示的に指定された場合は,その順序に従って —
ブロック の内容を実行することを表す( “for each” )。
列挙順序が指定されていない場合、
一般に, 対象範囲 がリスト など元々順序を備える(または,その一部を成す)ものならば,その順序に従う。
処理結果が列挙順序に依存しないものについては,順序が指示されないこともある
(依存する場合、
概して,仕様における指定漏れである)。
CONTINUE
繰り返しループ( WHILE … / “各 ( … )” )において、
現在の反復を中断して,次回の反復へ移行することを表す。
BREAK
繰り返しループから抜けて,ループブロックの次の段へ移行することを表す。
BREAK ラベル
[
BREAK が記された段の上位レベルにある,
ラベル が付与されたブロック
]全体を中止することを表す
( BREAK 以降を走らすことなく, ラベル が付与された段の次の段へジャンプする)。
ラベル が付与された段を “一回だけ反復するsループブロック” と見なすならば, BREAK と同じになる
(他のループが入れ子にされていない限り)。
GOTO ラベル
ラベル が付与された段へジャンプすることを表す。
THROW 例外名
例外名 で指示される新たな例外オブジェクト †を投出 した上で、
特に並列的に実行を継続するよう指示されていない限り,
現在の手続きも 終了することを意味する。
例外は、
例外を投出したアルゴリズムを呼び出したアルゴリズムにも伝播する。
すなわち、
呼び出した側も
— 当の例外に対する処理
( “catch する” などの句で指示される)
が指定されていない限り —
(呼び出した箇所で)
当の例外を投出し直した上で,自身の手続きを終了することになる。
†
3 種類の例外
— 単純例外 ,
DOMException
,
カスタムな例外( DOMException
を継承するインタフェース) —
のうち どれが投出されるかは,
例外名 から判明するので、
日本語訳では,それらの区別を省略している:
単純例外は 5 種しかなく
— 少なくとも各仕様の和訳においては —
TypeError
,
RangeError
が大部分を占め,
EvalError
は一握り
(CSP 内の一箇所),
ReferenceError
,
URIError
は,まったく現れていない
— これらを定義する Web IDL は別として。
(単純例外と DOMException
の両者用に定義されている例外名は、
今の所ない
— 将来そのような例外名が導入される可能性も否定できないが、
そのような紛らわしい名前は,避けられるであろう)。
Web IDL の要件により、
カスタムな例外と DOMException
が同じ名前を共有することは決してない。
ECMAScript 言語束縛における例外の投出法を成す具体的な処理は、
Web IDL 仕様にて定義される 。
RETURN [値 ]
値 をアルゴリズムの呼び出し元に返した上で、
特に並列的に実行を継続するよう指示されていない限り,現在の手続きも 終了することを意味する
(入れ子にされた手続きの中では、
当の手続きのみを終了させる
— 上位の手続きではなく)。
呼び出し元のアルゴリズムにて,この返り値を指すときには、
通例, “〜した結果”, “〜の返り値” と記される。
値 を伴わない RETURN は:
語彙の対訳について
日本語と英語には(特に文の構造に)大きな開きがあるので、
語彙以前に,原文を論理的に等価な言い回しに変形することも よくあります — 例えば,対偶をとるなど。
(挙げていくと際限ないが,実際には、
英語のすべての定冠詞(の有無, あるいは all, every, each 等々), あるいは語形変化など、
およそすべて, “等価な” 言い回しに変形することになる。
双方の言語には,利用する語彙そのものに異なる視点が組み込まれているので、
より適する言い回しも,必然的に異なることになる。
語の省略法も異なるので、
原文に無い語を補完したり,逆に原文の語を省略することも ときには必要になる。
特に、
英文における[
単語を分離するスペース
]の対訳として,日本語の助詞(特に “の” )が利用されることは多い
— ときには、
スペースを挟む 2 つの語の関係性を明示的に補完しないと,日本語として[
意味が通らなくなる/誤解を招く表現になる
]ことすらある。)
また、英語は動詞が中心的な意味を担う場合が多く、プログラミング言語で言い換えるなら,
いくつかの callback 関数を入れ子にして記述するのに近い感がある
(直訳的には、 “〜することを〜することを〜することを … 〜する” のように — 5 段くらい入れ子にされることも珍しくない
— そのような入れ子の動詞(あるいは、形容詞として利用されている動詞)は、
主語や目的語, あるいはその両者が省略されていることも多い
(事実上、英語の方が日本語より主語や目的語の省略は多いかもしれない))。
ついでに、英語の動詞(例: serialize )は ある関数を実行すること, 動名詞 〜ing (例: serializing )は 関数のある実行インスタンス, 動詞を語源とする名詞(例: serialization )は 関数を実行した結果(あるいは関数の定義)に対応付られるような感もある。
マークアップや自動処理などの編集上の都合が,以下の原則より優先されている箇所も中にはあります。
仕様が規定するモデルの定義をより[
明確化する/簡潔に述べる
]ため、
和訳では,明示的に定義用語とされていない語にマークアップを施したり, 新たな用語を導入することもあります。
例えば、ある語 X が,単独の個としての意味と いくつかの集合としての意味を兼ねて定義されることもよくある
— 英文では, “X”, “Xs” のように単数形と複数形で[
自明/慣用的
]に区別し得ても、
和文では, “X”, “X リスト” のように,明示的に分けて定義しないと不明瞭になることがある。
原文に含まれている情報を訳文の中に可能な限り正確に反映させるための一環として、
語彙とその対訳は、なるべく,一対一の対応関係†
(より厳密には、
単語単位ではなく,句や意味構造の単位による対応関係)
が保たれるようにしていますが、
仕様が扱う対象や技術的内容など,利用される文脈に依存するので
(ときには仕様の編集者が好んで用いる表現にも)、
特に分野が異なる仕様間では,必ずしも統一されてはいません。
(†
一般に,一対一の対訳だけでは不足とされるが、
他所(同じ仕様の, あるいは関連する他の仕様)との[
整合性をとる/関連性を断たないようにする
]必要もあるので,一対一をないがしろにするわけにもいかない)
(一般には、日本語/英語の単語をノードに見立てて,それぞれの言語の各単語の関係性を平面グラフに描いたとしたとき、
互いに双対グラフのような関係にあると考えた方がよいであろう。)
この種の重複は,同一仕様の中では(言い回しなども利用して)なるべく避けています
(例:
“get” / “fetch” / “obtain” / “retrive” / “aquire” / “achieve” …
→
“取得する” / “fetch する” / “得る” / “検索取得する” / “獲得する” / “達成する” … 等々)
。
多くの場合、
同じ対訳を利用しても特に問題なさそうな所でも、[
意味的/語源的/役割的
]に異なる含みが込められていたり,
文脈を識別し易くする目的で異なる語が利用されることも見受けられるので。
(もちろん,この種の厳密的な対応付けが必須になる場合も多いが、
当初は気付かなかった訳出の不足点を見つけたり, 後から修正する際にも役立つので。)
逆に,同じ語句に異なる表現を使い分けることは、比較的 多くなっています —
( “set” → “設定” / “集合” の様に原語自体が多義的に見える†ものに限られず)
例えば
“match” → “合致” / “照合” や,
“change” → “変更” / “変化” など
(主題とされている対象から見て,その効果が[
能動的, 受動的
]どちらになるかに応じて,対訳が[
変わる/変わらざるを得ない
]こともある)
。
しかしながら,逆に使い分けを抑制している場合もあります
(例えば, “align” の対訳には “整列する”, “〜寄せ”, “揃える” などがあり,馴染まれている表現も文脈によって異なり得るが、
その様な場合でも,敢えて一つの表現に統一することがある。)
(英語自体,同一の対象を様々な語彙で言い換える書き方が好まれる傾向もあり、
編集者によっては,その頻度が高いこともある
— その場合、
ある程度 “正規化” して和訳しないと,何が “同じもの” を指しているのか不明瞭になり,読者を困惑させることになるであろう。)
(†
多義的とは言い切れない面もある … 例えば、
設定 → 一定の何かが設定されているものの集まり,のような意味論上の関連性は考えられる。
同様の例として、
“load” の対訳には,動詞としての “読み込む” と名詞としての “負荷” の二つが挙げられるが、
英語話者にとっては,同じ概念に帰するのではないかと思われる。)
仕様間の対訳の不統一も,特に必要とされない限り避ける方針なので、
一部の語の対訳には多少の[
冗長さ/不自然さ/馴染み難さ
]を感じる所はあるかもしれません。
(例えば “feature” の対訳に利用される “特能(特色機能)” は,
“機能” と訳されても特に問題ない箇所もあるが、
単なる “機能” 以上の含みもあるので,
“function” などの対訳との衝突を避ける方を優先している。)
一部の用語には、
定訳が見当たらないなどの理由で訳者による対訳があてがわれていたり
(その種の対訳は後で変更されるかもしれない),
カタカナ表記(外来語)に普及度が高くない漢字の対訳を利用しています。
文脈が幅広い一般文章の中のカタカナ表記には、
次に挙げる利点が考えられますが:
用語を判別し易くする
(例えば DOM Range オブジェクトを意味する “range” を “範囲” と記した場合、
一般的な意味の “範囲” と区別が付きにくく,都合が悪い)。
言い換えれば,形式論的な部分と意味論的な部分を区別し易くする、
あるいは,カタカナ表記は、
英語の定冠詞の,一部の機能( “周知のもの” を指すための “the” )を担っているとも考えられる。
原語がわかり易くなる
— その結果,翻訳し得ない内容( API や構文などのコード類)との対応関係も読み取り易くなる。
ネット上その他の一般文書との用語の相違も生じ難い
— その結果,ネット検索にかかり易くなる。
同音異義語の問題を避ける
(例えば “規定”, “既定”, “基底”
— これらは、他者と会話でやりとりする際には,問題になる)。
それ自身は意味を持たない記号のように扱い、[
余計な先入観を排除する/言外の意味や含みがある
]様な印象を与える
( “オリジン” は “オリジン” であって, “生成元” 等と訳される(解釈される)べきではない)。
語形変化を反映し易い。
例えば動名詞 “〜ing” の場合、
用語として動詞と対訳を異ならせるための決まった法則がない
( “〜付け”, “〜処理”, “〜法”, “〜時”, “〜用の”, “〜元”, … 等々を用いたりするが†、
この種の接尾辞は内容を理解した上で選定する必要があり,仰々しくなったり, 文脈に応じて違える必要が生じたり, 相応しいものが見当たらない場合もある)。
用語として[
単数形と区別すべき複数形, あるいは
集合としての複数形と区別すべき総称としての複数形, あるいは
現在形と区別すべき過去形,
]††などもしばしば現れ,同様のことが言える。
†
動詞が動名詞と同じ語形として訳されることもよく見かけるが
(例えば, “render” を “レンダリングする” の様に)、
これは重言に近くなるので
( “render することをする”),
和訳では語形も変えている
( “レンダーする” )。
††
和訳時に解り難くなる要因の一つとして、
意識して与えない限り,英語の定冠詞や複数形などによる[
語が[
総称的/個別的(インスタンス)/集合的
]のいずれを表すかを指示する情報
]が失われることが挙げられる。
語尾変化についても同様で、
例えば CSS 用語の “(〜の)包含ブロック( containing block )” などは,実際は “(〜を)包含している ブロック” と記された方が理解し易いと思われる
(さすがに “コンテイニングブロック” などと訳すのは,かなり抵抗がある)。
ここでは,次に挙げる理由から、
漢字表記による[
概念(あるいは用途や役割)の把握し易さ/
関連の一般語との概念的な関わりの維持/
記述の簡潔さ
]を多少優先しています:
ほとんどの用語には、何らかのマークアップ
— その定義を参照するリンクなど —
が施され,一般語と区別できる。
(特に最近の仕様は,あらゆる詳細を定義する傾向にあり、
明示的に参照先が付与されていない(些細な)語彙でも,何らかの定義が仕様化されていたりするので、
ほぼ全文がリンクで埋め尽くされる日も来るかもしれない
(実際,和訳に利用している一部の記号には 仕様化されているものもあり、
和訳では,リンクを省略して上述したアルゴリズム表記規約に代えている
— “詳細過ぎ” で使い勝手が悪いので)。)
翻訳し得ない内容( API など)との対応関係の読み取り易さを一貫して施行しようとすると、
ほぼすべてカタカナ語(または原語)で埋め尽くされ,翻訳行為 自体と相反する。
(既存のものと異なる名前を利用する新たな API が導入されれば、
それに伴い,本文の中で その名前を利用している箇所の対訳も変更することになろう
— 当の仕様のみならず、それを参照している他の仕様の日本語訳も含めて。)
ほぼすべての語句が用語であると言っても過言ではない
(仮に, DOM の “文書”, “要素”, “属性” が全部 “ドキュメント”, “エレメント”, “アトリビュート” などと記されたとすると、
読みづらくなるであろう
(複合語も数多くあり、カタカナで記すと余計に長々しくなる)
(その気になれば、
内容のほぼすべてが[
カナ, かな
]で占められてしまう仕様もある
— 日本語が介在し得る余地は、
句読点, 代名詞, “てにをは”, 数量, [
すべて/ある/それぞれ
]など,最小限にもなり得る。
その “てにをは” に対応する前置詞ですら,
(他の語との組み合わせによる)用語としての扱いを要する場面は,しばしば現れる
(現在は用語として正式に定義されていない語句でも,後にそうなることもある)。
“同じ”, “〜である” などの基本的な語も見た目ほど自明と限らない。)
仮に,すべての語を原文の発音どおり(語形変化も含めて)カタカナで記したとしても、
正確に翻訳したことにはならない
— 英文を構成する各 単語の “意味論上の品詞(役割)” は、
他の単語との位置関係にも依存するので。
突き詰めれば、翻訳など無意味な行為であり,さっさと日本語使うのやめるのが早道とも言える。
中学生あたりでネイティブ感覚で英語をマスターできなかった時点で,もう遅い。
形式論と意味論の境目は、
仕様ごとの文脈に依存する
(ある基礎的な仕様の中では,形式論的な部分として強調される語彙も、
それに立脚する別の仕様の中では,より概念的な名前で参照されることになるであろう
— 例えば, “文字” は “キャラクタ” と記されるべきだろうか?
そう記した所で、その語 “キャラクタ” に,
バイト単位, Unocode 符号位置, UTF-16 符号単位, 書記素クラスタ, 等々
のどれを指すのかについての情報が付与されるわけでもない
— カタカナと漢字による区別だけでは、結局,足りなくなる
)。
元々の原文の記述自体が,形式論と意味論の重ね合わせになっている
(カタカナ利用はそれを断ち切ってしまう面もある
— 語がどちらを意図して記されているかも、自明でない)。
用語は用語であって結局は外国語と同じ
— “生成元” は “生成元” であって,一般概念としての「生成元」に解釈することが義務付けられるわけではないし
(例えば木構造の文脈の “親” は別に “二人” 居るわけではない)、
和語や漢語が言外の意味を備えては ならない わけでもない。
結局は,他の語との関係を通して[
理解される/するしかない
]ものであろう
(ゆえに、翻訳にあたっては,その関係を明確化することを重視する)。
原文も併記しており、多くのページは対訳の切替機能(原語表示, 一部ではカタカナ表示も)を備えている
(カタカナより原語表記で直接的, 視覚的に覚えた方がむしろ効率的で有利ではないのか?)。
(しかしながら、[
前置詞/接続詞/基本的な動詞
]自体が自立した用語になることもあり
(例えば,アニメーションの from, to の他にも then, done などが挙げられる)、
これらの語がコードに現れると同時に意味論の記述の中の単語とも深く関連付けられている場合、
その関連性を自然な形で和訳に反映させるのは困難になる
(そのような単語をそのまま原語で(あるいはカタカナでも)記したなら,日本語にならなくなるので)。
例えば:
“ドキュメント”
( document — DOM として扱われるリソース, または それを表現するオブジェクト)は基礎的な語でもあるので → “文書”
“ブラウジングコンテキスト” ( browsing context ) は長いので → “閲覧文脈”
“コンテンツ” ( contents )は特別な含み(メディアや著作物など)があるわけでもなく,カタカナで記す意義が感じられないので → “内容”
( “内容” が “content(s)” 以外の意味で利用される箇所は無いに等しい
(これらを使い分けることに利点はあるのか? 加えて、
実際の原文では単数形の “content” の方が圧倒的に多い)
)
“コンテキスト”
( context — 与えられた情報を解釈する際の前提とされる情報)
も同様に → “文脈”
( “文脈” を文章に関する語に限らせる必要もない/
con-text という語自体, “テキストと共に” を意味する)
“セレクタ” ( CSS selector )は本文中の “選択( select )する” 等の記述との概念的な関わりを保つ/無為に語彙を増やさないため → 選択子
エンコーディング, エンコード, エンコーダ( encoding, encode, encoder ) は概念の違いを解り易くするため → “符号化法”, “符号化”, “符号化器”
(その他、カタカナ利用の理由には,表現を婉曲にする( “便所” → “トイレ” など)などもあるが、
その種の表現が仕様の文脈で必要になる場面は,通常ない。
しかしながら、
和語にすると無用に “生々しく” なることが多いのも,
カタカナ語が増える理由にあると思われる。)
対訳では、[
頻度が高い/通りがよい/長過ぎる
]などの理由で略語や原語そのままが利用されたり
(例えば:
“ユーザエージェント( user agent )” → “UA”
“オペレーティングシステム” → “OS”
“クロスサイトリクエストフォージェリ” → “CSRF”
“インタフェース プロトタイプ オブジェクト” → “interface prototype object”,
等々)、
原語のままにされる場合もあります
— 例えば:
原文のコード類との対応関係を読み取り易くする
(例えば CSS 用語の “import” には,対応する CSS キーワード "import" がある)
適当な対訳が見当たらない
(訳語が確定するまで保留)
他の語の対訳との衝突が避けられないが,意味合いが微妙に異なる
(または共用を避けて文脈を識別し易くする)
語義が広くなり過ぎる
“活用” による変異を抑制する
(例えば “index” は、
利用される文脈に応じて “索引”, “添字”, “付番”, “〜番目”, “指数” など,対訳も
(訳として自然な表現にするために)
様々に変わり得るが、意味論上の関連性を保つため,原語のままにされるなど)
(どちらで表記しようが,専門的 難しさは変わらないなら、[
略語/原語
]で記しても同じことであろう。)
形容詞の語尾は、
不自然にならない(文法に違反しない)限り,
“〜の” よりも “〜な” を選好しています
(例: “最大の数” → “最大な数” )。
日本語における助詞 “の” は,汎用度が高過ぎることに加え
(例:英文における "…’s" の対訳にも,所有を表す “の” が利用される)、
“A の B の C の D の…” のように何段も重なると
(そのような長い句は、仕様には頻繁に現れる),
何が何を形容しているか不明瞭になるので。
それでも多義的に解釈され易い所
(あるいは “〜な” を利用できない所)
では、
括弧も利用されます
(例: “[A な(の) B]の[C な(の) D]…” )。
一部の用語には、
語彙の統一や節約の観点から,あまり一般的でない[
動詞としても機能し得る名詞
]が利用されています。
代表的な例として、
(例外の) “投出” など。
体言としての “投出” と動詞としての “投げる” の2種類の語を使い分けるのは、
なるべく避けたいので。
同様に、
例えば “transition” の対訳に[
“遷移する” (動詞)/ “トランジション” (名詞)
]の2種類を語を使い分けるのも好ましいとは思えないので
(加えて,動詞を “トランジションする” とするのもリズムが悪い)、
この種の事例では,単に[
“遷移” / “遷移する”
]の様な対訳を優先しています。
カタカナ語の語尾の長音( “ー” )表記について
無くても差し支えない所は省略する方針です(
外来語(カタカナ)表記ガイドライン は無視している):
カタカナ表記の役割としての[
とりあえず近似的な発音で代用して記憶し易くする/
原語の綴りを復元し易くする
]観点からは、
大方,在っても無くてもさして変わらず、
カタカナ語(表音文字系の言語)は本来的に,文字数に比して短く一息に読まれる方が 文章のリズムは とり易く出来ているものと考えられるので。
また、多用されている全角ダッシュ( “—” )と紛らわしくなるのも避けたいので。
(長音無しを基準にとれば “省略” という言い方もおかしい? 長音付きが好みの方は脳内変換で対応して下さい。
脳内変換に関して言えば、
長音[ 無し → 有り ]に 補完して 読む方が,[ 有り → 無し ]に 省略して 読むよりも馴染み易いのではないだろうか?)
例えば “ティ” で終わる語の語尾の長音は、
全般的に[
長音の有無で意味が変わったり, 長音が省略された語の方だけ利用されない事例
]は稀にしかないと思われるので,省略しています( “プロパティ” など)。
動作の主体(動詞の変化形)を表す語尾の長音
( “サーバー”, “ユーザー”, “パーサー”, “オブザーバー”, 等々)
についても,大半は省略されています
(仕様の中ではこの種のものが大勢を占める)。
(技術用語で長音が略される傾向が高いのには、
実在する動作者と抽象的な役割とを区別したいのも理由にあると思われる。
例えば,ソフトウェアの文脈における “ユーザ” は、
人利用者のみならず,利用者を代表して働く構成部品も含めて指している
(あるいは、
実質的にそう[
見なせる/見なす必要がある
])ことが多い。
“オブザーバー” と記されたときは,その種の役職に就いている人を指し、
“オブザーバ” と記されたときは,プログラミング パターンの一種を指すように感じることはないですか?)