[28] [[仕様書]]における[DFN[助動詞]]は、その[[文]]が[[適合性]]の[[要件]]を記述していることと、
その種別を表しています。

[EG[
[52] 例えば、「[CODE(HTMLe)@en[img]] [[要素]]には [CODE(HTMLa)@en[src]]
[[属性]]を指定し[MUST[なければなりません]]」という[[文]]は、
[[助動詞]] [MUST[なければなりません]] ([MUST[MUST]]) が使われていますから、
[[適合]]するためには「[CODE(HTMLe)@en[img]] [[要素]]には [CODE(HTMLa)@en[src]]
[[属性]]を指定」することが要求されることを表しています。

[53] このような[[助動詞]]のない[[文]]は、[[事実の文]]などと呼ばれ、
[[要件]]ではなく単なる説明に過ぎません。
]EG]

[88] いくつかの流儀がありますが、 [[インターネット]]では
[[RFC 2119]] 方式が広く採用されています。

* 仕様書

[REFS[
- [2] [CITE@en[RFC 2119 - Key words for use in RFCs to Indicate Requirement Levels]] ([TIME[2014-06-11 10:38:58 +09:00]] 版) <https://tools.ietf.org/html/rfc2119>
-- [41] [CITE@en[RFC 2119 - Base Encodings]] ([TIME[2014-06-11 10:38:58 +09:00]] 版) <https://tools.ietf.org/html/rfc2119#section-6>
- [97] [CITE[RFC Errata Report]] ([TIME[2014-06-26 14:03:49 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=2119>
- [11] [CITE@en[RFC 8174 - Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words]]
([TIME[2017-05-20 07:55:34 +09:00]])
<https://tools.ietf.org/html/rfc8174>
- [99] [CITE[RFC Errata Report » RFC Editor]]
([TIME[2017-05-22 12:59:02 +09:00]])
<https://www.rfc-editor.org/errata_search.php?rfc=8174>
- [22] [CITE@en[Infra Standard]] ([TIME[2017-05-31 06:14:37 +09:00]]) <https://infra.spec.whatwg.org/#conformance>
- [33] [CITE@en[[[RFC 6919]] - Further Key Words for Use in RFCs to Indicate Requirement Levels]],
[TIME[2013-04-02 05:59:46 +09:00]]
<https://tools.ietf.org/html/rfc6919>
]REFS]

* 助動詞の一覧

[FIG(short list)[
[FIGCAPTION[
[29] 要件を表す助動詞
]FIGCAPTION]
- [['''MUST''']], [['''SHALL''']] ([['''しなければならない''']])
- [['''MUST NOT''']], [['''SHALL NOT''']] ([['''してはならない''']])
- [['''REQUIRED''']] ([['''必須''']])
- [['''SHOULD''']] ([['''するべきである''']])
- [['''SHOULD NOT''']] ([['''するべきではない''']])
- [['''RECOMMENDED''']] ([['''推奨''']])
- [['''OPTIONAL''']] ([['''任意選択''']])
- [['''MAY''']]
- [['''NEED NOT''']]
- [[expected]] ([[期待される]])
- [['''OPTIONALLY''']] ([['''任意選択''']])
- [[encouraged]], [[discouraged]]
- [[We recommends ...]]
- [[can]]
- [['''WILL''']]
- [['''CONDITIONALLY REQUIRED''']]
- [[have to]]
- [[ought to]]
- [['''SOON''']]
- [['''SHORTLY''']]
- [['''TOO LATE''']]
- [['''NEVER MORE''']]
]FIG]

* 意味

[48] [[助動詞]]は、その[[文]]が当該[[仕様]]においてどのような意味を持つかを表すものです。
例えば「○○しなければ[RUBYB[[['''ならない''']]]@en[MUST]]」とあればそれが必須の条件であることを表し、
それに従わないのは仕様違反です。
「○○しても[RUBYB[[['''構わない''']]]@en[MAY]]」とあればそれが認められる動作 (の1つ)
であることを表しています。
[SEE[ 詳細は各助動詞の項 ]]

[49] 仕様の記述に利用する[[助動詞]]の選択や位置付けは、[[標準化団体]]や[[仕様書]]によって異なっています。
[[Web]] を含む[[インターネット]]関連技術の仕様書の多くは、 [[RFC 2119]]
が規定する[[助動詞]]を採用しています。しかしその中でも、 [[WHATWG]]
等の近代的な [[Web]] 関連の仕様書は[[助動詞]]を用いた規定の記述を徹底しているのに対し、
[[IETF]] は[[事実の文]]を用いた規定を多用し[[助動詞]]は限定的にしか用いないといった様式の違いがあります。

* RFC 2119 キーワード

[95] [DFN[[[RFC 2119]]]] ([DFN[[[BCP 14]]]])
[DFN[[CITE@en[Key words for use in RFCs to Indicate Requirement Levels]]]] は、
[[要件]]を表す[DFN[キーワード][RFC 2119キーワード]] ([[助動詞]]) を定義する [[RFC]] です。

[96] [[適合性]]を記述するための共通の言語として、 [[IETF]] の文書に限らず、
[[W3C]] や [[WHATWG]] のような他の[[標準化団体]]の[[仕様書]]、
[[Web]] 関連を中心とする私的な[[仕様書]]など含め広く用いられています。
厳密な意味の[[仕様書]]の他に、
標準開発の要件を表す文書や[[標準化団体]]の[[憲章]]のような関連文書でも使われることがあります。

[102] 次の[[キーワード]]が定義されています [SRC[>>2, >>22]]。

[FIG(list middle)[ [112] [[RFC 2119]] [[キーワード]]
- [MUST[MUST]], [MUST[REQUIRED]], [MUST[SHALL]]
- [MUST[MUST NOT]], [MUST[SHALL NOT]]
- [SHOULD[SHOULD]], [SHOULD[RECOMMENDED]]
- [SHOULD[SHOULD NOT]], [SHOULD[NOT RECOMMENDED]]
- [MAY[MAY]], [MAY[OPTIONAL]]
]FIG]

[114] [CITE[Infra Standard]] は、
このうち [MUST[must]], [MUST[must not]], [MUST[should]], [MUST[may]]
のみ使う[[[RUBYB[べき]@en[encouraged]]][encourage]]としています [SRC[>>22]]。

;; [115] 実際 [[Web]] 系の[[仕様書]]はそのような傾向にあり、
[CITE[Infra Standard]] はそれを追認するものです。
[[IETF]] の[[仕様書]]の多くも、 [MUST[SHALL]] や [MUST[SHALL NOT]]
はあまり使っていません。後述 (>>90) の通り、
[[shall]] は [[ISO/IEC]] 系と交わる分野で使われがちのようです。

** 大文字と小文字

[109] [[RFC 2119]] は、[[大文字]]の[[助動詞]]を定義しています。

[103] [TIME[2017年][year:2017]]に出版され [[RFC 2119]] を[[更新]]する [DFN[RFC 8174]] は、
すべて[[大文字]]のものだけが [[RFC 2119]] [[キーワード]]であり、
[[小文字]]のものは通常の[[英語]]の意味だ [SRC[>>11]] と明確化しています。

-*-*-

[106] [[RFC 2119]] は [[IETF]] 以外の[[標準化団体]]や[[企業]]の[[仕様]]でも広く採用されています。
[[IETF]] 以外では、むしろ「[[RFC 2119]] の[[キーワード]]を[[小文字]]で使う」
のような規定になっていることが多いです。[[可読性]]が理由とされています。

;; [113] [[適合性]]の[[規定]]であることを強調するために[[可読性]]を落としても敢えて[[大文字]]を使うことには意味があると思いますが、
[[ネイティブ]]の[[英語]]読者にとっては[[大文字]]率が高い文章は違和感が強いのでしょうか。

[107] [[RFC 8174]] 制定時には当然[[小文字]]の用法にも [[IETF]] は気づいていたはずですが、
何の言及もしていません。あくまで [[IETF]] の[[仕様書]]のための規定なので、
他でどう使われていようが知ったことではないという認識なのでしょうか。
あるいはそうした用法を好ましく思わない人達により制定されたのでしょうか。

;; [105] [[RFC 2119]] 出版後 [[RFC 8174]] 出版まで数十年、
特に大きな問題になっておらず、 [[IETF]] ではすべて[[大文字]]、
[[IETF]] 外では[[小文字]]が多い、という状態で安定しているように見えましたが。。。

[104] 
[[WHATWG]] の[[仕様書]]の多くや現代的な [[W3C]] の[[仕様書]]の多くが参照している [[WHATWG]] 
の [CITE[Infra Standard]] は、 [[RFC 8174]] の制定を受けて、
[[RFC 8174]] を無視して[[小文字]]で表記できると[[意図的違反]]を規定しています [SRC[>>22]]。

[111] [[WHATWG]] や [[W3C]] でよく使われている[[仕様書生成ツール]]には[[参考]]部分で[[助動詞]]が使われているものをエラーとして検出するような機能がついています。
[[要件]]を表す [[RFC 2119助動詞]]はそれ以外の用途で使うべきではないと考えられており、
従って[[助動詞]]以外の意味で使われることは皆無です。
それが敢えて[[大文字]]化しなくても良いという理由の1つになっています。
特別な意味を持たない一般語として[[小文字]]の利用を認める
[[IETF]] の [[RFC 8174]] の方針は混乱の元でしょう。

-*-*-

[128] 
[[RFC 8174]]
以前に出版された [[RFC]]
には、[[大文字]]のみ[[助動詞]]と解釈することを明記する事例がありました 
[SRC[>>129]]。
[[RFC 8174]]
出版以前から、それにつながる認識を持つ人々が
[[IETF]]
内に存在したということでしょう。

[REFS[
- [129] [CITE@en[[[RFC 7518]] - JSON Web Algorithms (JWA)]], [TIME[2019-11-27 04:11:14 +09:00]] <https://tools.ietf.org/html/rfc7518#section-1.1>
]REFS]

* RFC 6919 キーワード

[130] 
[DFN[RFC 6919]]
は[[4月1日のRFC]]
で、
いくつかの[[助動詞]]を規定していました [SRC[>>33]]。

[134] 
[[4月1日]]に出版されたことからわかるように、
本来は [[RFC 2119]] をもじったただのネタだったはずです。
ところが、
この
[[RFC]]
を引用して[[助動詞]]を使う[[仕様書]]がいくつかあります。
そうした[[仕様書]]の[[著者]]が、
ネタをネタとして使っているのか、
それとも勘違いして本気で使っているのか、
判断しづらいのです。
(ネタだとわかっているとしても、
判断しづらい文脈で使っている以上、
ネタとして成立していないのですが...)



[133] この
[[RFC]]
の状態は、
[[EXPERIMENTAL]]
とされています
[SRC[>>33]]。
なぜ[[情報提供]]でないのか不明です。
[[4月1日]]発行であっても、
ある程度は本気だったりするのでしょうか。

[136] 
各キーワードは、
それを実際に使っている過去の
[[RFC]]
を引用しつつ、
皮肉交じりの定義が与えられていました。
(もちろん過去の [[RFC]] は [[RFC 6919]]
の定義する[[大文字]]キーワード表記にはなっていません。)


[FIG(short list)[ [135] [[RFC 6919]] [[キーワード]]
- [[MUST (BUT WE KNOW YOU WON'T)]]
- [[SHOULD CONSIDER]]
- [[REALLY SHOULD NOT]]
- [[OUGHT TO]]
- [[WOULD PROBABLY]]
- [[MAY WISH TO]]
- [[COULD]]
- [[POSSIBLE]]
- [[MIGHT]]
]FIG]

[137] 
[DFN[MUST (BUT WE KNOW YOU WON'T)]]
は、
正式には必要だけど実際上は不便なことを表す、
とされており、括弧書きは文末に移動したり、
省略してしまったりしてもいい、
とされていました。
[SRC[>>33]]
つまりただの
[MUST[MUST]]
もこれに該当するということです。

[138] 
[DFN[SHOULD CONSIDER]]
は、
[[実装]]が何かするべきだと[[著者]]は考えているものの、
何かとは何かを[[著者]]は知らないことを表します。
[SRC[>>33]]

[139] 
[DFN[REALLY SHULD NOT]]
は、
危険なのに重要な[[事業者]]が行っているため[MUST[禁止]]できないことを表します。
[SRC[>>33]]

[140] 
[DFN[OUGHT TO]]
は、
明らかに道徳的に正しい挙動なので具体化する必要はないだろうという楽観的な判断を表しています。
[SRC[>>33]]

[141] 
[DFN[WOULD PROBABLY]]
は、
合理的な実装はそうしてほしいという[[著者]]の期待を表します。
ただし実装が合理的でなければならないとの要件はありません。
[SRC[>>33]]

[142] 
[DFN[MAY WISH TO]]
は、
必要と思っている人達と不要と思っている人達がいる挙動を表します。
文書の承認を遅らせないために使われることがあります。
[SRC[>>33]]

[143] 
[DFN[COULD]]
は、
信頼できる安全な操作のために重要かもしれないヒントを示すべく、
しかし固まった要件の形にはしないで、
可能な手段を提示するものです。
要件としないことで事業者は差別化できます。
[SRC[>>33]]

[144] 
[DFN[POSSIBLE]]
は、
絶対に起きない境界事案だと思っている[[作業部会]]メンバーがいるものの、
実はプロトコルが機能するための極めて基礎的なことを表します。
[SRC[>>33]]

[145] 
[DFN[MIGHT]]
は、
要件を意図的に見えづらく記述して製品の差別化を図るものです。
[SRC[>>33]]



-*-*-

[131] [CITE@en[Mixed Content]], [TIME[2020-04-28 21:05:56 +09:00]] <https://w3c.github.io/webappsec-mixed-content/#requirements-user-controls>
が
「REALLY SHOULD NOT」
を [[Note]] 内で使っています。 Note なので[[適合性]]には影響しないものです。
どこまで本気なのかよくわかりません。
危険なオプションを提供せざるを得ない現状への嘆きをこめて仕込んだネタのようなものと解するべきでしょうか。


[132] [CITE@en[CSS Writing Modes Level 4]], [TIME[2020-09-05T23:08:25.000Z]], [TIME[2020-09-06T02:20:57.666Z]] <https://drafts.csswg.org/css-writing-modes/#typeset-upright>
が[[規定]]本文で
「the UA [I[may wish to]] [RFC6919] (but is not expected to) 」
と書いています。



* 助動詞濃度

** IETF スタイル

[118] [[IETF]] の[[仕様書]]では、[[助動詞]]の使用頻度はそこまで高くなく、
ここぞというところで強調するために使う傾向が見受けられます。
といっても昔に比べると今は使用頻度が高くなっている印象があります
([[要出典]])。

[42] [[RFC 2119]] は、[[助動詞]]は注意して利用するべきもので、特に、
[[相互運用性]]にほんとうに必要な場合や、有害な可能性のある行為を制限する場合にのみ用いなければ[MUST[ならない]]
[SRC[>>41]]、
とりわけ、[[相互運用性]]のために必要でない限り特定の実装法を要求するために使ってはいけない
[SRC[>>41]] としていました。

[110] [[RFC 8174]] は[[RFC 2119キーワード]]の利用は義務ではなく、
[[キーワードを使っていない文][事実の文]]だからといって[[規定の一部]]ではなくなるわけではない
[SRC[>>11]] と補足しています。

[124] [[IETF]] の[[仕様書]]や古い [[Web]] の[[仕様書]]などでは、
[[助動詞]]を使っていない[[事実の文]]のように見えても[[要件]]となることを意図したと思われる[[文]]があちこちに散りばめられていたりするので、
慎重に[[行間を読む]]力が求められます。

[EG[
[125] [CITE[HTML4 Test Suite]] の開発では、
[CITE[HTML4]] [[仕様書]]中に[[助動詞]]の明記された[[要件]]がわずかしかないことが問題となりました。
[SEE[ [[HTML4]] ]]
]EG]

** Web 標準スタイル

[108] [[Hixie]] 以後の [[Web]] 技術の[[仕様書]]では、
[[助動詞]]のない[[事実の文]]は[[規定の一部]]であっても
(それ単独では) [[適合性]]に影響しないという理解が一般的になっています。
近年の [[Web標準]]の[[仕様書]]ではかなり[[助動詞]]の利用頻度が高くなっています。

;; [119] [[大文字]]が[[可読性]]に影響するから云々というのは、
こうした文化の違いもあるのでしょう。

[120] [[WA1]] など [[Hixie]] 時代の[[仕様書]]は、
過剰かと思わせるくらいに徹底的に、
[[適合性]]に影響する[[規定]]に[[助動詞]]を使っていました。
「[VAR[構文]]は[VAR[○○]]でなければ[MUST[ならない]]」、
「[VAR[アルゴリズム]]は[VAR[○○]]しなければ[MUST[ならない]]」
とほとんどの文で[[助動詞]]が使われていました。

[121] [[2010年代]]後半頃からの [[Web標準]]の流儀では、
「入口」となる規定にのみ[[助動詞]]を使い、
その一部を構成する定義は[[事実の文]]として記述するスタイルに変わってきています。

[EG[
[122] 例えば、
「[VAR[○○]]するには、[VAR[アルゴリズム]]を実行しなければ[MUST[ならない]]」、
「[VAR[アルゴリズム]]は、[VAR[○○]]する」
といった具合です。
]EG]

*** アルゴリズムの適合性の記述

[34] [[HTML Standard]] などでは、[[アルゴリズム]]を記述する際に、
その各手順で要件の度合いを繰り返し記述せずに、[[アルゴリズム]]の紹介文で一度だけ[[助動詞]]を使うスタイルが採用されています
[SRC[>>35]]。

[REFS[
- [35] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-06-20 15:40:17 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#conformance-requirements>
]REFS]

[EG[
[36] 例えば、

>
To eat an orange, the user [['''MUST''']]:
= Peel the orange.
= Separate each slice of the orange.
= Eat the orange slices.

... のような[[アルゴリズム]]の規定は、

>
To eat an orange:
= The user [['''MUST''']] peel the orange.
= The user [['''MUST''']] separate each slice of the orange.
= The user [['''MUST''']] eat the orange slices.

... のように展開できます [SRC[>>35]]。
]EG]

[50] あるいは、「○○する手順とは△△である。」と[[事実の文]]の形で[[アルゴリズム]]の定義を述べ、
呼び出し元で「○○する手順を実行しなければ[['''ならない''']]」とすることもよくあります。
[[アルゴリズム]]が[[アルゴリズム]]を呼び出す場合には[[事実の文]]の形の定義ばかりのように見えることも多いですが、
最終的な呼び出し元までたどれば必ず[[助動詞]]が使われているはずです。

* 適合性の主語

[37] [[要件]]を表す文章は、その行為を行うもの ([[人]]や[[ソフトウェア]])
を[[主語]]として記述することもあれば、生成物の状態を[[主語]]として記述することもあります。
どちらの方法で記述されるかは、[[編集者]]の好みのスタイルや文脈などに依存するもので、
深い意味はありません。

[EG[
[38] 例えば、「[[著者]]は、 [CODE(HTMLe)@en[[[div]]]] [[要素]]を [CODE(HTMLe)@en[[[p]]]]
[[要素]]の[[子供]]としては[['''なりません''']]。」と「[CODE(HTMLe)@en[[[p]]]] [[要素]]は、 
[CODE(HTMLe)@en[[[div]]]] [[要素]]を[[子供]]として持っては[['''なりません''']]。」
は、同じ意味です。
]EG]

;; [40] [[HTML Standard]] はこのような[[適合性]]の主体について言及しています [SRC[>>39]]。
他の仕様書でも、明示的に説明していることはあまりありませんが、同じように解釈されています。
[REFS[
- [39] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-06-20 15:40:17 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#conformance-classes>
]REFS]

* 適合性に寄与しない助動詞の利用

[73] [[適合性]]を記述する[[助動詞]]を[[規定]]以外の注記や例示などで用いることは、
読者の混乱を招く好ましくないことだと考えられています。
にも関わらず、しばしば[[助動詞]]が用いられていて、たまに誰かが気づいて修正したりしています。
(それだけ[[英語]]話者にとっては日常的な語句である[[助動詞]]でうっかり使ってしまうのでしょう。)

[EG[
[74] 例えば、「名前では姓を省略する[SHOULD[べきではありません]]。
例: 山田太郎を太郎と書く[SHOULD[べきではありません]]。」は、例示中に[[助動詞]]を使っています。
これは「名前では姓を省略する[SHOULD[べきではありません]]。
例: 山田太郎を太郎と書くのは好ましくありません。」のように書いた方が良いとされています。
]EG]


[51] 
[CITE[Infra Standard]] は、[[非規定]]部分では
[[RFC 2119キーワード]]は使えない [SRC[>>22]] としています。
実際にはこの禁を破った[[仕様書]]が少なくなく、都度修正されています。

[116] 
加えて、[[RFC 2119キーワード]]を避けた代替表現として次のものが挙げられています
[SRC[>>22]]。

[FIG(short list)[ [117] ただの[[助動詞]]
- [[strongly encouraged]]
- [[strongly discouraged]]
- [[encouraged]]
- [[discouraged]]
- [[can]]
- [[cannot]]
- [[could]]
- [[could not]]
- [[might]]
- [[might not]]
]FIG]

[146] 他に [[ought to]] などもそのような趣旨で使われています。

[147] 
ところで[[適合性]]としてしなければならない、するべきだ、
というのとは違った「推奨」「したほうがいい」
とは一体何を意味するのでしょうか。
要件でない (= 従わなくてもいい) ことを要求する価値はあるのでしょうか。
[[RFC 6919]] キーワードにはこうした代替表現を揶揄する意味もあるようです。

* 国家・国際規格

[89] [[国際規格]]・[[国家規格]]では[[インターネット]]とは違った流儀の[[助動詞]]が使われています。

[90] 
ただ[[インターネット]]に関係する分野の[[国際規格]]で [[RFC 2119]]
が使われたり、[[国際規格]]系の流れを汲む[[標準化団体]]が
[[shall]] を多用した [[RFC 2119]] 方式を使ったり、
[[インターネット]]系の[[仕様書]]が[[翻訳JIS]]になったりと、
両者が混じり合う場面もあります。

** ISO/IEC の助動詞

[44] [[ISO/IEC]] [[国際標準]]で使う[[助動詞]]は、 [[ISO/IEC Directives]]
で規定されています。

[45] 次の[[助動詞]]があります [SRC[>>43]]。
[FIG(short list)[
- [[shall]]
- [[shall not]]
- [[should]]
- [[should not]]
- [[may]]
- [[need not]]
- [[can]]
- [[cannot]]
]FIG]

[REFS[
- [43] [CITE[[[ISO/IEC Directives]]]] ([TIME[2011-06-27 23:35:55 +09:00]] 版) <http://www.iec.ch/members_experts/refdocs/iec/isoiec-dir2%7Bed6.0%7Den.pdf#page=70>
]REFS]

** JIS における規定

[31] '''文章の末尾''' 要求事項の記述は、その内容が指示・要求、禁止、推奨若しくは許容のいずれであるか、又は単なる情報としての記述であるかを明確に区別しなければならない。

要求事項の文章の末尾は、その意味の区別によって、表3のようにする。
(以上 [[JISZ8301]]:2000 7. d) )

[FIG(quote)[ [91] [[JIS Z 8301:2000]] 表3 要求事項の文章の末尾
,*意味の区別  ,*末尾に置く語句      ,*備考       ,*国際規格での対応英語
,指示又は要求,"・・・(し)なければらならない。, ・・・する。, ・・・とする。, ・・・による。",規格に適合するためには、厳密にこれに従い、これから外れることを認めない。,"shall 同類: is to・・・, is required to・・・, it is required that・・・, has to・・・, only ・・・ is permitted, it is necessary・・・"
,禁止,"・・・(し)てはならない。, ・・・(し)ない。",〃,"shall not 同類: it is not allowed [permitted] [acceptable] [permissible]・・・, is required to be not・・・, is required that・・・be not, is not be・・・"
,推奨,"・・・することが望ましい。, ・・・するのがよい。",このほかでもよいが、これが特に適しているとして示す。又はこれが好ましいが、必要条件とはしない。,"should 同類: it is recommended that・・・, ought to・・・"
,緩い禁止,・・・しないほうがよい。,これは好ましくないが、必ずしも禁止しない。,"should not 同類: it is recommended that・・・not, ought not to・・・"
,許容,"・・・(し)てもよい。, ・・・差し支えない。",規格の立場に立って、これを許すことを示す。,"may 同類: is permitted, is allowed, is permissible"
,不必要,"・・・する必要がない。, ・・・しなくてもよい。",〃,"need not 同類: it is not required that・・・, no・・・is required"
]FIG]

* 助動詞による適合性の用語

[150] 
[[RFC 4329]]
は次のような語を定義しています。
[SRC[>>151]]

- [152] [RUBYB[非準拠][non-compliant]] - 1つ[[以上]]の [MUST[MUST]] 要件を満たさない
- [153] [DFN[[RUBYB[条件付準拠][conditionally compliant]]]] - 
すべての [MUST[MUST]] 要件を満たし、 1つ[[以上]]の [SHOULD[SHOULD]]
要件を満たさない
- [154] [DFN[[RUBYB[無条件準拠][unconditionally compliant]]]] - 
それ以外


[REFS[
- [151] [CITE@en[[[RFC 4329]]: Scripting Media Types]], [TIME[2022-11-22T06:46:15.000Z]] <https://www.rfc-editor.org/rfc/rfc4329.html#section-2>
]REFS]

* 要求度を表す助動詞のマーク付け

[FIG(list)[
- [8] [[HTML]] [CODE(HTMLe)@en[[[em]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE@en[RFC2119]])
-- [CITE@en[W3C Manual of Style]] <http://www.w3.org/2001/06/manual/#RFC>
の推奨する様式:
--- [[助動詞]]は[[RFC 2119]]の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により[[小文字]]で[[イタリック]]に。
-- [CITE@en[Namespaces in XML 1.1]] 
<http://www.w3.org/TR/2004/REC-xml-names11-20040204/>
--- [[助動詞]]は[[RFC 2119]]の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により[[小文字]]で[[イタリック]]に。
--- [CODE(HTMLa)@en[[[title]]]] [[属性]]で
[Q[RFC 2119 でいう [SPAN@en[SHOULD]]]] のような説明あり。
--- 他の使用例
---- [30] [CITE@en[Multimodal Architecture and Interfaces]] ([TIME[2012-10-25 06:46:29 +09:00]] 版) <http://www.w3.org/TR/2012/REC-mmi-arch-20121025/>
- [1] [[HTML]] [CODE(HTMLe)@en[[[em]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE@en[rfc2119]])
-- [71] [CITE@en[Extensible Markup Language (XML) 1.1]] 
<http://www.w3.org/TR/2004/REC-xml11-20040204/#sec-terminology>
など、 [[XMLspec]] で書かれた仕様書の [[HTML]] 版
--- [[助動詞]]は [[RFC 2119]] の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により [CODE(CSS)@en[[[small-caps]]]] に。
-- [72] [CITE@en[Activity Streams 2.0]] ([TIME[2017-05-21 23:50:36 +09:00]]) <https://w3c.github.io/activitystreams/core/#h-introduction>
--- [[助動詞]]は [[RFC 2119]] の定義。
--- [[大文字]]。
--- [[スタイルシート]]により[[小文字]]に。
--- [CODE(HTMLa)@en[title]] [[属性]]に[[大文字]]。
- [9] [[HTML]] [CODE(HTMLe)@en[[[span]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE@en[rfc2119]])
-- [CITE@en[Character Model for the World Wide Web 1.0: Fundamentals]] 
<http://www.w3.org/TR/2005/REC-charmod-20050215/#sec-Conformance>
--- 助動詞は [[RFC 2119]] の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により [CODE(CSS)@en[[[small-caps]]]] に。
-- [14] [CITE@en[How to Publish a Final Incubator Group Report (XGR)]]
<http://www.w3.org/2005/Incubator/XGR/about.html>
--- [[助動詞]]は[[RFC 2119]]の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により、[[小文字]]、[[太字]]に。
- [87] [[HTML]] [CODE(HTMLe)@en[[[span]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE@en[term]])
-- [CITE@en[SVG 1.1/1.2/2.0 Requirements]] 
<http://www.w3.org/TR/2002/WD-SVG2Reqs-20020422/#sec-terminology>
--- 各助動詞は独自の定義。
--- [[小文字]]。
--- [[スタイル・シート]]により[[赤]]色の[[太字]]に。
- [4] [[HTML]] [CODE(HTMLe)@en[[[span]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE@en[verb]])
-- [CITE@en[XSL Transformations (XSLT) Version 2.0]] 
<http://www.w3.org/TR/2007/REC-xslt20-20070123/>
--- 各助動詞は [[RFC 2119]] の定義。
--- [[小文字]]。
--- [[スタイル・シート]]により [CODE(CSS)@en[[[small-caps]]]] に。
- [5] [[HTML]] [CODE(HTMLe)@en[[[strong]]]] [[要素]]
-- [21] [CITE@en[XSLT 2.0 and XQuery 1.0 Serialization]] 
<http://www.w3.org/TR/2007/REC-xslt-xquery-serialization-20070123/#terminology>
--- 各助動詞は [[RFC 2119]] の定義。
--- [[大文字]]。
--- [[スタイル・シート]]により[[太字]]に。
-- [15] [CITE@en-US[SPARQL Protocol for RDF]] ([TIME[2008-01-16 01:09:16 +09:00]] 版) <http://www.w3.org/TR/2008/REC-rdf-sparql-protocol-20080115/#intro>
--- 各助動詞は[[RFC 2119]]の定義。
--- [[小文字]]。
-- [18] [CITE@en[XQuery 1.0 and XPath 2.0 Data Model (XDM)]] 
<http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/#terminology>
--- 各[[助動詞]]は [[RFC 2119]] の定義。
--- [[小文字]]。
- [24] [[HTML]] [CODE(HTMLe)@en[[[strong]]]] [[要素]]
([CODE(HTMLa)@en[[[class]]]] [CODE(HTML)@en[[[keyword]]]])
-- [25] [CITE@en[Evaluation and Report Language (EARL) 1.0 Schema]] 
<http://www.w3.org/TR/2007/WD-EARL10-Schema-20070323/#keywords>
--- [[助動詞]]は [[RFC 2119]] の定義。
--- [[小文字]]。
--- [[スタイル・シート]]により[[太字]]・[[斜体]]に。
- [6] [[HTML]] [CODE(HTMLe)@en[[[b]]]] [[要素]]
-- [CITE@en[xml:id Version 1.0]] 
<http://www.w3.org/TR/2005/REC-xml-id-20050909/#dt-must>
--- 助動詞は [[RFC 2119]] の定義。
--- [[小文字]]。
-- 昔から [[XML]] 系仕様書に多い様式で、
他の定義語などにも [CODE(HTMLe)@en[[[b]]]]
が使われています。
- [17] [[HTML]] [CODE(HTMLe)@en[[[a]]]] [[要素]]
-- [19] [CITE@en[XQuery 1.0: An XML Query Language]]
<http://www.w3.org/TR/2007/REC-xquery-20070123/#id-xquery-conformance>
--- [[助動詞]]は [[RFC 2119]] の定義を参照しつつ、
同じことを仕様書中で再定義しています。
--- [[大文字]]。
--- [CODE(HTMLa)@en[[[href]]]] がその定義を指しています。
-- [20] [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] 
<http://www.w3.org/TR/2007/REC-xpath-functions-20070123/#terminology>
--- [[助動詞]]は独自の定義。
--- [[小文字]]。
--- [CODE(HTMLe)@en[[[a]]]] [[要素]]の先頭と末尾に
[Q[[CODE(HTML)@en[<span class="arrow">・</span>]]]]
が挿入されています。これは、
この仕様書で定義されている他の[[用語]]の[[参照]]でも同じです。
--- [CODE(HTMLa)@en[[[href]]]] がその定義を指しています。
-- [23] [CITE@en[XQuery Scripting Extension 1.0 Requirements]] <http://www.w3.org/TR/2007/WD-xquery-sx-10-requirements-20070323/#terminology>
--- [[助動詞]]は [[RFC 2119]] の定義。
--- [[小文字]]。
--- [CODE(HTMLa)@en[[[href]]]] が[[参考文献]]として提示されている
[[RFC 2119]] の項目を指しています。
- [3] [[XML Spec]] (2.5版以降) [DFN[[CODE(XMLe)@en[rfc2119]]]] [[要素]]
-- [[XML 1.1]] などの [[XMLspec]] 版で。
-- [[大文字]]。
-- [157] 
[CITE[The XML Spec schema and Stylesheets]], [TIME[2011-09-07T14:47:11.000Z]], [TIME[2024-08-24T03:04:09.455Z]] <https://www.w3.org/2002/xmlspec/>
- [47] [[RFC 2629]] [CODE(XMLe)@en[[[bcp14]]]] [[要素]]
-- [[大文字]]
- [12] [[文]]全体が [[HTML]] [CODE(HTMLe)@en[[[span]]]] [[要素]]
-- [CITE@en[XHTML 2.0 - Conformance Definition]]
<http://www.w3.org/TR/2005/WD-xhtml2-20050527/conformance.html#s_conform>
--- 助動詞は [[RFC 2119]] の定義。
--- [[小文字]]。
--- 助動詞単独では[[マーク付け]]なし。
--- 助動詞が含まれる[[文]]全体が [CODE(HTMLe)@en[[[span]]]]
[[要素]]で、 [CODE(example)@en[must]] のような
[CODE(HTMLa)@en[[[class]]]] つき。
--- [[スタイル・シート]]により[[文]]全体が[[イタリック]]で[[オレンジ]]色に。
- [10] [[大文字]]で[[マーク付け]]なし
-- というのは結構多いです。
-- 最近は陽にマークするのが流行ってきているようですが、
まだよく見かけます。
- [98] [[小文字]]で[[マーク付け]]なし
-- 昔から [[W3C]] の仕様書では多いです。
-- この方法を採用する各仕様書は、
[[小文字]]の方が読みやすいからそうしているのだと主張しています。
-- 要求事項であることを明確にし、
かつ強調するという[[大文字]]助動詞の役割を失っていて不便です。
-- 最近は陽にマークするのが流行ってきているようですが、
まだよく見かけます。
]FIG]

[7] [CITE@en[QA Framework: Specification Guidelines]] 
<http://www.w3.org/TR/2005/REC-qaframe-spec-20050817/#consistent-style-tech>

この [[W3C]] の仕様書のための指針では、 [[RFC 2119]]
の助動詞を使用し、それを[[マーク付け]]して明確にすることを勧めています
(が具体的な方法には触れず、 >>8 を参照しています)。

[13]
今のところ [[xml2rfc]] ([[RFC 2629]] の言語) で助動詞を[[マーク付け]]する方法はないみたいです。
([[名無しさん]] [WEAK[2005-11-11 05:20:45 +00:00]])

@@ WHATWG proposes class=ct and anne uses it in CSSOM
draft.

[100] [CITE@EN[XML Syntax for XQuery 1.0 (XQueryX)]] ([CODE[2007-01-19 07:17:16 +09:00]] 版) <http://www.w3.org/TR/2007/REC-xqueryx-20070123/#xqx_conformance>

[[RFC 2119]] を[[参照]]しつつ再定義

[27]
[CITE@en[Transforming RFC2629-formatted XML through XSLT]] ([TIME[2007-07-23 05:30:42 +09:00]] 版) <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html#extensions>


[92] 
[CITE[HTML Standard]] は昔一瞬だけ[[助動詞]]を[[マーク付け]]してたのですが、
[[可読性]]に難ありということでやめちゃいました。

-*-*-

[101] この [[SuikaWiki]] の記事では、[MUST[しなければならない]]のように[[強調]]と[[リンク]]により表記しています。

[148] [[SWML]] には専用の[[要素]]があります。
専用の[[要素]]の追加以前に書かれたところでは、
'''強調'''と[[リンク]]で表現されています。


[70] [CITE@en[SuikaWiki Markup Language (SWML)]] ([TIME[2016-11-15 14:20:00 +09:00]]) <https://suikawiki.github.io/spec-swml/spec/#conformance-keywords>

* その他

[123] かつて [[XHTML1]] は (なぜか) 独自に[[助動詞]]を定義していました。
[SEE[ [MUST[MUST]] など各項を参照。 ]]

[155] [CITE[PowerPoint プレゼンテーション - 20230623-nagai-v1.1.pdf]], [TIME[2023-06-28T01:47:59.000Z]], [TIME[2023-08-04T12:40:40.386Z]] <https://dnsops.jp/event/20230623/20230623-nagai-v1.1.pdf#page-12>

[156] >>155 「重要度」2段階 ×「緊急度」2段階に「MUST」「SHOULD」「RECOMMENDED」「MAY」
を割り当てている。「SHOULD」と「RECOMMENDED」が別の意味であることに注意。

* 関連

[32] [SEE[ 助動詞以外の用語は[[適合性]] ]]

* 歴史

[93] [CITE[IRC logs: freenode / #whatwg / 20100322]]
([TIME[2010-04-03 00:39:40 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100322>




[16]
[CITE[XSPF Version 1]] <http://xspf.org/xspf-v1.html#rfc.section.2.3.2.p.1>

> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document MUST NOT be interpreted as described in [RFC2119]. In this document these should be interpreted to mean that something shouted is important. XSPF is not a standards track document, it is an ad-hoc project by a group of individuals. Developers may, however, find that [RFC2119] is a useful source anyway.

ワロスwwwwwwww
([[名無しさん]] [WEAK[2006-08-21 12:37:11 +00:00]])

[26]
[CITE@ja[一歩先のWeb標準 ♯1 | Webデザイナー・クリエイター > アイデアノート | withD]] ([CODE[2007-04-28 11:35:15 +09:00]] 版) <http://wd.dsp.co.jp/web/idea/2159.html>

[[RFC 2119]] の用語を使っているかのように見えるが、
実のところそうではない。

> 最初の「必須レベル」は、DTD(XHTML&#8482; 1.1 - Second Editionから、XML Schemaという選択肢も加わりました)によって明示的に文法が定義されていますので、プログラムを使った文法の検証(validate)が可能です。

とかかなりあやしいことが書かれている。
([[名無しさん]] [WEAK[2007-04-28 02:49:23 +00:00]])



[FIG(quote)[
[FIGCAPTION[
[46] ([TIME[2015-05-12 21:52:50 +09:00]] 版)
<http://www.etsi.org/deliver/etsi_ts/103200_103299/103285/01.01.01_60/ts_103285v010101p.pdf>
]FIGCAPTION]

> In the present document "shall", "shall not", "should", "should not", "may", "need not", "will", "will not", "can" and
> "cannot" are to be interpreted as described in clause 3.2 of the ETSI Drafting Rules (Verbal forms for the expression of
> provisions).
> "must" and "must not" are NOT allowed in ETSI deliverables except when used in direct citation. 

]FIG]


[54] [CITE@en[Editorial: refactor to depend on the Infra Standard]]
([[domenic]]著, [TIME[2016-11-17 07:29:00 +09:00]])
<https://github.com/whatwg/html/commit/4ac633e08c2c9430853fc8322943bc2438ed36a3>

[55] [CITE@en[Editorial: start using the Infra Standard]]
([[annevk]]著, [TIME[2016-11-18 20:21:54 +09:00]])
<https://github.com/whatwg/encoding/commit/a26f76889bf393999e9caad84a3647ab09c39e09>

[56] [CITE@en[Editorial: start using the Infra Standard]]
([[annevk]]著, [TIME[2016-11-18 23:44:14 +09:00]])
<https://github.com/whatwg/fetch/commit/9ba4e78e5cb5fc1132f89d7e344cd2c2e1950c67>

[57] [CITE@en[Editorial: leave ASCII case-insensitive to Infra]]
([[annevk]]著, [TIME[2016-11-18 20:39:03 +09:00]])
<https://github.com/whatwg/html/commit/5f3f27bfdf0e0139f6cf5f22508f37710d917c00>

[58] [CITE@en[Editorial: make use of the Infra Standard]]
([[annevk]]著, [TIME[2016-11-18 20:06:36 +09:00]])
<https://github.com/whatwg/dom/commit/bb2890beed2be14d2f7633ec89e2bbb88ec7fdcd>

[59] [CITE@en[Editorial: use the Infra Standard]]
([[annevk]]著, [TIME[2016-11-21 20:27:58 +09:00]])
<https://github.com/whatwg/fullscreen/commit/06ae8faa6335bfdcc5c9d9e643c0cb797efbc9d9>

[FIG(quote)[
[FIGCAPTION[
[60] [CITE@en[RFC 7992 - HTML Format for RFCs]]
([TIME[2016-12-17 02:51:45 +09:00]])
<https://tools.ietf.org/html/rfc7992#section-9.9>
]FIGCAPTION]

>    This element marks up words like MUST and SHOULD '''['''BCP14''']''' with an HTML
<span> element with the CSS class "bcp14".
>    You <span class="bcp14">MUST</span> be joking.

]FIG]

[61] これ [MUST[MUST]] の利用例としておかしいだろ・・・

[62] [CITE@en[Editorial: avoid "must", "should" etc. in notes]]
([[zcorpan]]著, [TIME[2017-02-16 04:19:28 +09:00]])
<https://github.com/whatwg/html/commit/fb7f7676f625a2ce43efbccc97f356d4811972b8>

[63] [CITE@en[Clarify that the conformance section is widely applicable]]
([[annevk]]著, [TIME[2017-03-20 17:51:06 +09:00]])
<https://github.com/whatwg/infra/commit/fc952b8110467bd4357cf9d3ce97d430117918ee>

[64] [CITE@en[Editorial: fix usage of RFC 2119 terms in non-normative notes]]
([[domenic]]著, [TIME[2017-03-29 15:32:24 +09:00]])
<https://github.com/whatwg/streams/commit/39265f49c57e1303f78b33a2014fd1b51c2acfa7>

[65] [CITE@en[Editorial: remove normative keywords from notes]]
([[annevk]]著, [TIME[2017-04-07 17:53:55 +09:00]])
<https://github.com/whatwg/dom/commit/4ba35d93cff40fd3d3137ed44e803df17296a8cd>

[66] [CITE@en[Editorial: remove "may" from statements of fact]]
([[annevk]]著, [TIME[2017-04-16 20:02:06 +09:00]])
<https://github.com/whatwg/html/commit/91aff6d3c94a40742192b05e9d7964d95cdaaa0a>

[67] [CITE@en['''['''css-images''']''' Remove confusing RFC 2119 MUST from sentence to resolve …]]
([[LeaVerou]]著, [TIME[2017-04-19 14:36:56 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/33ec302371a0a7b5422de682c2a259fb5252766a>

[68] [CITE@en[Editorial: avoid normative keywords in notes]]
([[annevk]]著, [TIME[2017-04-24 17:59:45 +09:00]])
<https://github.com/whatwg/notifications/commit/fb423c7e3c5e91ff33b11cb79eaaf6370246cff1>

[69] [CITE@en[Meta: use allow-2119 to silence Bikeshed]]
([[annevk]]著, [TIME[2017-04-26 17:27:06 +09:00]])
<https://github.com/whatwg/infra/commit/534146eccfd17f65118d314b714655b62533971f>

[94] [CITE@en[Add "willful violation", and willfully violate RFC 8174]]
([[domenic]]著, [TIME[2017-05-27 08:22:06 +09:00]])
<https://github.com/whatwg/infra/commit/97e08e4137ebec70860c61f47992a40609d0b9fe>


[75] [CITE@en[Suggest alternate keywords for non-normative content]]
([[tobie]]著, [TIME[2017-09-13 10:53:44 +09:00]])
<https://github.com/whatwg/infra/commit/c9cf34165839b9a43dc0e85e5266351ef07497a5>

[76] [CITE@en[Editorial: add note about keyword suggestion for non-normative content by tobie · Pull Request #151 · whatwg/infra]]
([TIME[2017-09-14 14:39:23 +09:00]])
<https://github.com/whatwg/infra/pull/151>

[77] [CITE@en[RFC 7692 - Compression Extensions for WebSocket]]
([TIME[2017-09-19 00:18:15 +09:00]])
<https://tools.ietf.org/html/rfc7692#section-2>

[78] [CITE@en[RFC 7322 - rfc Style Guide]]
([TIME[2017-10-22 17:40:00 +09:00]])
<https://tools.ietf.org/html/rfc7322#section-4.8.2>

[79] [CITE@en[Editorial: Fix “should” in input/textarea domintro]]
([[sideshowbarker]]著, [TIME[2017-10-28 13:01:49 +09:00]])
<https://github.com/whatwg/html/commit/a1c7bf04c48117242dc67ec3eecc8960951c25c0>

[80] [CITE@en[Editorial: Fix “should” in input/textarea domintro by sideshowbarker · Pull Request #3168 · whatwg/html]]
([TIME[2017-10-30 14:09:57 +09:00]])
<https://github.com/whatwg/html/pull/3168>

[81] [CITE@en[Fix MUST/should incosistency]]
([[estark37]]著, [TIME[2017-11-06 02:40:43 +09:00]])
<https://github.com/w3c/webappsec-referrer-policy/commit/455b22cbd48aac776da73cba0688a3b3143d827c>

[82] [CITE@en[RFC2119 Styles · Issue #126 · w3c/tr-design]]
([TIME[2017-12-14 02:59:06 +09:00]])
<https://github.com/w3c/tr-design/issues/126>

[83] [CITE@en[Readability of RFC 2119 terms · Issue #1380 · w3c/respec]]
([TIME[2017-12-14 03:01:33 +09:00]])
<https://github.com/w3c/respec/issues/1380>

[84] [CITE@en[Meta: use new WHATWG boilerplate and license]]
([[domenic]]著, [TIME[2018-01-04 08:16:24 +09:00]])
<https://github.com/whatwg/compat/commit/f337512db215d4871c4035bd96aed6abd4721ffc>

[85] [CITE@en[Editorial: avoid normative keywords in domintro block]]
([[annevk]]著, [TIME[2018-05-24 19:45:28 +09:00]])
<https://github.com/whatwg/fetch/commit/78a8dcd9de92a34e1f16e9728784b77a033a654d>

[86] [CITE@en[Editorial: avoid normative keywords in domintro block by annevk · Pull Request #734 · whatwg/fetch]]
([TIME[2018-05-31 00:07:40 +09:00]])
<https://github.com/whatwg/fetch/pull/734>







[126] [CITE@en[Editorial: avoid normative keywords in domintro block]]
([[annevk]]著, [TIME[2018-05-24 19:45:28 +09:00]])
<https://github.com/whatwg/fetch/commit/78a8dcd9de92a34e1f16e9728784b77a033a654d>

[127] [CITE@en[Editorial: avoid normative keywords in domintro block by annevk · Pull Request #734 · whatwg/fetch]]
([TIME[2019-02-23 17:53:06 +09:00]])
<https://github.com/whatwg/fetch/pull/734>

[149] [CITE@en[RFC 2480 - Gateways and MIME Security Multiparts]]
([TIME[2021-01-31T16:16:40.000Z]], [TIME[2021-03-26T05:53:16.641Z]])
<https://tools.ietf.org/html/rfc2480#section-2>