HTML5の名前文字参照の一覧は、公式ページからJSONデータで取得できる


## 概要

名前文字参照（Named character references）とは、HTMLで`&lt;`や`&copy;`などと記述する形式でおなじみの、[文字参照]の一種です。
HTML4までは文字実体参照（Character entity references）と呼ばれていたものの、HTML5からは名前文字参照（Named character references）という名称に変わっています[^文字実体参照から名前文字参照への名称変更]。

[^文字実体参照から名前文字参照への名称変更]: [XHTML5と文字参照 - 血統の森+はてな](http://d.hatena.ne.jp/momdo/20140118/p1)
  > 本題に入る前にまず[文字参照][hk//文字参照]（Character references）のおさらい。HTML4では、
  >
  > * [文字実体参照][hk//文字実体参照]（Character entity references）
  > * [数値文字参照][hk//数値文字参照]（Numeric character references）
  >
  > と呼ばれていたけれども[*1][XHTML5と文字参照//*1] [*2][XHTML5と文字参照//*2]、[HTML5][hk//HTML5]では、
  >
  > * 名前[文字参照][hk//文字参照]（Named character references）
  > * 10進数の[数値文字参照][hk//数値文字参照]（Decimal numeric character reference）
  > * 16進数の[数値文字参照][hk//数値文字参照]（Hexadecimal numeric character reference）
  >
  > と呼ばれている[*3][XHTML5と文字参照//*3] [*4][XHTML5と文字参照//*4]。[数値文字参照][hk//数値文字参照]は10進と16進が存在することが明示され、[文字実体参照][hk//文字実体参照]は名前[実体参照][hk//実体参照]という呼び方になった。

この名前文字参照には、HTML入門時に習うような`&lt;`、`&gt;`、`&amp;`などの他にも、`&mdash;`、`&para;`、`&lang;`、`&rang;`、`&efDot;`、`&SupersetEqual;`など、様々な種類があります。
大雑把に計測したところ、HTML5では2125種類あるようです[^名前文字参照の数]。

この名前文字参照の一覧がJSONデータとして公開されている事を知ったため、紹介させていただきます。

[^名前文字参照の数]: 以下のコードで計測しました。
    2016年3月10日9時現在、[HTML5](#html5)、[HTML 5.1](#html-51)、[HTML Living Standard](#html-living-standard)のいずれも2125種類のようです。

    ```js:JavaScript&#32;(ECMAScript&#32;2015)
    /**
     * 変数 entities には、あらかじめJSONからJavaScriptのオブジェクトに変換された
     * entities.jsonのデータが格納されているものとする。
     */

    /**
     * 一部の名前文字参照には末尾に";"が不要なようで、
     * entitiesには";"があるものと無いものが重複して含まれている。
     * （例："&yen;"と"&yen"など）
     * このため、そのような重複した名前文字参照を削除する。
     */
    var entitieNameList = Object.keys(entities)
      // 後続のフィルター処理を楽にするため、先頭の"&"と末尾の";"を（もしあれば）削除
      .map(n => n.replace(/^&|;$/g, ''))
      // 配列に重複して含まれる値を1つにする
      // @see http://qiita.com/cocottejs/items/7afe6d5f27ee7c36c61f
      .filter((x, i, self) => self.indexOf(x) === i);

    console.log('名前文字参照の数：' + entitieNameList.length);
    ```

    なお、名前文字参照の正確な仕様を把握できていないため、計測方法に誤りが含まれている可能性があります。
    このためこの計測方法は「大雑把」なものであり、種類数の正確性については保証できません。

## 公式のJSONデータ

### HTML5

#### JSONデータ

https://www.w3.org/TR/html5/entities.json

#### 仕様について

2014年10月28日に勧告されたバージョンのHTMLです。
既に勧告されたため、今後、この仕様が変更されることはなく、このJSONデータが変わる事もありません。

### HTML 5.1

#### JSONデータ

https://www.w3.org/TR/html51/entities.json

#### 仕様について

2016年内に勧告される予定のバージョンのHTMLです。つまり、まだ更新作業中です。
このため、現在（2016年3月10日）もHTML 5.1の仕様は確定しておらず、今後変更される可能性があります。

元々はHTML5と一体の仕様でしたが、HTML5の勧告に時間が掛かると判断されたため、HTML 5.1として分割されました[^HTML 5.1は元々HTML5]。

[^HTML 5.1は元々HTML5]: [HTML5勧告へのロードマップ。HTML 5.0とHTML 5.1に分けて、まずは2014年内を目指すとの案をW3Cが発表 － Publickey](http://www.publickey1.jp/blog/12/html5html_50html_512014w3c.html)
  > 「Plan 2014」では、現在勧告候補にあるHTML5を、HTML 5.0とHTML 5.1の二段階に分けて、HTML 5.0を2014年内に勧告とし、HTML 5.1は2016年内に勧告とすることが提案されています。

### HTML Living Standard

#### JSONデータ

https://html.spec.whatwg.org/entities.json

#### 仕様について

HTML5の仕様を発表したW3Cとは異なる、WHATWGというグループが策定しているHTMLの仕様です。

W3Cとは異なり、WHATWGではHTMLにバージョン番号を割り振らず、「HTML Living Standard」という単体の仕様を継続的に更新していく事となっています[^HTML Living Standardにはバージョンが無い]。
このため、仮に将来HTML6やHTML7にあたるような仕様が出る場合でも、「HTML Living Standard」は「HTML Living Standard」のまま、内容が更新されていく事になります。

[^HTML Living Standardにはバージョンが無い]: [HTML5と関連仕様を日本語で読む – 読み解くHTML5](http://html.yomitoku.net/)
  > W3C では、「HTML5」という名称を使って仕様書を作成していますが、WHATWG は、HTML 自体にはバージョン番号を割り振らず、「HTML Living Standard」 という1つの仕様書を継続的に更新していく、というスタンスを採っています。 ただし、仕様書の更新履歴はリビジョンという形で保存されているので、いつどこがどう変更されたかということは分かるようになっています。

つまり、今後もこのJSONデータは更新される可能性があり、そしてそれが終わることは無いでしょう[^今後もHTML Living StandardのJSONデータは更新され、終わらない]。

[^今後もHTML Living StandardのJSONデータは更新され、終わらない]: ただ、流石にWHATWGが解散したり、URL自体が変更された場合などは「このアドレスにあるJSONデータ」の更新は終わることになります。

余談ですが、現在のWebブラウザ制作陣は、W3Cの出した仕様ではなくこのHTML Living Standardを見ているようです[^ブラウザ制作陣はHTML Living Standardを見ている]。
また、W3Cが出したHTML5も、HTML Living Standardのコピーのようなものだそう[^HTML5はHTML Living Standardのコピー]。
今後の事も考えるなら、このJSONデータを利用したほうが良いでしょう…

[^ブラウザ制作陣はHTML Living Standardを見ている]: [HTML5 と WHATWG と Google Chrome。 W3C がHTML5…](https://plus.google.com/+HayatoIto/posts/axVAUzFEu4L)
  > A. そうだとよいのですが、残念ながら効果は限定的かもしれません。なぜなら私も含めて Chrome の中の人はHTML5仕様を「見ていません」。我々が見ているのは W3C の HTML5仕様ではなく WHATWG [1] の HTML Living Standard [2] です。そういう事実があるということを、Web開発者として知っておくと役に立つ時がくるかもしれません。たとえば Chrome の動作についてバグを報告してくださるときなどです。Chrome のバグトラッカー ([http://crbug.com/)](http://crbug.com/%29)上での議論で使用・参照されるHTML仕様は WHATWG の HTML Living Standard です。

[^HTML5はHTML Living Standardのコピー]: [運営メモ: WHATWG の HTML Living Standard と W3C の HTML5 仕様との関係についての最新情報 | Mozilla Developer Street (modest)](https://dev.mozilla.jp/2012/07/administrivia-update-on-the-relationship-between-the-whatwg-html-living-standard-and-the-w3c-html5-specification/)

---

[文字参照]: https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7

[hk//文字参照]: http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BB%B2%BE%C8
[hk//文字実体参照]: http://d.hatena.ne.jp/keyword/%CA%B8%BB%FA%BC%C2%C2%CE%BB%B2%BE%C8
[hk//数値文字参照]: http://d.hatena.ne.jp/keyword/%BF%F4%C3%CD%CA%B8%BB%FA%BB%B2%BE%C8
[hk//HTML5]: http://d.hatena.ne.jp/keyword/HTML5
[hk//実体参照]: http://d.hatena.ne.jp/keyword/%BC%C2%C2%CE%BB%B2%BE%C8

[XHTML5と文字参照//*1]: http://d.hatena.ne.jp/momdo/20140118/p1#20140118f1 "5.3 文字参照 http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/charset.html#entities"
[XHTML5と文字参照//*2]: http://d.hatena.ne.jp/momdo/20140118/p1#20140118f2 "5.3 Character references http://www.w3.org/TR/html401/charset.html#h-5.3"
[XHTML5と文字参照//*3]: http://d.hatena.ne.jp/momdo/20140118/p1#20140118f3 "8.1.4 文字参照 http://momdo.s35.xrea.com/web-html-test/spec/WD-html51-20131029/syntax.html#character-references"
[XHTML5と文字参照//*4]: http://d.hatena.ne.jp/momdo/20140118/p1#20140118f4 "8.1.4 Character references http://www.w3.org/TR/2013/WD-html51-20131029/syntax.html#character-references"