Imposta il doctype HTML5 con XSLT

Come faccio a impostare in modo pulito il doctype di un file in HTML5 tramite XSLT (in questo caso con collective.xdv )

Quanto segue, che è il migliore che il mio Google foo è stato in grado di trovare:

  

produce:

  

Penso che al momento questo sia supportato solo scrivendo il doctype come testo:

     <!DOCTYPE html>     

Questo produrrà il seguente risultato:

    

Per usare il semplice docty HTML , devi usare la funzione disable-output-escaping : <!DOCTYPE html> . Tuttavia, disable-output-escaping è una funzionalità opzionale in XSLT, quindi il motore XSLT o la pipeline di serializzazione potrebbero non supportarlo.

Per questo motivo, HTML5 fornisce un doctype alternativo per la compatibilità con le versioni XSLT non note HTML5 (ovvero tutte le versioni attualmente esistenti di XSLT) e altri sistemi che presentano lo stesso problema. Il doctype alternativo è . Per generare questo doctype, utilizzare l’attributo doctype-system="about:legacy-compat" sull’elemento xsl:output senza utilizzare un attributo doctype-public .

    ...    
  

questa uscita

  

questo è modificato come la mia correzione a http://ukchill.com/technology/generating-html5-using-xslt/

Con Saxon 9.4 puoi usare:

  

Questo genera:

  

Usa doctype-system invece di doctype-public

È necessario utilizzare XHTML 1.0 Strict come doctype se si desidera che l’output XHTML sia coerente con HTML5, il serializer xml di libxml2 ha una modalità di output speciale triggersta dal doctype XHTML 1.0 che garantisce l’output compatibile con XHTML, (ad esempio
anziché
,

piuttosto che

). doctype-system="about:legacy-compat" non triggers questa modalità di compatibilità

Se sei soddisfatto dell’output html, l’impostazione dovrebbe fare la cosa giusta. È quindi ansible impostare il doctype con <!DOCTYPE html> , anche se questo dovrà essere collegato al punto appropriato in quanto XDV non supporta questo ancora.

In effetti sembra che non sia di certo di aiuto – questo produrrà
come output
.

Questa variazione del consiglio di Jirka Kosek , tramite il tema XDV avanzato su Plone.org, sembra funzionare per me in collective.xdv .

     

Questo è un commento, ma non ho abbastanza punti karma per metterlo nel posto giusto. Sospiro.

Apprezzo che questo sia probabilmente il modo corretto e guidato dagli standard per realizzare ciò che voglio (l’ho svalutato come tale). Ma il primo non è supportato (il mio processore cade) e il secondo produce ancora ” http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ” nel mio doctype. Come suggerito da @Jirka Kosek, penso che il mio processore XSLT potrebbe essere rotto.

No, il tuo processore XSLT non è rotto, è solo che XDV aggiunge:

di default, quindi quando aggiungi un secondo il precedente doctype-public non viene sovrascritto.

Si noti che XHTML 1.0 strict è elencato come una stringa doctype obsoleta consentita , quindi è perfettamente accettabile utilizzare questo doctype e chiamarlo ancora HTML5.

Mi spiace di fornire solo link, ma questo è stato discusso dal gruppo WHATWG, ma sono passati molti mesi da quando l’ho affrontato. Qui Ian Hickson e alcuni esperti di XML discutono di questo:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzlbidzl
e qui è il numero di rilascio effettivo:
http://www.w3.org/html/wg/tracker/issues/54
ed ecco questa discussione
http://www.contentwithstyle.co.uk/content/xslt-and-html-5-problems

Il seguente codice funzionerà come modello autonomo se salvato come html5.xml :

              hi     

Riferimenti

  • Polyglot Markup: il Doctype

questo è quello che uso per generare un doctype html5 compatibile (ottenere sassoni html5, altrimenti fare la cosa legacy)

    

Usa questo tag