пятница, 9 декабря 2011 г.

Вывод HTML5 doctype с помощью XSLT

Недавно я столкнулся с проблемой, что с помощью  xslt не смог вывести корректный doctype для html5:

 <!DOCTYPE html>

В первый раз, чтобы не тратить время, я решил эту проблему с помощью комментариев и CDATA. Этот вариант в любом случае выглядел костылем и я решил поискать в решение сети.

Лучшим местом для поиска ответа, как всегда, оказалась спецификация HTML5 на сайте W3C, в которой сказано, что доктайп вида:

<!DOCTYPE html SYSTEM "about:legacy-compat"> 


или 


<!DOCTYPE html SYSTEM 'about:legacy-compat'>


(отличаются лишь ковычками), является валидным, а строкa SYSTEM 'about:legacy-compat' может быть добавлена, в случае невозможности вывода более короткого доктайпа генератором html-кода (xslt-шаблонизатором в нашем случае). В ином случает подобную запись доктайпа использовать не следует.

Для того, чтобы вывести такую строку в xslt, нужно в тег <xsl:output> добавить атрибут doctype-system="about:legacy-compat", например вот так:

<xsl:output method="html"
encoding="UTF-8"
indent="yes"
cdata-section-elements="script noscript"
undeclare-namespaces="yes"
omit-xml-declaration="yes"
doctype-system="about:legacy-compat"/>


После чего в возвращенной html-странице отобразится вот такой вот doctype:


<!DOCTYPE html SYSTEM "about:legacy-compat">


Он, конечно, не так красив как обычный html5 доктайп, но зато валиден)

Комментариев нет:

Отправить комментарий