Я не смог найти основополагающие объяснения, микроформаты или рекомендации для следующего, поэтому я открываю его. Если я что-то пропустил, поговорите!
Скажем, у вас есть 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. Извинения за путаницу.