以下のQiitaの続き
XMLで使用できる文字コード
主な参考資料②のリンク先で確認すると、2026年4月11日執筆時点で最新のXML1.0で使える文字コードはDefinition: A character is an atomic unit of text as specified by ISO/IEC 10646:2000 [ISO/IEC 10646](定義:ここでの文字とは「ISO/IEC 10646:2000 [ISO/IEC 10646]」によって規定される最小単位のテキストである)とあることから、主な参考資料①発行時と変わらず、 「ISO/IEC10646」 とかいうやつらしい。
聞いたことがねえ。。(-_-;)なんだそれ??
少し調べてみた感じ、どうやらほぼUnicode(国際的な標準文字コード規格)と同じらしい
Shift-JIS(日本語対応文字コード規格)ではない。
結果として、XMLでは多くの環境依存文字(機種依存文字)は使えない
※文字コード、Unicode、Shift-JISについて詳しくは主な参考資料③参照
文字位置による使用可能な文字の制限
| 文字位置 | 使用可能な文字 |
|---|---|
| タグや属性名の先頭 | アルファベット、ひらがな、全角カタカナ、漢字、半角英字、アンダースコア( _ )、コロン( : ) |
| タグや属性名の2文字目以降 | 先頭で使える文字、半角数字、結合文字、エクステンダー 、ピリオド( . )、ハイフン( - ) |
| 属性値 | タグや属性名の先頭及び2文字目以降で使える文字、(定義済み)実体参照、(パース済み)内部実体参照、文字参照、何らかの「空白」、全角スペース |
| テキストノード | タグや属性名の先頭及び2文字目以降で使える文字、(定義済み)実体参照、(パース済み)実体参照、文字参照、何らかの「空白」、全角スペース |
結合文字(combining character)
単独ではなく直前の文字を修飾するために使われる文字
「が」の濁点、「$\acute{a}$」のアクセント記号など
エクステンダー
他の文字の間に使用される文字「々(どう)」「ー(長音)」など
(定義済み)実体(entity)参照
「<」「&」など、そのまま使用するとXMLの構文解析上エラーになってしまう文字(実体)などをそれぞれ割り当てられた特定の文字列(実体名)で表現して、そのままの形で表現されるようにすること。 何回も同じ長い文字列をテキストノードに書くのにウンザリしたときに使う
| 実際に表現したい文字(実体) | 実体(entity)名 | 実体参照 | ※仮にそのままだとXMLのparser(構文解析プログラム)が何と誤認するか |
|---|---|---|---|
| < | lt(エルティー:Less Thanの略) | < | 何らかのタグの開始 |
| > | gt(Greater Thanの略) | > | 何らかのタグの終わり |
| & | amp | & | 何らかの実体参照の始まり |
| " | quot | " | 属性値を囲むもの |
| ' | apos | ' | 属性値を囲むもの |
実体名の先頭に「&」、最後に「;(セミコロン)」をつける
デフォルトのこれら以外にDTDなどを用いてユーザー側で定義できる(何回も使うものなどを定義したりする)主な参考資料④参照
DTDで実体参照を定義する方法の概要
<!ENTITY 実体名 "実際に置き換えたい文字列" >
というのをDTD側に書いて、XMLインスタンス側で
<sample>&実体名;</sample>
みたいな感じで呼ぶ。
〇XMLの中にDTDを書いた場合の例(通称:内部サブセット)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book [
<!ENTITY publisher "Example Corporation">
]> <!-- △「Example Corporation」の代わりにpublisherで済むようにする-->
<book>
<title>XML入門</title>
<publisher>&publisher;</publisher> <!-- publisherを実体参照として使用-->
</book>
〇外部DTDを使用した場合の例(通称:外部サブセット)
<!ENTITY publisher "Example Corporation">
<!DOCTYPE book SYSTEM "example.dtd"> <!--ここでのbookはルート要素-->
<book>
<publisher>&publisher;</publisher>
</book>
文字参照(文字の置き換え)
文字コードを直接指定して文字データを記述する方法。キーボードから直接入力できない文字やタグで使用する特別な意味を持つ文字を、テキストで使用する場合に使用
※ISO/IEC10646(≒Unicode)の文字コードを使用
文字コードを10進数で表したい場合 &#文字コード(の10進数表記);
文字コードを16進数で表したい場合 &#x文字コード(の16進数表記);
〇具体例1:著作権マーク (〇の中にCが入っているあれ)
© <!--文字コードは10進数表記-->
または
© <!--文字コードは16進数表記-->
主な参考資料⑤の方法でたどっても良いし、Aが要は「位の数が10」なので16進数から10進数に直して10進数表記を確認するときは「=10×16^1+9×16^0」として考えても良い
各文字のUnicodeを調べると、コードポイント(内部的な番号)というので管理されていて、慣例的にその番号が16進数になっている(2進数と相性が良いからぽい)
「A」:U+0041 の「0041」
「あ」:U+3042の「3042」
「🚁」:U+1F681の「1F681」
〇具体例2:絵文字
例えば、😀(U+1F600)は
😀 <!--文字コードは10進数表記-->
または
😀 <!--文字コードは16進数表記-->
何らかの「空白」
XMLでは、以下の4つは仕様上 「空白(whitespace)」 として特別扱いされる
・半角スペース(U+0020)
・Tab(U+0009)
・改行文字(※次の行に移動する(紙送りで1行下に進む) \n)(U+000A)
・復帰文字(※カーソルを行の先頭に戻す(※行は変わらず同じ行のまま)\r)(U+000D)
全角スペースはXMLでは空白として解釈されず、1つの文字として解釈される。
そのため、
〇〇 △△ <!--間にあるのは半角スペース-->
〇〇 △△ <!--間にあるのは全角スペース-->
は検索や比較で一致しないことがある
XMLにおける予約語のようなもの
上記の(定義済み)実体参照、文字参照の他に、xml~(※「x,m,l」は大小問わない)がタグ内の要素名・属性名における予約語(本来の用途以外で使ってはいけない/使うべきではない文字列) としてある
※以下のものと衝突しうるため
① xml ⇒ XML宣言において使用
② xmlns ⇒ 名前空間宣言時に使用(プレフィックスなしの全ての要素に適用される)
xmlnsの使用例
<xmlns> <!-- アウト -->
<item xmlns="http://example.com"> <!-- OK(これは正しい用途)-->
<item xmlnsAttr="abc"> <!-- これはOK(別物)-->
③ xml: ⇒ 標準で定義済みの名前空間プレフィックス(ざっと調べてみた感じ「lang」「space」の2種類??)
<note xml:lang="ja">
※上記の定義済みの名前空間として何がどう使えるかは例えば以下のサイトに記載があった
④ xmlns: ⇒ プレフィックス付き名前空間を定義するときに使用する(プレフィックスを付けた要素にだけ適用される)
<root xmlns:x="http://example.com">
<x:child>テキスト</x:child>
</root>
主な参考資料
①XMLマスター教科書 ベーシックV2 森田 浩美・中原 敬子 (著)
②公式Extensible Markup Language (XML) 1.0 (Fifth Edition)の2.2Characters(文字)
https://www.w3.org/TR/xml/?utm_source=chatgpt.com#charsets
③新人さんに知ってほしい「文字コードのお話」@yuji38kwmt in 有限会社来栖川電算 さんQiita
https://qiita.com/yuji38kwmt/items/b3a7820b4d3b544da4ff
④ごくごく簡単なDTDの説明 KANZAKIさんのWebサイト
https://www.kanzaki.com/docs/html/read-dtd.html#entity
⑤16進数から10進数への変換方法を学んだ @seshiruff4214(shota suzuki) in ディープロ(DPro)さん Qiita
https://qiita.com/seshiruff4214/items/e9ab86588eaee0703e6b