どのようにすればcleanlyXSLTを介してファイルのdoctypeをHTML5 <!DOCTYPE html>
に設定します(この場合 collective.xdv )
以下は、Googleのfooが見つけた最高のものです。
<xsl:output
method="html"
doctype-public="XSLT-compat"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="yes" />
生成するもの:
<!DOCTYPE html PUBLIC "XSLT-compat" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
これは現在、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>
シンプルなHTML Doctype <!DOCTYPE html>
を使用するには、disable-output-escaping
機能を使用する必要があります:<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
。ただし、disable-output-escaping
はXSLTのオプション機能であるため、XSLTエンジンまたはシリアル化パイプラインではサポートされない場合があります。
このため、HTML5は、HTML5を認識しないXSLTバージョン(つまり、XSLTの現在存在するすべてのバージョン)および同じ問題を抱えている他のシステムとの互換性のための代替doctypeを提供します。代替のdoctypeは<!DOCTYPE html SYSTEM "about:legacy-compat">
です。このdoctypeを出力するには、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>
<xsl:output
method="html"
doctype-system="about:legacy-compat"
encoding="UTF-8"
indent="yes" />
この出力
<!DOCTYPE html SYSTEM "about:legacy-compat">
これは http://ukchill.com/technology/generated-html5-using-xslt/ に対する修正として修正されます
Saxon 9.4では、次を使用できます。
<xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
これにより以下が生成されます。
<!DOCTYPE HTML>
Doctype-publicの代わりにdoctype-systemを使用します
必須 XHTML出力をHTML5との整合性が必要な場合は、XHTML 1.0 Strictをdoctypeとして使用します。libxml2のxmlシリアライザーには、XHTML互換性を保証するXHTML 1.0 Doctypeによってトリガーされる特別な出力モードがあります(例:<br />
<br/>
ではなく、<div></div>
ではなく<div/>
)。 doctype-system="about:legacy-compat"
はnotこの互換モードをトリガーします
HTML出力に満足している場合は、<xsl:output method="html">
を設定することで正しいことが行われます。その後、<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
でdoctypeを設定できますが、XDVはまだこれをサポートしていないため、適切な場所に配管する必要があります。
実際、<xsl:output method="html"/>
も実際には役に立たないようです。これにより、<br/>
として<br></br>
が出力されます。
Jirka Kosekのアドバイス のこのバリエーションは Advanced XDV theming on Plone.org で動作しているようです collective.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が追加するだけです:
<xsl:output method="xml" indent="no" omit-xml-declaration="yes" media-type="text/html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
デフォルトでは、2番目の<xsl:output doctype-system="about:legacy-compat"/>
を追加しても、以前のdoctype-public
は上書きされません。
XHTML 1.0 strictは 旧式の許可されたdoctype文字列 としてリストされていることに注意してください。
リンクのみを提供して申し訳ありませんが、これはWHATWGグループ間で議論されましたが、私がそれを扱ってから何ヶ月も経ちました。ここで、Ian Hicksonといくつかの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-problems
このタグを使用
<xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="XSLT-compat" indent="yes"/>
次のコードは、html5.xml
として保存すると、スタンドアロンテンプレートとして機能します。
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="html5.xml"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" />
<xsl:template match="xsl:stylesheet">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<xsl:text>hi</xsl:text>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
参考文献
それは、互換性のあるhtml5 doctypeを生成するために使用するものです(サクソンhtml5を取り出す、そうでなければレガシーを行う)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output
method="html"
version="5.0"
doctype-system="about:legacy-compat"
encoding="UTF-8"
indent="yes" />