dl

dl 要素 (HTML)

[6] dl 要素型dl は、 definition list (定義並び) の略です。 dl は、用語 (dt) と説明 (dd) で構成します。

仕様書

意味

[70] dl 要素は、 零個以上名前と値の群 (name-value group) で構成される関連付けリスト (association list) (説明リスト (description list) ) を表現します >>58

  1. *
    1. 名前と値の群

[71] 名前と値の群は、0個以上名前 (name) とそれに続く0個以上 (value) で構成されます。 HTML Standard適合する文書では、 必ず1個以上の名前と1個以上の値で構成されます。 >>58

  1. +
    1. 名前
  2. +

[75] 名前と値の群は、 用語 (term) 定義 (definition) メタデータの話題と値、 質問と回答、 その他色々な名前と値が組になったデータに使うことができます >>58

[91] しかし、対話マーク付けには不適切です >>58

[92] 名前と値の群の名前が互いに排他的であるべき (>>72) ところ、対話は同じ人の名前が何度も登場するので、 意味的に異なる構造を持っている、という理由でしょうか。

[73] 名前 (name) dt 要素子供によって表され、 (value) dd 要素子供によって表されます。 >>58

[74] dt 要素dd 要素は、 直接 dl 要素子供として現れる場合と、 dl 要素子供に含まれる div 要素子供に含まれる場合があります。 div 要素は、 群全体に対してスタイルを指定したり、大域属性マイクロデータのためにまとめたりする目的で使うことができます。 dl 要素意味には影響しません。 >>58

[80] dl 要素要素表現する名前と値の群を求めるには、 次のようにします >>58

  1. [81] 要素リストを、要素子供dt 要素dd 要素と、 要素子供div 要素子供dt 要素dd 要素をすべて木順に並べたものとします。
  2. [83] 群リストを、空リストに設定します。
  3. [84] 要素リストでない間、繰り返し、
    1. [82] 部分リストを、要素リストの先頭から、 0個以上dt 要素の連続の後に 0個以上dd 要素が連続する最大の部分リスト求めた結果に設定します。
    2. [85] 新しい名前と値の群を、群リストの末尾に追加します。
      名前
      部分リスト中の dt 要素木順のリスト
      部分リスト中の dd 要素木順のリスト
    3. [86] 部分リスト要素を、要素リストから削除します。
  4. [87] 群リストを返します。

[88] dt 要素dd 要素以外の内容は無視され、 dl 要素意味に寄与しません。

[89] div 要素dl 要素意味に寄与しません。 名前と値の群div 要素の境界をまたがる可能性もあります。 (ただし、そのような文書は、 HTML Standard内容モデル適合しません。)


[72] 1つの dl 要素において、 同じ名前の dt 要素が複数あるべきではありません >>58

[90] 「同じ」の意味は定義されていません。 textContent なのでしょうか。あるいは img 要素なども考慮する必要があるでしょうか。 構文上の制約というよりは意味に関する規定ということで、 人間が判断するべき事項であるため詳細な規則がないとも思われます。

[76] 1つの群の中の複数の値は、代替 (alternative) を表します。 1つの値を複数の段落で記述したい時は、 1つの dd 要素の中に全段落を含めなければなりません>>58

[77] 例えば

<dl>
  <dt>月
  <dd>年を12に分割した期間。
  <dd>地球の衛星。
</dl>
... は、「月」の2つの意味を説明しています。一方で、
<dl>
  <dt>地球
  <dd>
    <p>太陽系第3惑星。
    <p>衛星に月がある。
</dl>
... は、「地球」の1つの意味を説明しています。

[78] リスト内の群の順序や、 群内の名前の順序や値の順序は、 意味を持つかもしれません。 >>58

[79] 例えばアルゴリズムの説明で値による複数の分岐 (switch) を記述したい時、 「それ以外の場合」のような名前は、 群の順序が失われると意味不明になってしまいます。

歴史

[7] HTML 4 仕様書は、 dl について、次のように説明しています。

Definition lists, created using the DL element, generally consist of a series of term/definition pairs (although definition lists may have other applications).

dl 要素を使って作成する定義並びは、 通常用語・定義の組の系列から成ります (が、定義並びは他の応用も持つかもしれません)。

その上で、 >>8-9 のような、厳密にいえば定義とは言えないような例を挙げています。

[12]

Another application of DL, for example, is for marking up dialogues, with each DT naming a speaker, and each DD containing his or her words. HTML 4 10.3.1

と、会話 (対話) のマークにも使えるとされています。

[13] このように、仕様は名前と値の組を持つリストへの幅広い応用を認めていますが、 要素型名の通り定義に限って使用するべきであると考える人もいます。

[19] 歴史を遡ると、 1993年1月に Tim論理的・意味的なマーク付けは好きだけど、 HTML は広範囲の意味・データを扱うし、要素型名は覚えやすいようにつけてあるのだ と言って dl も名前にこだわらず使うことができることを示しています。

<http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1993q1.messages/64.html>

[21] HTML 4 DTD の注釈 (参考) には definition lists - DT for term, DD for its definition と説明があります。 (名無しさん [sage])

[24] >>19 それより前の1992年に既に HTML の仕様書には用語集に限らず名前付きリスト一般に使ってよいことが明記されています (>>16)。 (名無しさん [sage])

[26] 現在の慣行と現在の仕様書の見解と HTML に導入した人の見解が見事に一致してるのに、 なんで Strict 系原理主義者は定義リストにこだわるのでしょうね?

(名無しさん 2005-11-14 13:58:48 +00:00)

[27] >>26 Strict 系原理主義者Strict 系過激派に修正でよろしくw

[56] その後の HTML5 により、 dl が定義以外にも用いることができることは、 更に明確化されました。

[57] HTML5 以後に書かれた解説の類の中には、 HTML4 で定義リストだったのが HTML5 でそれ以外にも使えるように変更された、 とするものが少なからずあります。

実際には、本章で示した通り、それまでも定義以外に用いることが認められていました。 そのような解説の類は、 HTML4 やそれ以前の仕様書を参照せずに思いつきで適当なことを書いているか、 他の解説からコピペしているのか、どちらにしても信用に値しません。

分類

[59] dl 要素は、フロー内容です >>58

[60] dl 要素は、 子供に名前と値の群が含まれる場合、 触知可能内容です >>58

タグ

[66] 開始タグ終了タグも必須であり、省略できません >>58

属性

[5] 大域属性を使うことができます >>58

[94] dl 要素廃止された属性

内容

[63] dl 要素内容は、 0個以上の名前と値の群です。 >>58

[64] それとは別に、要素間に0個以上スクリプト支援要素を含めることができます >>58

[65] 名前と値の群は、

... のいずれかの方法で表します >>58div 要素を使う場合、その子供dt 要素dd 要素となります。 1つの dl 要素では、 dt 要素dd 要素を使う方法と、 div 要素を使う方法とのどちらか一方に統一しなければなりません >>58

  1. ?
    1. |
      1. +
        1. div
      2. +
        1. +
          1. dt
        2. +
          1. dd

歴史

HTML 2.0 の dl 内容モデル

[31] 1992年6月6日の Dan ConnollyDTD 案では、 dl内容モデル(dt, dd)+ と定義されていました。

[32] 1992年12月3日の Dan ConnollyDTD 案では、 dtdd (と li)強制空要素に変更され、 dl内容モデル(dt | dd | a | p | #PCDATA)* とされました。更に、注釈宣言として Content should match ((DT,(A|#PCDATA)+)+,(DD,(A|#PCDATA)+)) But mixed content is messy. とのメモがありました。

[43] 1993年1月14日に Dan Connolly は、 dlp を認めるべきかの問題に関し、1つの dt に対して dd を複数書けるようにしたらよいのではと述べています。

[33] >>32 の定義は (細かい表現は変わりながらも) 長く変更されずにいましたが、1994年4月9日の案では、 dtdd (と li)終了タグが復活し、 dl内容モデル(dt*, dd?)+ に変わりました。

この内容モデル曖昧 (非決定的) でまずい。

[44] 1994年6月の HTML 仕様案では、

  • dt 要素dd 要素用語定義を先導すること、
  • dtdd は組で使うこと、
  • dd が後にこない dt も認められる (その場合続く定義dd と等価) こと、

が規定されていました。

[34] 1994年11月15日の HTML 2.0 DTD 案では、 (dl | dd)+ という簡単な定義に変わりました。

HTML 2.0 最終版 (RFC 1866) は最終的にこの内容モデルを採用しています。

[49] RFC 1866 には

Multiple <DT> may be paired with a single <DD> element. Documents should not contain multiple consecutive <DD> elements.

とあります。

HTML 3.0 の dl 内容モデル

[39] 1993年7月13日版 HTML+ DTD 案では、 dl内容モデルは、 (dt, dd)+ とされていました。

[40] 1993年11月8日版 HTML+ DTD 案では、 dl内容モデルは、 (dt+, dd)+ とされていました。

[41] 1994年1月5日版 HTML+ DTD 案では、 dl内容モデルは、 (dt*, dd)+ とされていました。

この内容モデル曖昧 (非決定的) なのでよくない。

[42] 1994年4月5日版 HTML+ DTD 案では、 dl内容モデルは、 (dt+, dd)+ に戻されています。 [35] 1995年3月1日版、24日版の HTML 3.0 DTD 案では、 dl内容モデルlh?, (dt | dd)+) で、 this is perhaps too lax? という注釈が付されていました。

HTML 3.2 の dl 内容モデル

[36] 1996年5月6日版の HTML 3.2 DTD 案では、 dl内容モデルは、 HTML 2.0 (>>34) より更に緩められ、 (dt | dd)* とされています。

[37] しかし、1996年9月18日版の HTML 3.2 DTD}] 案では、再度 HTML 2.0 (>>34) と同じ (dt | dd)+ に戻されています。

結局 HTML 3.2 勧告HTML 2.0 と同じ、 この内容モデルを採用しています。

HTML 4 の dl 内容モデル

[38] 1996年7月10日版に HTML 4.0 DTD 案では、当時の HTML 3.2 DTD 案同様、 (dt | dd)*内容モデルとされていました。 9月3日版まではこの内容モデルですが、 1997年7月8日版までには HTML 3.2 勧告と同じ、 (dt | dd)+ に変更されています。

結局 HTML 4 勧告厳密DTD移行用DTDも、 HTML 2.0HTML 3.2 と同じ内容モデル (dt | dd)+ を採用しました。XHTML 1 もこれを受け継いでいます。

文脈

[61] dl 要素は、フロー内容が期待される場所で使えます >>58

レンダリング

[11] HTML 4 仕様書は、レンダリングは UA 依存としています。

ただし、 >>10 のようなレンダリング例を挙げています。 多くの視覚的 UA は (compact 属性がなければ) 実際そのようにレンダリングします。

compact 属性に対応した UA は、 dtdd がそれぞれ別の行のこまとなる表のように表示するのが普通です。 (display: run-in と言った方が正確か。 もっとも、 HTML 4 は compact 属性の具体的効果にも言及してはいませんが、このように表現されるのが本来の compact 属性の意図です。)

[23] DLをTableに見せる <http://useyan.x0.com/s/html/css_sample/dl-table.html>

HTMLDListElement インターフェイス

[67] dl 要素要素インターフェイスは、 HTMLDListElement インターフェイスです >>58

[68] HTMLDListElement インターフェイスは、 HTMLElement インターフェイス継承しています >>58

[69] HTMLDListElement インターフェイスは、 HTMLConstruct を持ちます >>58

[95] HTMLDListElement インターフェイスメンバー

歴史

dl の誕生と意味

[15] dl 要素型に関する現時点で最古の記録は、 TimBL の記事 Re: status. Re: X11 BROWSER for WWW <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1991.messages/3.html> です。この記事によれば、遅くても1991年10月までには dl (と dtdd) が HTML 仕様に入ったことになります。

これ以前の記録が見つかっていないことから、どのような経緯で具体的にいつ HTML 仕様に取り入れられたのかは不明ですが、 SGML で一般によく使われる要素型名ですから、 他の SGML 語彙を参考にしたことは間違いありません。

[16] >>15 の記事では glossary としか説明がありませんが、 HTML 仕様はより詳しく説明しています。完全に残っている最古の仕様書である 1992年1月の版 (EMail Msg <9201091134.AA08666@ nxoc01.cern.ch > <http://ksi.cpsc.ucalgary.ca/archives/WWW-TALK/www-talk-1992.messages/0.html>) では、

A glosary (or definition list) is a list of paragraphs each of which has a short title alongside it. Apart from glossaries, this format is useful for presenting a set of named elements to the reader.

としています。このように、当初から、 単なる定義にとどまらない名前つきリストとして捉えられていたことがわかります。

[17] そのずっと後になりますが、 HTML+ の議論文書 (Definition Lists <http://www.w3.org/MarkUp/HTMLPlus/htmlplus_34.html>) は大変過激で、説明の大部分をわけのわからない会話例に費やしています。 (読んだ人は対話のマーク付けのための語彙と勘違いしてしまいそうです。)

[18] 一方で、 HTML 2.0 (や HTML 3.0) は

A definition list is a list of terms and corresponding definitions.

と、本来の語義に沿った説明をしています RFC 1866 5.6.5.HTML 3.2 は更に説明が簡単になって、直接的には definition list としか述べていません (あとは dtdd の説明)。 これが HTML 4 になって、 >>7-12 のように (HTML 的な) 元の解釈に歩み寄ったというわけです。

[14] 仕様書:

HTML4

[62] HTML 4 では、 %list; が認められる場所で使えるとされていました。

[10]

<DL>
  <DT>Dweeb
  <DD>young excitable person who may mature
    into a <EM>Nerd</EM> or <EM>Geek</EM>
  <DT>Hacker
  <DD>a clever programmer
  <DT>Nerd
  <DD>technically bright but socially inept person
</DL>

(HTML 4 仕様書から)

レンダリング例:

Dweeb
       young excitable person who may mature into a Nerd or Geek
Hacker
       a clever programmer
Nerd
       technically bright but socially inept person

[8] 厳密には定義とは言えない例:

<DL>
<DT><STRONG>Lower cost</STRONG>
<DD>The new version of this product costs significantly less than the
previous one!
<DT><STRONG>Easier to use</STRONG>
<DD>We've changed the product so that it's much easier to use!
<DT><STRONG>Safe for kids</STRONG>
<DD>You can leave your kids alone in a room with this product and
they won't get hurt (not a guarantee).
</DL>

(HTML 4 仕様書より)

[9] 他の並びと組合せた例:

<dl>
<dt><strong>The ingredients:</strong></dt>
<dd>
<ul>
<li>100 g. flour</li>
<li>10 g. sugar</li>
<li>1 cup water</li>
<li>2 eggs</li>
<li>salt, pepper</li>
</ul>
</dd>
<dt><strong>The procedure:</strong></dt>
<dd>
<ol>
<li>Mix dry ingredients thoroughly.</li>
<li>Pour in wet ingredients.</li>
<li>Mix for 10 minutes.</li>
<li>Bake for one hour at 300 degrees.</li>
</ol>
</dd>
<dt><strong>Notes:</strong></dt>
<dd>The recipe may be improved by adding raisins.</dd>
</dl>

[20] 仕様書での用語定義の例

<dl class="termlist">
<dt id="term-XHTML">XHTML</dt>
<dd>The Extensible HyperText Markup Language.	
XHTML is <em>not</em> the name of a single, monolithic markup language,
but the name of a family of document types which collectively form
this markup language.  The namespace URI for XHTML is
<code class="URI">http://www.w3.org/1999/xhtml</code>.</dd>
<dd class="note"><strong>Note:</strong> Future version of XHTML might use
different namespace.</dd>
(略)
<dt id="term-XHTML_Integration_Set_document_type">XHTML Integration Set
document type</dt>
<dd>A document type which conforms to the
"XHTML Integration Set Document Type Conformance" as defined in
section 3.2 of [<a href="#ref-xhtml-m12n">XHTMLM12N</a>].</dd>
</dl>

出典: XHTML Media Types <http://www.w3.org/TR/2002/NOTE-xhtml-media-types-20020801/#terms>

[22] dt のない例

<h2><a id="PER" name="PER">Proposed Edited Recommendations</a></h2>
<p>A Proposed Edited Recommendation is a technical report that W3C
has published for community review of important changes, some of which
may affect conformance. When there is consensus about the edits, the
document is published as a Recommendation.</p>
<dl>
<dd>There are currently no document at Proposed Edited Recommendation Status.</dd>
</dl>

出典: W3C Technical Reports and Publications <http://www.w3.org/TR/#PER> (2005年4月現在)

[25] >>22 の頁では該当する状態の文書がある時はその名前を dt, 著者名その他の情報を dd に入れており、 それとの整合性 (?) から該当する文書がないときに >>22 のようにマークしていると思われます。 (名無しさん [sage])

[28] 同じdt

1つのdlの中の複数のdtが等しいこともあり得ます。

<dl>
<dt><dfn xml:lang="en">left</dfn></dt>
    <dd>左</dd>
    <dd>左翼・左派・革新派</dd>
<dt><dfn xml:lang="en">left</dfn></dt>
    <dd><q xml:lang="en">leave</q>の過去形・過去分詞形</dd>
</dl>

[29] XHTML+CSS (r)evolution [42] <http://www.cybergarden.net/revolution/20060706/#[42]>

[30] GMLguidedl は定義リストと説明されていて、別に gl (用語リスト) があったりしたようです。 (名無しさん)

[45] html lecturte (2003-10-18 17:55:15 +09:00 版) <http://www.padrac.ne.jp/~sugimoto/JIN/html/html.html#3-5-2>

1995年12月にかかれたものらしい。

<dl>(defined list)

(名無しさん)

[46] >>45 には

<em>強調(emphasized)</em>

なんてのもでてきます。 (名無しさん)

[47] >>45-46

それでいて

<pre>プレフォーマット(preformat)</pre>

だから謎だ。 (名無しさん)

[48] 我的春秋: 定義リストの違和感(続) (2007-06-02 23:02:41 +09:00 版) <http://my-chunqiu.cocolog-nifty.com/blog/2007/05/post_82b8.html> (名無しさん 2007-06-02 14:06:37 +00:00)

[50] IRC logs: freenode / #whatwg / 20090909 ( 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20090909#l-341>

[51] WWW-Talk Apr-Jun 1993: Description Lists ( ( 版)) <http://1997.webhistory.org/www.lists/www-talk.1993q2/0208.html>

[52] IRC logs: freenode / #whatwg / 20130817 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20130817>

[53] ncsa-mosaic/CHANGES at master · alandipert/ncsa-mosaic ( ( 版)) <https://github.com/alandipert/ncsa-mosaic/blob/master/CHANGES#L1025>

[54] Web Applications 1.0 r8695 Catch up with recent changes that were made while the pipeline was down. Sorry for jamming all these changes into one patch. ( ( 版)) <http://html5.org/r/8695>

[55] Allow <div> around each <dt><dd> group in <dl> (#1945) (zcorpan著, ) <https://github.com/whatwg/html/commit/5454d702e0262749aba55576dda32c48e0e498f0>