属性値リテラル

属性値リテラル

[27] 属性値表記 (attribute value literal) は、SGML構文において属性値を記述する方法の1つです。一般的な具象構文の元では引用符で括られた文字列であって、 中では文字参照認知されます。

定義

[1]

属性値表記 (attribute value literal)
参照の置換及び機能文字を無視する又は変換することによって属性値として解釈された区切られた文字列。 (JIS X 4151‐1992 3. (145))

[2] 解釈されたではなく解釈されるのような気が激しくしていますが。。。

関連

[3] SGML の生成規則的には、属性値表記属性値の一種です。 意味的には、属性値の表現方法の一種です。 (XML では唯一の属性値の表現方法です。)

生成規則属性値は、属性値指定の一部として、または属性定義既定値の指定方法の一種として使われます。

不思議解釈

[4] ×属性二重引用符の中では >>逃避しなければならない

間違いです。属性値表記 (二重引用符アポストロフィで囲まれた中) でも GREATER-THAN SIGN をそのまま書いて問題ありません。

正しい例:

<img title="&lt;img> の表示例">

正しい例:

<img title="&lt;img&gt; の表示例">

[28] 属性二重引用符の中では <&lt;逃避しなければならない

XML ではその通りですが、 SGML では一般に問題ありません。

SGML では正しいが、 XML では正しくない例:

<img title="<img&gt; の表示例" />

正しい例:

<img title="&lt;img&gt; の表示例" />

文字参照の利用

[5] 属性定義並び宣言に含まれる属性値表記中で一般実体参照を使う時は、その一般実体がその属性定義並び宣言より前宣言されていなければなりません (実体宣言されていることという整形式制約 <IW:XML1:"#wf-entdeclared"> または妥当性制約 <IW:XML1:"#vc-entdeclared">)。

[6] では、

  1. 文書要素以下に出現しない要素型属性既定値
  2. すべての要素指定されていて使用されない既定値
  3. 属性定義が重複していて使用されない既定値

に含まれる一般実体参照についてはどうなるのでしょう?

XMLの仕様書を読んだ限りではいずれの場合も制約の対象になりそうです。 (名無しさん)

[7] Firefox 1.5Opera 9はいずれも検出しますが、 WinIE 6は3つ目の誤りを検出しないようです。 (名無しさん)

[8] 例1:

<!DOCTYPE a [
  <!ATTLIST a b CDATA "&e;">
  <!ENTITY % q SYSTEM "q">
  %q;
]>
<a/>

例2:

<!DOCTYPE a [
  <!ENTITY % q SYSTEM "q">
  %q;
  <!ATTLIST a b CDATA "&e;">
]>
<a/>

  1. 例1は整形式か?
  2. 例2は整形式か?

(名無しさん)

[9] ただし、例1も例2も引数実体q一般実体eに関する実体宣言を含まないものとする。 (名無しさん)

[10] なお、 >>8 のいずれも、それが整形式であったとしても、 実体宣言されていることという妥当性制約に違反しているので誤りです。 属性値表記内に宣言を読んでいない実体への参照があるのは誤りという規定 <IW:XML1:"#AVNormalize"> もあります。 従って、 >>8 の2例とも、どう処理されるのかは実装依存です。

メモ

[25] 葉っぱ日記 - XSSの出題 回答編 (2007-03-15 03:50:33 +09:00 版) <http://d.hatena.ne.jp/hasegawayosuke/20070313/p1> (名無しさん 2007-03-15 13:02:25 +00:00)

[26] 葉っぱ日記 - で、ここからが本題 (2007-03-15 03:50:33 +09:00 版) <http://d.hatena.ne.jp/hasegawayosuke/20070313/p2> (名無しさん 2007-03-15 13:06:33 +00:00)