[27] [DFN[[RUBYB[属性値表記]@en[attribute value literal]]]]は、[[SGML]]
の[[構文]]において[[属性値]]を記述する方法の1つです。一般的な[[具象構文]]の元では[[引用符]]で括られた[[文字列]]であって、
中では[[文字参照]]が[[認知]]されます。

* 定義

[1] 

>
:属性値表記 (attribute value literal):
[[参照]]の置換及び[[機能文字]]を無視する又は変換することによって[[属性値]]として解釈された区切られた[[文字列]]。
([[JIS X 4151]]‐1992 3. (145))

[2]
[Q[解釈された]]ではなく[Q[解釈される]]のような気が激しくしていますが。。。

* 関連

[3]
[[SGML]] の生成規則的には、[CODE(ABNF)[属性値表記]]は[CODE(ABNF)[[[属性値]]]]の一種です。
意味的には、[[属性値]]の表現方法の一種です。
([[XML]] では唯一の属性値の表現方法です。)

生成規則[CODE(ABNF)[属性値]]は、[CODE(ABNF)[[[属性値指定]]]]の一部として、または[[属性定義]]の[[既定値]]の指定方法の一種として使われます。

* 不思議解釈

[4]
''×''[[属性]]の[[値]]で[[二重引用符]]の中では
[CODE(char)[>]] は [CODE(XML)@en[&[[gt]];]] と[[逃避]]しなければならない

間違いです。[[属性値表記]]
([[二重引用符]]や[[アポストロフィ]]で囲まれた中)
でも [CODE(charname)@en[[[GREATER-THAN SIGN]]]] をそのまま書いて問題ありません。

正しい例:
[PRE(HTML example code)[
<img title="&lt;img> の表示例">
]PRE]

正しい例:
[PRE(HTML example code)[
<img title="&lt;img&gt; の表示例">
]PRE]

[28] ''△''[[属性]]の[[値]]で[[二重引用符]]の中では
[CODE(char)[<]] は [CODE(SGML)@en[&[[lt]];]] と[[逃避]]しなければならない

[[XML]] ではその通りですが、 [[SGML]] では一般に問題ありません。

[[SGML]] では正しいが、 [[XML]] では正しくない例:
[PRE(HTML example code)[
<img title="<img&gt; の表示例" />
]PRE]

正しい例:
[PRE(HTML example code)[
<img title="&lt;img&gt; の表示例" />
]PRE]

* 文字参照の利用

[5]
[[属性定義並び宣言]]に含まれる[[属性値表記]]中で[[一般実体参照]]を使う時は、その[[一般実体]]がその[[属性定義並び宣言]]''より前''で[[宣言]]されていなければなりません
([[実体]]が[[宣言]]されていることという[[整形式制約]]
<IW:XML1:"#wf-entdeclared"> または[[妥当性制約]]
<IW:XML1:"#vc-entdeclared">)。

[6]
では、
= [[文書要素]]以下に出現しない[[要素型]]の[[属性]]の[[既定値]]
= すべての[[要素]]で[[指定]]されていて使用されない[[既定値]]
= [[属性定義]]が重複していて使用されない[[既定値]]

に含まれる[[一般実体参照]]についてはどうなるのでしょう?

[[XML]]の仕様書を読んだ限りではいずれの場合も制約の対象になりそうです。
([[名無しさん]])

[7]
[[Firefox 1.5]]と[[Opera 9]]はいずれも検出しますが、
[[WinIE 6]]は3つ目の[[誤り]]を検出しないようです。
([[名無しさん]])

[8]
例1:
[PRE(XML example code)[
<!DOCTYPE a [
  <!ATTLIST a b CDATA "&e;">
  <!ENTITY % q SYSTEM "q">
  %q;
]>
<a/>
]PRE]

例2:
[PRE(XML example code)[
<!DOCTYPE a [
  <!ENTITY % q SYSTEM "q">
  %q;
  <!ATTLIST a b CDATA "&e;">
]>
<a/>
]PRE]

= 例1は[[整形式]]か? 
= 例2は[[整形式]]か?

([[名無しさん]])

[9]
ただし、例1も例2も[[引数実体]][CODE(XML)@en[q]]は[[一般実体]][CODE(XML)@en[e]]に関する[[実体宣言]]を含まないものとする。
([[名無しさん]])

[10]
なお、 >>8 のいずれも、それが[[整形式]]であったとしても、
[[実体]]が[[宣言]]されていることという[[妥当性制約]]に違反しているので[[誤り]]です。
[[属性値表記]]内に[[宣言]]を読んでいない[[実体]]への[[参照]]があるのは[[誤り]]という規定 <IW:XML1:"#AVNormalize">
もあります。
従って、 >>8 の2例とも、どう処理されるのかは実装依存です。

* メモ

[25]
[CITE[葉っぱ日記 - XSSの出題 回答編]] ([CODE[2007-03-15 03:50:33 +09:00]] 版) <http://d.hatena.ne.jp/hasegawayosuke/20070313/p1>
([[名無しさん]] [WEAK[2007-03-15 13:02:25 +00:00]])

[26]
[CITE[葉っぱ日記 - で、ここからが本題]] ([CODE[2007-03-15 03:50:33 +09:00]] 版) <http://d.hatena.ne.jp/hasegawayosuke/20070313/p2>
([[名無しさん]] [WEAK[2007-03-15 13:06:33 +00:00]])
