XSLT के साथ HTML5 सिद्धांत निर्धारित करें


134

मैं XSLT के माध्यम से HTML में किसी फ़ाइल के सिद्धांत को साफ- सुथरा कैसे करूंगा <!DOCTYPE html>(इस मामले में collective.xdit ) के साथ

निम्नलिखित, जो मेरे Google फू को खोजने में सबसे अच्छा है:

<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">

7
संयोग से, सार्वजनिक "एक्सएसएलटी-कॉम्पिटर्स" का उपयोग करना पुराना है। XSLT संगत एचटीएमएल 5 सिद्धांत अब है <! DOCTYPE HTML सिस्टम "के बारे में: विरासत-कम्प्रेसर">। देखें dev.w3.org/html5/spec/syntax.html#doctype-legacy-string
Alohci

1
अंतिम संपादक WD से, ऐसा लगता है कि लगभग किसी भी सिद्धांत की अनुमति है: लघु <!DOCTYPE html>, विरासत <!DOCTYPE HTML SYSTEM "about:legacy-compat">और पुरस्कृत ("नहीं करना चाहिए") HTML 4, HTML 4.01, XHTML 1.0 और XHTML 1.1 (सिस्टम होने पर सभी सख्त DTD)।

1
कृपया एचटीएमएल 5 के उत्तर (आजकल) डब्ल्यू 3 सी सिफारिश के अनुसार कुछ अपडेट करें।
पीटर क्रस

जवाबों:


147

मुझे लगता है कि वर्तमान में यह केवल पाठ के रूप में सिद्धांत लिखने से समर्थित है:

<?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>

यह एकमात्र स्टैंडर तरीका है। लेकिन, MSXSL के साथ, एक गैर स्टैंडर तरीका है: खाली xsl का उपयोग करें: आउटपुट / @ doctype- पब्लिक और xsl: आउटपुट / @ doctype-system।

4
disable-output-escapingकेसी द्वारा मतलब था
yegor256

मैं अब इस परियोजना पर काम नहीं कर रहा हूं, इसलिए परीक्षण करने में असमर्थ हूं - हालांकि, इसे अप-वोट के आधार पर सबसे अच्छा जवाब के रूप में चिह्नित किया गया है।
जॉन हैडली

यह मेरे लिए हर समय उपयोगी है। धन्यवाद।
जेग्रोएनन

मुझे बचाया ... धन्यवाद
cgatian

66

सरल HTML सिद्धांत <!DOCTYPE html>का उपयोग करने के लिए, आपको disable-output-escapingसुविधा का उपयोग करना होगा <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>:। हालाँकि, XSLT में disable-output-escapingएक वैकल्पिक सुविधा है, इसलिए आपका XSLT इंजन या क्रमांकन पाइपलाइन इसका समर्थन नहीं कर सकता है।

इस कारण से, HTML5 HTML5-अनजान XSLT संस्करणों के साथ संगतता के लिए एक वैकल्पिक सिद्धांत प्रदान करता है (अर्थात XSLT के सभी वर्तमान में मौजूदा संस्करण) और अन्य प्रणालियों में भी यही समस्या है। वैकल्पिक सिद्धांत है <!DOCTYPE html SYSTEM "about:legacy-compat">। इस सिद्धांत का उत्पादन करने के लिए, एक विशेषता का उपयोग किए बिना तत्व doctype-system="about:legacy-compat"पर विशेषता का उपयोग करें ।xsl:outputdoctype-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>

मैं इसकी सराहना करता हूं कि शायद यह सही है, जो मैं चाहता हूं उसे पूरा करने के लिए मानक संचालित हैं (मैंने इसे इस तरह उखाड़ा है)। लेकिन पूर्व समर्थित नहीं है (मेरा प्रोसेसर खत्म हो गया है) और बाद में भी "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"मेरे सिद्धांत में परिणाम है । @ जिरका कोसेक ने सुझाव दिया, मुझे लगता है कि मेरा XSLT प्रोसेसर टूट सकता है।
जॉन हेडली

1
उद्धार (XSLT प्रोसेसर मैं उपयोग कर रहा हूँ) इस समस्या के बारे में सूची चर्चा मेलिंग यहाँ है: coactivate.org/projects/deliverance/lists/…
जॉन हैडले

1
W3C Validator सेवा एक चेतावनी जारी करता है जब साथ दस्तावेज़ शुरू होता है<!DOCTYPE html SYSTEM "about:legacy-compat">
एड्रियन डब्ल्यू

30
<xsl:output
     method="html"
     doctype-system="about:legacy-compat"
     encoding="UTF-8"
     indent="yes" />

यह आउटपुट है

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

इसे http://ukchill.com/technology/generating-html5-use-xslt/ पर मेरे फिक्स के रूप में संशोधित किया गया है


1
W3C Validator सेवा एक चेतावनी जारी करता है जब साथ दस्तावेज़ शुरू होता है<!DOCTYPE html SYSTEM "about:legacy-compat">
एड्रियन डब्ल्यू

20

Saxon 9.4 के साथ आप उपयोग कर सकते हैं:

<xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />

यह उत्पन्न करता है:

<!DOCTYPE HTML>

2
दुर्भाग्य से, यह सैक्सन के लिए विशिष्ट है। दूसरी ओर, यह Q का सबसे संक्षिप्त उत्तर है। मुझे आश्चर्य है कि क्या यह अन्य XSLT 2.0 प्रोसेसर के साथ काम करता है?
पॉल

यह अब केवल सैक्सन के लिए विशिष्ट नहीं है, लेकिन यह libxslt / xsltproc स्रोतों में भी समर्थित है। के अंत में विवरण देखें stackoverflow.com/questions/3387127/set-html5-doctype-with-xslt/...
sideshowbarker

10

Doctype- पब्लिक के बजाय doctype- सिस्टम का उपयोग करें


वह अभी भी "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"सिद्धांत में छोड़ता है।
जॉन हैडली

5
यदि <xsl: output doctype-system = "के बारे में: विरासत-कॉमर्स" विधि = "html" /> जो आप कहते हैं, वह पैदा करता है, तो आपके द्वारा उपयोग किए जाने वाले XSLT प्रोसेसर में निश्चित रूप से बग होता है।
जिर्का कोसेक

यह व्यवहार कहाँ निर्दिष्ट है? यह निश्चित रूप से JAXP XSLT में काम नहीं करता है।
rustyx

xml.apache.org/xalan-j यह एक ऐसी जगह देता है जो आप उम्मीद कर रहे हैं - शायद सिर्फ उम्र।
पांडावुड

9

आप चाहिए आप एक्सएचटीएमएल उत्पादन एचटीएमएल 5 के साथ संगत चाहते हैं, तो XHTML 1.0 doctype के रूप में सख्त उपयोग करते हैं, libxml2 के एक्सएमएल serializer XHTML 1.0 doctypes सुनिश्चित करता है कि उत्पादन से चालू होने वाले एक विशेष उत्पादन मोड है एक्सएचटीएमएल, संगत (जैसे है <br />के बजाय <br/>, <div></div>के बजाय <div/>)। इस संगतता मोड को ट्रिगर नहींdoctype-system="about:legacy-compat" करता है

यदि आप html आउटपुट से खुश हैं, तो सेटिंग <xsl:output method="html">को सही काम करना चाहिए। फिर आप इसके साथ doctype सेट कर सकते हैं <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>, हालांकि इसके लिए उपयुक्त जगह पर प्लंबिंग की आवश्यकता होगी क्योंकि XDV अभी तक इसका समर्थन नहीं करता है।

वास्तव में ऐसा लगता है <xsl:output method="html"/>कि यह वास्तव में या तो मदद नहीं करता है - इसका परिणाम <br/>आउटपुट के रूप में होगा <br></br>


6

की इस भिन्नता जिरका Kosek की सलाह , के माध्यम से उन्नत XDV थीम पर 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>

1
हां, लेकिन जैसा कि मैंने 0xA3 उत्तर में टिप्पणी की है, खाली @ doctype- सिस्टम या @ doctype- पब्लिक स्टैंडर नहीं है (भी, यह कल्पना के विरुद्ध है!)

5

यह एक टिप्पणी है, लेकिन मेरे पास इसे सही जगह पर रखने के लिए पर्याप्त कर्म बिंदु नहीं हैं। आह।

मैं इसकी सराहना करता हूं कि शायद यह सही है, जो मैं चाहता हूं उसे पूरा करने के लिए मानक संचालित हैं (मैंने इसे इस तरह उखाड़ा है)। लेकिन पूर्व समर्थित नहीं है (मेरा प्रोसेसर समाप्त हो गया है) और बाद में मेरे सिद्धांत में " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " का परिणाम है । @ जिरका कोसेक ने सुझाव दिया, मुझे लगता है कि मेरा 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"/>

डिफ़ॉल्ट रूप से, इसलिए जब आप दूसरा जोड़ते हैं <xsl:output doctype-system="about:legacy-compat"/>तो पिछला doctype-publicओवरराइट नहीं किया जाता है।

ध्यान दें कि XHTML 1.0 सख्त को अप्रचलित अनुमति सिद्धांत के रूप में सूचीबद्ध किया गया है , इसलिए यह इस सिद्धांत का उपयोग करने के लिए पूरी तरह से स्वीकार्य है और अभी भी इसे HTML5 कहते हैं।


यदि आपका XSLT प्रोसेसर आपके स्टाइलशीट में तत्व जोड़ता है या इसमें कुछ गैर-मानक विशेषता डिफ़ॉल्ट मान हैं, तो इसका मतलब है कि यह टूट गया है।

6
@ एलेजैंड्रो: एक्सडीवी (अब बदला हुआ डायज़ो) एक्सएसएलटी प्रोसेसर नहीं है, यह एक विषय है -> एक्सएसएलटी संकलक। यह XDV है जो डिफ़ॉल्ट मानों को संकलित XSLT में जोड़ रहा है। मुझे यह पता है क्योंकि मैंने इसे लिखा था;)
लॉरेंस रोव

3

केवल लिंक प्रदान करने के लिए क्षमा करें, लेकिन WHATWG समूह के बीच इस पर चर्चा की गई थी, लेकिन मुझे इससे निपटने में कई महीने हो गए हैं। यहाँ इयान हिकसन और कुछ एक्सएमएल विशेषज्ञ इस पर चर्चा करते हैं:
http://lists.w3.org/Archives/Public/public-html/2009Jan/0640.html
http://markmail.org/message/64aykbbsfzbbbzl
और यहाँ वास्तविक मुद्दा है संख्या:
http://www.w3.org/html/wg/tracker/issues/54
और यहां इस चर्चा
http://www.contentwithstyle.co.uk/content/xslt-and-html-5-problems



1

निम्न कोड एक स्वसंपूर्ण टेम्पलेट के रूप में काम करेगा यदि इसे बचाया जाए 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>

संदर्भ


1

यही कारण है कि मैं एक संगत html5 सिद्धांत उत्पन्न करने के लिए उपयोग कर रहा हूं (सैक्सोन 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" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.