HTML5 <html> attributes xmlns, lang, xml:lang

32

3
从这个文件中,我认为已经很清楚了:“作者在HTML文档中的HTML元素上不能使用XML命名空间中的lang属性”,“注:在无命名空间、无前缀且字面名称为‘xml:lang’的属性对语言处理没有影响。”等等。(也就是说,在处理HTML而不是XML时使用lang但不要使用xml:lang - Chris Morgan
是的,我想我终于明白了。我之前有些困惑,因为我不太清楚在那个上下文中命名空间或前缀是什么意思。我猜 <html xml:lang="en-US"> 没有任何一个,因此 xml:lang 没有任何效果。 - ma11hew28
3
@Chris Morgan - 我认为这份文件并不清晰。它确实非常详细和精确,但是有很多微妙的内容。例如,“作者不能在HTML文档中的HTML元素上使用XML命名空间中的lang属性。” 用HTML解析器无法实现这一点,只能通过脚本编写来使用Document.createAttributeNS之类的方法实现。你明白吗? - Alohci
1
@Alohci 阅读 HTML 规范让我感到非常沮丧。听到其他人试图解释规范时,我也会因同情而流泪。总之,我真的很感激像这样的简单英语解释。 - peteorpeter
3个回答

36

我所见和听到的一切都表明,你应该坚持

<!DOCTYPE html>
<html>
  <head>
    <meta charset='UTF-8'>

(或者你想要的任何字符集)。如果你想要与页面相关联的语言,可以在 <html> 标签上使用 "lang" 属性。

由于 HTML5 实际上不是 XML,因此个人认为使用任何 xml: 命名空间的内容可能会让人感到奇怪。


3
好的,谢谢。那么我会选择像LinkedIn一样使用<html lang="en">。 - ma11hew28
4
如果在HTML标记中不指定xmlns属性,则无法获得有效的XHTML,如果你想要使用通用标记并且作为HTML或XHTML正确渲染,你需要添加xmlns属性(因为当作为应用程序/ xhtml + xml呈现时,否则将显示文档树而不是网页)。另一方面,如果在HTML5中使用xmlns元素,则W3C验证器将抛出错误,指出<meta http-equiv="content-type">中的http-equiv是无效值,即使你省略meta标签,它也会警告你应该将其添加到文档中。 - Triynko
2
此外,尽管HTML5不是XML,但它支持类似XHTML的语法,例如在空元素<br />上,并且最终将所有内容放入XHTML命名空间http://www.w3.org/1999/xhtml中。 - Triynko
<meta> 标签不应该是自闭合的吗?像 <meta /> 这样,或者有什么原因不需要这样做吗?另外,据我所知,HTML 只是 XML 的超集。虽然它不是 XML,但它基于 XML。 - crush
5
XHTML5是有效的XML。由于有无数个XHTML解析器/处理器根本不知道(X)HTML5具体是什么,因此在多语言混合语法中省略xml:lang(和xmlns)是不明智的。 - jh72de
显示剩余3条评论

17

在text/html序列化中,xml:lang只是为了允许作者编写多语言文档-既是有效的XHTML5又是有效的HTML5。

在HTML(与XHTML相反)中,xml:lang根本不是XML命名空间中的属性,它是在null命名空间中称为xml:lang的属性。即冒号没有任何魔力属性,它就像属性名称中的任何其他字符一样。


回答你最初提出的关于en-US-x-hixie的问题:

en-US-x-hixieen-US(即美式英语)加上一个私有使用子标记-x-hixie,表示由HTML5编辑器Ian Hickson编写的US英语变体。

私有使用子标记在RFC:5646,BCP 47第2.2.7节 http://www.ietf.org/rfc/bcp/bcp47.txt 中定义。


0
lang 属性对于使用屏幕阅读器的用户来说,在 HTML 文档中起着非常重要的作用。因此,考虑到可访问性,您肯定会想要使用它。这个视频是最好的论据:https://youtu.be/0uzxu9dQnuU "Effect of lang attribute on JAWS speech"。它展示了屏幕阅读器如何发音英语文本,以西班牙语、法语或德语的发音方式(这非常难以理解),只是因为每次设置了 lang 属性为这些语言。
此外,请查看 https://www.w3.org/International/questions/qa-lang-why.en,其中提到了一些很好的原因:
  • 样式(例如不同语言的不同字体)
  • 拼写和语法检查器
  • 翻译工具
  • 搜索结果(页面内部标记可以根据用户的语言偏好来提高其质量)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接