Как я чисто установил бы doctype файла к HTML5 через XSLT (в этом случае с collective.xdv)
Следующее, которое является лучшим мое нечто Google, смогло найти:
производит:
Я думаю, что в настоящее время это поддерживается только путем записи doctype в виде текста:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
</html>
</xsl:template>
</xsl:stylesheet>
Это даст следующий результат:
<!DOCTYPE html>
<html>
</html>
Вы должны использовать XHTML 1.0 Strict в качестве типа документа, если хотите, чтобы вывод XHTML согласовывался с HTML5, сериализатор xml libxml2 имеет специальный режим вывода. запускается доктипами XHTML 1.0, которые обеспечивают совместимость вывода с XHTML (например,
, а не
,
, а не
). doctype-system = "about: legacy-compat"
не не запускает этот режим совместимости
Если вас устраивает вывод html, установите
должен поступать правильно. Затем вы можете установить тип документа с помощью
, хотя для этого потребуется подключение в соответствующем месте, так как XDV пока не поддерживает это.
На самом деле кажется, что
тоже не помогает - в результате
выводится как
.
Чтобы использовать простой HTML-тип документа
, вы должны использовать функцию disable-output-escaping
: < xsl: text disable-output-escaping = "yes"> xsl: text>
. Однако disable-output-escaping
является необязательной функцией в XSLT, поэтому ваш механизм XSLT или конвейер сериализации могут не поддерживать ее.
По этой причине HTML5 предоставляет альтернативный тип документа для совместимости с версиями XSLT, не поддерживающими HTML5 (т. Е. Со всеми существующими в настоящее время версиями XSLT) и другими системами, имеющими ту же проблему. Альтернативный тип документа -
. Чтобы вывести этот тип документа, используйте атрибут doctype-system = "about: legacy-compat"
в элементе xsl: output
без , используя doctype -public
атрибут вообще.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat"/>
...
<html>
</html>
</xsl:stylesheet>
Извините за предоставление только ссылок, но это обсуждалось в группе WHATWG, но прошло много месяцев с тех пор, как я занимался этим. Здесь Иэн Хиксон и некоторые эксперты по XML обсуждают это:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzlbidzl
и вот фактический номер проблемы:
http://www.w3.org/html/wg/tracker/issues/54
и вот это обсуждение
http: //www.contentwithstyle .co.uk / content / xslt-and-html-5-issues
Этот вариант совета Йирки Косека через Расширенные темы XDV на Plone.org , кажется, работает для меня в коллективный.xdv .
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
doctype-public="HTML"
doctype-system=""/>
</xsl:stylesheet>
Это комментарий, но у меня недостаточно баллов кармы, чтобы поместить его в правильное место. Вздох.
Я понимаю, что это, вероятно, правильный, основанный на стандартах способ достичь того, что я хочу (я проголосовал за него как за таковой). Но первый способ не поддерживается (мой процессор падает), а второй все еще приводит к "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" в моем doctype. Как предположил @Jirka Kosek, я думаю, что мой XSLT-процессор может быть сломан.
Нет, ваш XSLT-процессор не сломан, просто XDV добавляет:
по умолчанию, поэтому при добавлении второго
предыдущий doctype-public
не перезаписывается.
Обратите внимание, что XHTML 1.0 strict указан как устаревшая разрешенная строка doctype, поэтому вполне допустимо использовать этот doctype и по-прежнему называть его HTML5.