HTML5 doctype набора с XSLT

Как я чисто установил бы doctype файла к HTML5 через XSLT (в этом случае с collective.xdv)

Следующее, которое является лучшим мое нечто Google, смогло найти:


производит:


133
задан Paul Sweatte 20 March 2013 в 22:17
поделиться

7 ответов

Я думаю, что в настоящее время это поддерживается только путем записи 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'>&lt;!DOCTYPE html&gt;</xsl:text>
    <html>
    </html>
  </xsl:template>

</xsl:stylesheet>

Это даст следующий результат:

<!DOCTYPE html>
<html>
</html>
147
ответ дан 24 November 2019 в 00:01
поделиться

Используйте doctype-system вместо doctype-public

10
ответ дан 24 November 2019 в 00:01
поделиться

Вы должны использовать XHTML 1.0 Strict в качестве типа документа, если хотите, чтобы вывод XHTML согласовывался с HTML5, сериализатор xml libxml2 имеет специальный режим вывода. запускается доктипами XHTML 1.0, которые обеспечивают совместимость вывода с XHTML (например,
, а не
,

, а не
). doctype-system = "about: legacy-compat" не не запускает этот режим совместимости

Если вас устраивает вывод html, установите должен поступать правильно. Затем вы можете установить тип документа с помощью , хотя для этого потребуется подключение в соответствующем месте, так как XDV пока не поддерживает это.

На самом деле кажется, что тоже не помогает - в результате
выводится как

.

8
ответ дан 24 November 2019 в 00:01
поделиться

Чтобы использовать простой HTML-тип документа , вы должны использовать функцию disable-output-escaping : < xsl: text disable-output-escaping = "yes"> . Однако 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>
65
ответ дан 24 November 2019 в 00:01
поделиться

Извините за предоставление только ссылок, но это обсуждалось в группе 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

3
ответ дан 24 November 2019 в 00:01
поделиться

Этот вариант совета Йирки Косека через Расширенные темы 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>
6
ответ дан 24 November 2019 в 00:01
поделиться

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

Я понимаю, что это, вероятно, правильный, основанный на стандартах способ достичь того, что я хочу (я проголосовал за него как за таковой). Но первый способ не поддерживается (мой процессор падает), а второй все еще приводит к "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.

5
ответ дан 24 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: