<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <code class="math"><dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性並び宣言<rt xmlns="http://www.w3.org/1999/xhtml">Attribute list declaration</rt></rubyb></dfn> = <dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>属性定義並び宣言</anchor><rt xmlns="http://www.w3.org/1999/xhtml">attribute definition list declaration</rt></rubyb></dfn></code>は、
ある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>に存在する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>とその型・既定値を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>するのに使う、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型宣言</anchor>中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク宣言</anchor>です。</p><blockquote><dl><dt>属性 (定義) 並び宣言 [attribute (definition) list declaration]</dt><dd>
属性 (定義) 並びを一つ以上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>と結合するマーク宣言。 <ins><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JIS X 4151</anchor>‐1992 3. (144)</ins></dd></dl></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> XML: <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-xml#attdecls">http://www.w3.org/TR/REC-xml#attdecls</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> XML では、一つの要素型に対して複数の属性並び宣言を書けます。
しかし、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性のため</anchor>、文書型定義を通して<ul><li>一つの要素型に対して高々1個の属性並び宣言を書くべきです。</li><li>あるの要素型の一つの属性について、高々1個の宣言を書くべきです。</li><li>一つの属性並び宣言では最低1個の属性を宣言するべきです。</li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <code class="SGML">attr (foo|bar) #<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FIXED</anchor> foo</code> 
は構文的に妥当だけど意味がない。 
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">モジュール化</anchor>とかしてると便利なこともあるかもしれない。)</p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">妥当</anchor>であるためには、属性並び宣言中の名前 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型名</anchor>) 
が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型宣言</anchor>で宣言されている必要があります。</p></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> XML を良く読んでみたら、そんな妥当性制約はないや。。。
属性並び宣言の要素型名って要素型宣言とは違ってどうでもいいんだ。。。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> この宣言は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型定義</anchor>中の前の部分でも後の部分でも構いません。 
(と思います。特に制約する規定はないはずです。)</p><section><h1>属性定義並び宣言 (SGML)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> = <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性並び宣言</anchor>。 Attribute definition list declaration。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <code class="ABNF"><dfn>属性定義並び宣言</dfn> := <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mdo</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ATTLIST</anchor> 1*<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor> 関連付けられる対象 1*ps <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性定義並び</anchor> 1*ps <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mdc</anchor></code> ;; <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JIS X 4151</anchor>‐1992 (141), <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebSGML</anchor> [141] </code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end><pre><code class="ABNF"><dfn>関連付けられる対象</dfn></code>
  := 
    ;; 要素型についての属性定義並び宣言
      <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関連付けられる要素型</anchor>
    / <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rni</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMPLICIT</anchor>
    / <code class="SGML">rni</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ALL</anchor>
    ;; 記法についての属性定義並び宣言
    / <code class="SGML">rni</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NOTATION</anchor> 1*ps
      (
        <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">記法名</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前群</anchor>
      / <code class="SGML">rni</code> IMPLICIT
      / <code class="SGML">rni</code> ALL
      )</pre><ul><li><code class="SGML">IMPLICIT</code> は、暗黙に宣言された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>又は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">記法</anchor>及びその <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD特性</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTDデータ実体</anchor>中で表現されるものを意味します。</li><li><code class="SGML">ALL</code> は、全ての要素型又は記法を意味します。</li></ul></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 素の SGML では、関連付けられる要素型は同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型定義</anchor>中の他の属性定義並び宣言で使われていてはなりません。 (10.3 参照。) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebSGML</anchor> では、この制限が撤廃されています。
同じ属性についての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性定義</anchor>が複数あれば、最初のものが採用されます。
(K.4.4 参照。)</p><p><code class="SGML">ALL</code> の定義は、名前又は <code class="SGML">IMPLICIT</code> を指定した定義により上書きされます。ですから例えば、<pre>&lt;!ATTLIST #ALL foo CDATA #IMPLIED&gt;
&lt;!ATTLIST bar  foo CDATA #REQUIRED&gt;</pre></p><p>なら <code class="SGML">bar</code> 要素の <code class="SGML">foo</code> 属性は必須です。</p><p>しかしながら、 <code class="SGML">ALL</code> で宣言された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ属性</anchor>を指定した後にその属性を再宣言することは、
Web SGML でも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">誤り</anchor>です。例えば、<pre>&lt;!ATTLIST #NOTATION #ALL foo CDATA #IMPLIED&gt;
&lt;!NOTATION somenotation SYSTEM [foo=bar]&gt;
&lt;!ATTLIST #NOTATION somenotation foo CDATA #IMPLIED&gt;</pre></p><p>は3行目で誤りとなります。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>属性定義並び宣言 (AFDR DTD)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10744</anchor>:1997 の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系DTD</anchor> で使用する、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性形式</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ属性形式</anchor>を定義する属性定義並び宣言でも、 
Web SGML と同じような拡張が使えます。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(その場合 (素の) SGML DTD ではなくなるので、 <code xmlns="http://www.w3.org/1999/xhtml" class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AFDR</anchor></code> 宣言が必要です。)</weak></p><ul><li>同じ要素型に関連付けられた属性定義並び宣言が複数あってもよい。</li><li>要素型が予約名 <code class="SGML">#<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ALL</anchor></code> なら、そこで定義された属性はその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系</anchor>のすべての<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素形式</anchor>で使える (<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">共通属性</anchor></dfn>)。</li><li>同じ要素型で同じ名前の属性定義が複数あれば、二つ目以降は無効。共通属性宣言は他の属性定義並び宣言の後にあるものとみなす。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">記法形式</anchor>に関連付けられる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ属性形式</anchor>の宣言についても同様である。</li></ul><p>仕様書: ISO/IEC 10744:1997 A.3.2.2
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.3.2.html#clause-A.3.2.2">http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.3.2.html#clause-A.3.2.2</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end>
SGML は属性名がすべて固有であることを要求していますから、
設計者は共通属性名が他のすべてと異なるように注意するべきです。
(NOTE 404)</p><p>(そうしないと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">派生体系</anchor>の側で上書きされれてしまった共通の属性形式が使えなくなってしまいます。)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>暗黙の属性定義並び宣言 (Web SGML)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> Web SGML で導入された
<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMPLYDEF</anchor> ATTLIST YES</code>
の状態では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型宣言</anchor>で属性定義並び宣言を明示しなくても属性が使えます。</p><p>宣言されていない属性が実現値に出現したら、
その属性は <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATA</anchor> #<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMPLIED</anchor></code>
として宣言されていたものとみなします。
(Web SGML K.3.7 b)1) 参照。)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>メモ</h1></section></body></html>