以下使用 XHTML 1.0 的常见问题解答代码段将无法在 W3C 验证器中成功验证。
我将问答插入定义列表中,以便在语义上维护问答关系。问题是,问题可以是多个段落。至少在 XHTML 1.0 中,<dt>
标记只允许内联元素。所以我不能在那里放置一个<p>
标签,而不会在 W3C 验证器中抛出错误。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<dl>
<dt>
<p>This is a very long question.</p>
<p>It has multiple paragraphs.</p>
</dt>
<dd>
<p>This is the answer</p>
</dd>
</dl>
</body>
</html>
有没有语义上更好的方法来使用 XHMTL 1.0 过渡对此进行编码?
作为参考,我可以找到的关于该主题的最新类似线程是,这是语义上构建常见问题解答的最佳方法是什么?该线程很有用,但是它没有涵盖问题中的多个段落。
使用 dl
元素似乎不合适。
XHTML 1.0使用HTML 4.01中的元素定义,其中dl
元素被定义为"定义列表"。问答列表可能不是定义列表(除非,也许,要定义的术语只是表述为问题,例如,"foo的定义是什么?")。
HTML5重新定义了dl
元素:它不再是一个定义列表,而是一个"关联列表"或"描述列表"。将其用于问答可能是合适的,dt
元素现在还可以包含大多数流内容元素(包括p
)。因此,如果您想使用(X)HTML5,这可能很合适。(dt
的示例甚至显示了常见问题解答。
可能的替代方案,具体取决于实际内容和上下文:
- 只需使用
p
并依靠文本语义,即"?"清楚地表明这是一个问题。您也可以在它们前面加上"问题:"和"答案:"(例如,在b
中)。 - 为每个问答使用标题(
h1
-h6
)。由于它们都不能包含p
元素,因此您可能必须使用类似"问题 1"的内容作为标题内容,并再次依赖文本。