Я не смог найти основополагающие объяснения, микроформаты или рекомендации для следующего, поэтому я открываю его. Если я что-то пропустил, поговорите!
Скажем, у вас есть HTML-страница, которая включает пример некоторого исходного кода программирования внутри элемента <pre>:
<pre>
# code...
</pre>
(Обновление: как указывает Пекка ниже, <code> может быть лучше, чем <pre>, но следующие примеры/обсуждение могут применяться к обоим. И поскольку Брайан Кэмпбелл указывает, что оба элемента должны, конечно, использоваться для предварительно отформатированного кода)
Теперь: как вы - семантически корректным и совместимым со спецификацией способом - объявите язык программирования содержимого блока <pre>?
Это была бы полезная информация для включения в разметку семантически последовательным способом.
Очевидным выбором, с семантической точки зрения, было бы использовать атрибут lang:
<pre lang="ruby">
Но в соответствии с спецификацией HTML 4, раздел 8.1.1:
Значение атрибута lang - это код языка, который идентифицирует естественный язык [...] Языки компьютеров явно исключены из кодов языков.
(акцент мой)
И кроме того, "ruby" не является стандартным языковым кодом.
Спецификация позволяет добавлять "экспериментальные" или "частные" коды с использованием основного тега x. Пример из спецификации lang="x-klingon".
В теории вы могли бы использовать x-ruby, x-java и т.д., чтобы объявить язык программирования, содержащийся в блоке <pre>, за исключением того, что кажется, что спецификация недовольна использованием атрибута lang для языков программирования в вообще.
спецификация HTML 5 по теме не имеет четкого смысла. Сама спецификация явно не упоминает "естественные" и "программирующие" языки. Вместо этого он обращается к читателю BCP 47, в котором говорится (снова):
Языковые теги используются, чтобы помочь идентифицировать языки [...], но исключают языки, не предназначенные прежде всего для общения с людьми, например языки программирования.
Тем не менее, далее (в разделе 4.1, стр. 56) указывается основной заголовок zxx, который:
идентифицирует контент, для которого языковая классификация неприемлема или не применяется. Некоторые примеры могут включать инструментальную или электронную музыку [...] или исходный код программирования.
(акцент мой)
Опять же, спецификация кажется противоречивой самой, но она открывает возможность использования zxx-x-ruby (или подобного) как полностью spec-совместимого способа как объявления того, что должно быть написано на языке (просто не человека ) и объявление конкретного (нечеловеческого) языка.
Итак, есть ли какое-либо подобие стандартного/микроформатного/микросинтаксического/джентльменского соглашения/что-нибудь о том, что делать?
Лично мне нравится zxx-x-ruby как наиболее полно. x-ruby сам по себе является более коротким и более аккуратным, но если я не ошибаюсь, блок <pre> все равно наследует основной язык своего родителя (например, en или fr или аналогичный).
Добавление:
Как упоминает Пекка ниже, тег <code>, вероятно, был бы более уместным, и семантически было бы очень просто сказать <code lang="...">. Однако тег <code> также является встроенным элементом, и изначально я думал только о более длинных запусках исходного кода, то есть объявлял язык для всех элементов <code>, содержащихся в элементах уровня <pre>.
К счастью, атрибут lang является глобальным и может применяться к любому элементу, поэтому любой из них будет работать.
Во-вторых: я случайно набрал "zzx" везде вместо правильного "zxx"! Это один 'z', два 'x's. Извинения за путаницу.