 | |  |
| Escaping |
|
| |
|
例えば要素内容として<test>という文字データを記述しようとしても、
XMLプロセッサはこれをtestという要素の開始タグであると解釈し、
おそらく「要素testに対する終了タグがない」とエラーを出すでしょう。
| |
|
XML文書では、特定の文字に特別な意味を与えていて、
例えば要素の中で現れる<という文字には"タグの始まり"という意味が与えられています。
| |
|
| |
|
特別な意味を持っていてそのまま使うことができない文字は、
文字参照や<などのエンティティ参照を使えば表すことができます。
これを、エスケープ(escape)すると言います。
| |
| 文字参照を使う場合には、該当するコード番号で参照します。 | |
|
エンティティ参照を使う場合、
<は<で、
>は>で、
&は&で、
'は'で、
"は"で、表します。
| |
|
| |
|
どの文字に特別な意味が割り当てられているかは、場所によって異なります。
| |
|
コメントと処理命令とCDATAセクション以外の場所では、
&や<の文字をそのまま使うことができません。
| |
|
例えば<test>という文字列を要素内容に文字データとして含めたい場合、
<test>または<test>と記述すれば、
要素testの開始タグとして解釈されずにすみます。
| |
|
属性値の中ではさらに、
値が"で囲まれる場合には属性値の中に現れる"を
エスケープする必要があり、
値が'で囲まれる場合には属性値の中に現れる'を
エスケープする必要があります。
| |
|
例えばMacDonald'sを属性値にしたい場合、
name='MacDonald's'とするとエラーになります。
name="MacDonald's"こうするのが最も簡単ですが、
name='MacDonald's'とすることもできます。
| |
| 処理命令の内容として現れる?>という文字列もエスケープする必要があります。 | |
|
エンティティ宣言で指定されるエンティティの値の中では、
%と&をエスケープする必要があり、
さらにその宣言で値が"で囲まれる場合には"を、
その宣言で値が'で囲まれる場合には'を、
エスケープする必要があります。
| |
|
CDATAセクションは、
<や&をエスケープしなくてよい場所ですが、
]]>という文字列が含まれる場合には
]]>のようにエスケープする必要があります。
| |
|
| |
|
通常、エンティティを使うためには、
エンティティ宣言をしなくてはならないのですが、
validかどうかをチェックされずwell-formedかどうかだけをチェックされる時には、
lt, gt, amp, apos, quot
という5つのエンティティは宣言なして使うことができます。
| |
|
validかどうかチェックされる場合には、
これらのエンティティにも宣言があることが望ましいとされています。
宣言する場合には、以下のように宣言されなければなりません。
| |
| <!ENTITY lt "&#60;">
| |
| <!ENTITY gt ">">
| |
| <!ENTITY amp "&#38;">
| |
| <!ENTITY apos "'">
| |
| <!ENTITY quot """>
| |
|
| |
| - まとめ
-
特別な意味が与えられた文字をそのままデータに含めたい場合、
エンティティ参照か文字参照を使ってエスケープする必要があります。
|
| |
|
  
| |
 | |  |