Establecer doctype HTML5 con XSLT

¿Cómo puedo establecer claramente el doctype de un archivo en HTML5 través de XSLT (en este caso con collective.xdv )

Lo siguiente, que es lo mejor que mi Google foo ha podido encontrar:

  

produce:

  

Creo que esto solo se admite actualmente escribiendo el tipo de documento como texto:

 < ?xml version="1.0" encoding="utf-8"?>    <!DOCTYPE html>     

Esto producirá el siguiente resultado:

 < !DOCTYPE html>   

Para usar el tipo de documento HTML simple < !DOCTYPE html> , debe usar la función disable-output-escaping : <!DOCTYPE html> . Sin embargo, disable-output-escaping es una característica opcional en XSLT, por lo que su motor XSLT o canalización de serialización podría no ser compatible.

Por esta razón, HTML5 proporciona un tipo de documento alternativo para la compatibilidad con las versiones XSLT que no son conscientes de HTML5 (es decir, todas las versiones actuales de XSLT) y otros sistemas que tienen el mismo problema. El doctype alternativo es < !DOCTYPE html SYSTEM "about:legacy-compat"> . Para enviar este tipo de documento, use el atributo doctype-system="about:legacy-compat" en el elemento xsl:output sin usar doctype-public atributo doctype-public .

 < ?xml version="1.0"?>   ...    
  

esta salida

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

esto se modifica como mi solución para http://ukchill.com/technology/generating-html5-using-xslt/

Con Saxon 9.4 puedes usar:

  

Esto genera:

 < !DOCTYPE HTML> 

Use doctype-system en lugar de doctype-public

Debe usar XHTML 1.0 Strict como doctype si desea que el resultado XHTML sea consistente con HTML5, el serializador xml de libxml2 tiene un modo de salida especial activado por los doctypes XHTML 1.0 que asegura que el resultado sea compatible con XHTML (por ejemplo
lugar de
,

lugar de

). doctype-system="about:legacy-compat" no activa este modo de compatibilidad

Si está contento con la salida html, entonces establecer debería hacer lo correcto. Luego puede configurar el doctype con <!DOCTYPE html> , aunque esto requerirá la instalación de plomería en el lugar apropiado ya que XDV no es compatible con este todavía.

De hecho, parece que realidad tampoco ayuda; esto dará como resultado que
salga como
.

Esta variación del consejo de Jirka Kosek , a través de la tematización avanzada de XDV en Plone.org, parece funcionar para mí en collective.xdv .

 < ?xml version="1.0" encoding="UTF-8"?>    

Este es un comentario, pero no tengo suficientes puntos de karma para ponerlo en el lugar correcto. Suspiro.

Aprecio que esta es probablemente la manera correcta y estandarizada de lograr lo que quiero (lo he votado como tal). Pero el primero no es compatible (mi procesador se cae) y el último todavía da como resultado ” http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ” en mi doctype. Como sugirió @Jirka Kosek, creo que mi procesador XSLT podría estar roto.

No, su procesador XSLT no está roto, es solo que XDV agrega:

de forma predeterminada, así que cuando agrega un segundo no se sobrescribe el doctype-public anterior.

Tenga en cuenta que XHTML 1.0 strict figura como una cadena doctype obsoleta permitida , por lo que es perfectamente aceptable utilizar este tipo de documento y aún así llamarlo HTML5.

Lamento solo proporcionar enlaces, pero esto fue discutido en el grupo WHATWG, pero pasaron muchos meses desde que resolví el problema. Aquí Ian Hickson y algunos expertos en XML discuten esto:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzlbidzl
y aquí está el número del problema real:
http://www.w3.org/html/wg/tracker/issues/54
y aquí está esta discusión
http://www.contentwithstyle.co.uk/content/xslt-and-html-5-problems

El siguiente código funcionará como una plantilla independiente si se guarda como html5.xml :

 < ?xml version="1.0" encoding="utf-8"?> < ?xml-stylesheet type="text/xsl" href="html5.xml"?>            hi     

Referencias

  • Marcado de Polyglot: The Doctype

eso es lo que uso para generar un doctype html5 compatible (sacar saxons html5, de lo contrario, hacer lo heredado)

 < ?xml version="1.0" encoding="UTF-8" standalone="yes"?>   

Usa esta etiqueta