Legen Sie HTML5 Doctype mit XSLT fest

Wie würde ich den Doctype einer Datei sauber auf HTML5 via XSLT setzen (in diesem Fall mit collective.xdv )

Das Folgende, welches das Beste ist, was mein Google foo gefunden hat:

  

produziert:

  

Solutions Collecting From Web of "Legen Sie HTML5 Doctype mit XSLT fest"

Ich denke, dies wird derzeit nur unterstützt, indem der Doctype als Text ausgegeben wird:

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

Dies erzeugt die folgende Ausgabe:

 < !DOCTYPE html>   

Um den einfachen HTML-Doctype < !DOCTYPE html> , müssen Sie die function < !DOCTYPE html> disable-output-escaping : <!DOCTYPE html> . disable-output-escaping ist jedoch eine optionale function in XSLT, sodass Ihre XSLT-Engine oder Ihre Serialisierungspipeline dies möglicherweise nicht unterstützt.

Aus diesem Grund bietet HTML5 einen alternativen Doctype für die Kompatibilität mit HTML5-unaware XSLT-Versionen (dh alle derzeit vorhandenen Versionen von XSLT) und anderen Systemen, die das gleiche Problem haben. Der alternative Doctyp ist < !DOCTYPE html SYSTEM "about:legacy-compat"> . Um diesen Doctype auszugeben, verwenden Sie das Attribut doctype-system="about:legacy-compat" im xsl:output Element, ohne überhaupt ein doctype-public Attribut zu verwenden.

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

dies gibt aus

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

Dies ist als meine Reparatur zu http://ukchill.com/technology/generating-html5-using-xslt/ geändert

Mit Saxon 9.4 können Sie verwenden:

  

Dies erzeugt:

 < !DOCTYPE HTML> 

Verwenden Sie Doctype-System anstelle von Doctype-public

Sie müssen XHTML 1.0 Strict als Doctype verwenden, wenn die XHTML-Ausgabe konsistent mit HTML5 sein soll. Der XML-Serializer von libxml2 verfügt über einen speziellen Ausgabemodus, der durch die XHTML 1.0-Doctypes gesteuert wird (zB
statt
,

anstatt

). doctype-system="about:legacy-compat" triggers diesen Kompatibilitätsmodus nicht aus

Wenn Sie mit der HTML-Ausgabe zufrieden sind, sollte die Einstellung das Richtige tun. Sie können dann den Doctyp mit <!DOCTYPE html> einstellen, obwohl dies an der richtigen Stelle installiert werden muss, da XDV dies nicht unterstützt noch.

Tatsächlich scheint auch nicht wirklich zu helfen – dies wird dazu führen, dass
als
ausgegeben wird
.

Diese Variante von Jirka Koseks Ratschlag über Advanced XDV Theming auf Plone.org scheint für mich in collective.xdv zu funktionieren.

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

Dies ist ein Kommentar, aber ich habe nicht genug Karma-Punkte, um es an die richtige Stelle zu setzen. Seufzer.

Ich schätze, dass dies wahrscheinlich der richtige, standardisierte Weg ist, um das zu erreichen, was ich will (ich habe es so aufgewertet). Aber ersteres wird nicht unterstützt (mein processor fällt um) und letzteres führt immer noch zu ” http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ” in meinem Doctype. Wie @Jirka Kosek vorgeschlagen hat, denke ich, dass mein XSLT processor kaputt sein könnte.

Nein, Ihr XSLT-processor ist nicht defekt, es ist nur, dass XDV hinzufügt:

Standardmäßig wird also beim Hinzufügen einer zweiten die vorherige doctype-public nicht überschrieben.

Beachten Sie, dass XHTML 1.0 strict als veraltete zulässige Doctype-Zeichenfolge aufgeführt ist. Daher ist es durchaus akzeptabel, diesen Doctype zu verwenden und trotzdem HTML5 zu verwenden.

Es tut uns leid, nur Links zu geben, aber das wurde unter der WHATWG-Gruppe diskutiert, aber es ist viele Monate her, seit ich mich damit beschäftigt habe. Hier diskutieren Ian Hickson und einige XML-Experten darüber:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzlbidzl
und hier ist die aktuelle Nummer:
http://www.w3.org/html/wg/tracker/issues/54
und hier ist diese Diskussion
http://www.contentwithstyle.co.uk/content/xslt-and-html-5-problems

Der folgende Code funktioniert als eigenständige Vorlage, wenn er als html5.xml gespeichert html5.xml :

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

Verweise

  • Polyglot-Markup: Der Doctype

das ist, was ich benutze, um einen kompatiblen html5 doctype zu erzeugen (saxons html5 raus zu bekommen, sonst das Vermächtnis machend)

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

Verwenden Sie dieses Tag