Webtech Walker

dl要素の仕様についての疑問

BLOCKQUOTE要素とCITE要素をめぐる考察

という記事をみて、元記事の内容とはまったく関係ないところに疑問をもってしまったんですが、定義リストの定義って微妙に手抜きがするなー気してきました。気になったのは以下の部分。

定義型リストは、通常は、項目と内容の2つの部分から成り立ち、DT要素に定義する語句を、DD要素にはその語句の説明を記述します。しかしながら、DL 要素は、使い方が柔軟で、DD要素あるいはDT要素のいずれか1つ以上を含めばよく、DDとDTの順番は問いません。また、DD要素ひとつに対して、複数のDT要素を含めても良いです。DT要素はインラインレベルの要素のみを含むことが出来て、DD要素は子要素として、ブロックレベルの要素のみを許可します。

確かにその通りですね。XHTML1.0StricのDTDを見ると、dl要素の定義は以下のようになっています。

<!ELEMENT dl (dt|dd)+>

これはdlの中にはdtとddのどちらかが最低一つ以上含まれるという意味です。柔軟と言えば柔軟ですけど、ちょっと緩すぎな気がします。この仕様だと以下のようなHTMLも許可されます。

<dl>
    <dt>項目1</dt>
    <dt>項目2</dt>
<dl>

これだとdtしかなくて定義リストとしての意味がまったくありません。

<dl>
    <dt>項目1</dt>
    <dd>項目1の説明</dd>
    <dd>項目2の説明</dd>
    <dd>項目2の説明</dd>
    <dt>項目2</dd>
</dl>

これはどのdtがどのddを説明しているかわかりませんよね。こんなわかりにくい書き方する人はいないと思いますけど、DTDでは許可されてるわけです。

で、これはできればこんな感じにしてほしかったという希望。

<!ELEMENT dl (di)+>
<!ELEMENT di (dt&dd)+>

di(Definition Item)という要素でグルーピングできるようにして、その要素にはdlとddがどちらも最低一つ以上ふくまれていなければならない。みたいな。

つまりさっきのソースはこんな感じなります。

<dl>
    <di>
        <dt>項目1</dt>
        <dd>項目1の説明</dd>
    </di>
    <di>
        <dd>項目2の説明</dd>
        <dd>項目2の説明</dd>
        <dt>項目2</dd>
    </di>
</dl>

これだとどのdtがどのddを対象にしてるか明確になりますよね。リストの中にdtだけとかddだけということも許可されません。

dtとddがグルーピングされてるとコーディングもやりやすいしなー。よくdlがずらっとならんでるの見るけど、もしこの仕様だったらそれも必要なかったのに、と思いました。

こんなこと言っても何にもならないはわかってます。ただの愚痴です。

追記

ブクマコメントでxhtml2にdi要素があるというのがあったので調べたら確かにあった。

XHTML 2.0 - XHTML List Module

これは知らんかった。

このエントリーをはてなブックマークに追加