语义,标准和标记中的源代码使用“lang”属性

时间:2011-02-27 16:10:39

标签: html standards web-standards semantic-markup

我无法找到以下的授权解释,微格式或指南,所以我把它打开了。如果我错过了什么,请说出来!

假设您有一个HTML页面,其中包含<pre>元素中某些编程源代码的示例:

<pre>
    # code...
</pre>

更新:正如Pekka在下面指出的那样,<code>可能比<pre>更好,但以下示例/讨论可以适用于两者。并且正如Brian Campbell所指出的那样两个元素当然应该用于预先格式化的代码

现在:您如何以语义正确且符合规范的方式声明<pre>块内容的编程语言

这将是以语义一致的方式包含在标记中的有用信息。

从语义角度来看,显而易见的选择是使用lang属性:

<pre lang="ruby">

根据HTML 4 spec, section 8.1.1

  

lang属性的值是一个标识自然语言的语言代码[...]计算机语言是从语言代码中明确排除

(强调我的)

此外,“ruby”无论如何都不是标准的语言代码。

规范允许使用x主标记添加“实验”或“私人使用”代码。规范中的示例是lang="x-klingon"

理论上,您可以使用x-rubyx-java等来声明<pre>块中包含的编程语言 - 除了看起来使用{{{ 1}}一般编程语言的属性。

HTML 5 spec on the topic并没有让事情变得更清楚。规范本身没有明确提到“自然”与“编程”语言。相反,它引用了读者BCP 47,其中(再次)说明:

  

语言标签用于帮助识别语言[...],但不包括主要用于人类交流的语言,例如编程语言。

然而,它继续提及(在第4.1节,第56页)lang主要语言子标签,其中:

  

标识语言分类不适合或不适用的内容。一些示例可能包括乐器或电子音乐[...]或编程源代码

(强调我的)

同样,规范似乎与自身相矛盾,但它开辟了使用zxx(或类似)作为完全符合规范的方式来声明要在中写入的可能性的可能性语言(只是非人类)声明涉及的特定(非人类)语言。

那么,有什么标准/微格式/微观科学/绅士的协议/ 任何有关于该怎么办?

就个人而言,我认为zxx-x-ruby是最完整的。 zxx-x-ruby本身更短更整洁,但除非我弄错了,x-ruby块仍会继承其父级的主要语言(例如<pre>en或类似的。)


附录:

正如Pekka在下面提到的那样,fr标签可能更合适,而且在语义上它只是非常整齐而不是简单地说<code>。但是,<code lang="...">标记也是内联元素,我最初只考虑较长的源代码运行,即声明块级<code>中包含的所有<code>元素的语言元件。

幸运的是,<pre>属性是全局的,可以应用于任何一个元素,因此任何一个都可以工作。

第二:我不小心输入了“zzx”到处而不是正确的“zxx”!它是一个'z',两个'x'。为混乱道歉。

2 个答案:

答案 0 :(得分:22)

答案 1 :(得分:0)

似乎没有比你提到的lang前缀误用zzx属性更好的方法(顺便提一下有趣的发现!)。 type属性可能略微更合适,但它当然在pre元素中无效。

顺便说一句,<code>(W3C参考here)可能比<pre>更合适:

  

HTML代码元素(<code>)表示计算机代码的片段。默认情况下,它以浏览器的默认等宽字体显示。