2008-10-03 15 views
10

मैं एक्सएमएल -> एक्सएसएलटी -> वेब सामग्री बनाने के लिए एचटीएमएल मेमे की खोज कर रहा हूं। मेरे पास बहुत छोटा एक्सएसएलटी अनुभव है।एक्सएसएलटी एब्स्ट्रैक्शन

मैं उत्सुक क्या तंत्र कपोल-कल्पना या "रिफैक्टरिंग" को संभालने के लिए XSLT में उपलब्ध हैं हूँ।

उदाहरण के लिए, जेनेरिक एचटीएमएल और एक सेवा पक्ष के साथ, कई पेजों को टेम्पलेट और विघटित किया जा सकता है, जहां कहें, कहें, सामान्य हेडर, एनवी, और पाद लेख खंड, और पृष्ठ मूल रूप से शरीर है।

आम मार्कअप भाषाओं, JSP, PHP, ASP, जहाँ तक (जैसे हर हैडर ब्लॉक करने के लिए उपयोगकर्ता नाम जोड़ना) गतिशील सामग्री के लिए उन क्षेत्रों के सभी अनुमति देने के लिए जाना।

JSP जब सामग्री पैदा करने में इस्तेमाल किया जा करने के लिए, और यहां तक ​​कि चारों ओर और टैग के लिए खुद के भीतर सामग्री पर काम आप टैग फ़ाइलें, जो तर्क स्वीकार कर सकते हैं बनाने के लिए अनुमति देकर भी आगे चला जाता है।

मैं उत्सुक इसी तरह की सुविधा XSLT के भीतर किया जाता है हूँ। एचटीएमएल पेज बनाने जैसी चीजों के लिए एक्सएसएलटी के पुन: प्रयोज्य ब्लॉक को बनाने के लिए क्या सुविधाएं हैं?

+1

"meme"? मुझे नहीं लगता कि इसका मतलब यह है कि इसका मतलब क्या है ... – annakata

उत्तर

14

अपनी खुद की परियोजना के लिए, इस तरह मैंने अपने पृष्ठों को विभाजित किया। एक टेम्पलेट.एक्सएसएल फ़ाइल थी जिसे मेरे प्रत्येक एक्सएसएल द्वारा आयात किया गया था। अधिकांश पृष्ठों में सिर्फ template.xsl था, लेकिन कार्ट, इत्यादि जैसे कुछ पृष्ठों को अपने की आवश्यकता होती थी क्योंकि वे विभिन्न प्रकार के डेटा पार्सिंग कर रहे थे।

<page title="Home"> 
    <navigation> 
     <!-- something here --> 
    </navigation> 
    <main> 
     <!-- something here --> 
    </main> 
</page> 

यह मेरे template.xsl से एक स्निपेट है। मैंने यहां सभी सामान्य सामानों में फेंक दिया, और फिर को अपने पृष्ठों के लिए call-template के माध्यम से अपनी जानकारी जोड़ने का मौका दिया।

<xsl:template match="/page" name="page"> 
    <html> 
    <head> 
     <title><xsl:value-of select="(@title)" /></title>   
     <xsl:call-template name="css" /> 
     <xsl:call-template name="script" /> 
    </head> 
    <body> 
     <xsl:call-template name="container" /> 
    </body> 
    </html> 
</xsl:template> 

मेरा सीएसएस टैग किस प्रकार प्रतिक्रिया देगा इसका एक उदाहरण। ध्यान दें कि यह css-extended. सीएसएस केवल पर सामान्य सीएसएस था जो सभी पृष्ठों पर लागू होगा। कुछ पृष्ठों को और अधिक चाहिए। उन सीएसएस-विस्तारित ओवरराइड कर सकते हैं।नोट की आवश्यकता है क्योंकि call-template विफल हो जाएगा यदि पृष्ठ टेम्पलेट को कॉल करता है लेकिन इसे कहीं भी परिभाषित नहीं करता है।

<xsl:template name="css"> 
     <link rel="stylesheet" type="text/css" href="{$cssPath}reset.css" /> 
     <link rel="stylesheet" type="text/css" href="{$cssPath}style.css" /> 
     <link rel="stylesheet" type="text/css" href="{$cssPath}layout.css" /> 
     <xsl:call-template name="css-extended" /> 
    </xsl:template> 

    <!-- This is meant to be blank. It gets overriden by implementing stylesheets --> 
    <xsl:template name="css-extended" /> 

मेरे कंटेनर एक समान manner-- आम सामान में काम करेगा परिभाषित किया गया था और उसके बाद प्रत्येक पृष्ठ सिर्फ एक कार्यान्वयन प्रदान कर सकता है। एक्सएसएल में एक डिफ़ॉल्ट कार्यान्वयन था। (content में)

<xsl:template name="container"> 
     <div id="container"> 
      <xsl:call-template name="header" /> 
      <xsl:call-template name="content" /> 
      <xsl:call-template name="footer" /> 
     </div> 
    </xsl:template> 

    <xsl:template name="content"> 
     <div id="content"> 
      <div id="content-inner"> 
       <xsl:call-template name="sideBar" /> 
       <xsl:call-template name="main" /> 
      </div> 
     </div> 
    </xsl:template> 

    <xsl:template name="main"> 
     <div id="main"> 
      <xsl:apply-templates select="main" /> 
      <xsl:call-template name="main-extended" /> 
     </div> 
    </xsl:template> 

    <!-- This is meant to be blank. It gets overriden by implementing stylesheets --> 
    <xsl:template name="main-extended" /> 

<xsl:template name="footer"> 
     <div id="footer"> 
     <div id="footer-inner"> 
     <!-- Footer content here --> 
     </div> 
     </div> 
</xsl:template> 

यह मेरे लिए काफी सुंदर काम करता है। यदि कोई प्रश्न हैं तो मैं आपके लिए उत्तर दे सकता हूं, मुझे बताएं।

+0

उदाहरण चाहते हैं तो मुझे बताएं यह उत्कृष्ट और बिल्कुल वही है जो मैं ढूंढ रहा था, धन्यवाद। –

+0

मुझे यह जवाब पसंद है। एक और अधिक जानकारी: यदि आप बाहरी फ़ाइलों में कुछ टेम्पलेट्स रखना चाहते हैं, तो एक संभावित समाधान Xinclude bortzmeyer

5

टेम्पलेट्स, शामिल हैं।

XSL किसी अन्य प्रोग्रामिंग भाषा से बहुत अलग है। Its rule based.

मैं आपको XSlt के बारे में something पढ़ने के लिए अनुशंसा करता हूं और फिर थोड़ा और अधिक स्पष्टीकरण मांगता हूं।

+0

सभी ट्यूटोरियल और जैसे मैंने एक्सएसएलटी "छोटे में" के साथ सौदा देखा है, सिंटैक्स इत्यादि पर ध्यान केंद्रित किया है। यह अब "अब मुझे पता है कि कैसे इसका उपयोग करने के लिए, मैं वास्तव में इसे कैसे लागू करूं "प्रश्न का प्रकार। –

2

दोनों को शामिल करें और आयात बयान है कि आप पृष्ठ के सार दूर भाग का उपयोग कर सकते XSL रहे हैं। एक्सएसएलटी स्वयं ही ऐसी चीज है जो टैग फ़ाइल प्रकार व्यवहार को पुन: उत्पन्न कर सकता है। आप अपनी एक्सएमएल डेटा फ़ाइलों को अपने इच्छित टैग के साथ संपादित करते हैं। इस बीच, आपके एक्सएसएल टेम्पलेट्स यह जानने जा रहे हैं कि उन टैग्स के साथ क्या करना है, फिर वे उन्हें सामना करते हैं।

2

आप टेम्पलेट्स नाम दे और उसके बाद के माध्यम से उन्हें फोन कर सकते हैं 'कहते-टेम्पलेट'

XSLT 2.0 में आप अपने खुद के कार्यों बना सकते हैं

एक अद्भुत क्षेत्र का पता लगाने के लिए (हालांकि मैं वाक्य रचना कुटिल, लगता है) है एक्सएसएलटी स्टाइलशीट जेनरेट करने के लिए एक्सएसएलटी का उपयोग करना। यह आपको सामान्य रूपांतरण परिदृश्यों को स्वचालित करने देता है जहां स्टाइलशीट का 9 0% बॉयलरप्लेट है। ऐसा करने के लिए आपको 'नेमस्पेस-उपनाम' से परिचित होने की आवश्यकता है। भाषा के अपने ज्ञान का विस्तार करने का यह एक शानदार तरीका है।

+0

एक्सएसएलटी -> एक्सएसएलटी के बारे में आप यहां क्या कह रहे थे, यह जानने के लिए मुझे एक शॉवर मिली, लेकिन अंत में मैंने इसे दबा दिया। यह भी बहुत चालाक है। यदि एक्सएसएलटी आपके लिए पर्याप्त सार नहीं है, क्योंकि यह सिर्फ एक्सएमएल है, तो इसे और अधिक सार बनाएं। "वे कोड लिखेंगे जो कोड लिखते हैं जो भोजन के लिए कोड लिखते हैं" जैसा कि वे कहते हैं। धन्यवाद। –

+0

कोई चिंता नहीं - अगर आप एक उदाहरण –

1

एक्सएसएलटी शक्तिशाली है, लेकिन यह अधिकांश प्रोग्रामिंग भाषाओं से बहुत अलग है और यह आपके लिए उपलब्ध कराई गई चीज़ों में काफी सीमित है, इसलिए जो चीजें आपने किसी अन्य भाषा के साथ बनाई हैं, उन्हें काम करने के लिए कुछ जटिल xsl हेरफेर की आवश्यकता हो सकती है साथ में। मैंने the cheatsheet from here उपयोगी पाया जब मैं कुछ हफ्ते पहले XSLT काम के माध्यम से जा रहा था।

उम्मीद न करें कि एक्सएसएलटी किसी विशेष तरीके से चीजें करेगा और आप शायद उन चीजों को करने के अच्छे तरीके पा सकते हैं, लेकिन यदि आपके पास कुछ काम करना चाहिए, तो अटक जाना आसान है।

+0

यह हमेशा चुनौती है। आप अपना पूर्व अनुभव लेते हैं और इसे किसी नए पर लागू करने का प्रयास करते हैं। मुझे पता है कि एक्सएसएलटी के पास दुनिया का एक अलग दृश्य है, लेकिन मुझे यह भी पता था कि लोगों को इसके साथ समान समस्याएं हल करनी पड़ीं, और मैं उत्सुक था कि वे इसके बारे में कैसे गए। –

2

एक्सएसएल टेम्पलेट पर आधारित है।

एक्सएमएल डेटा को तीन-स्तरों पर "पुनः उपयोग" किया जा सकता है। सबसे बुनियादी स्तर पर आप XML के माध्यम से <xsl:for-each /> कर सकते हैं।

नोट: एक्सएसएल में प्रत्येक के लिए डेटा के माध्यम से लूप नहीं है, यह सिर्फ डेटा से मेल खाता है। इसके अलावा जब अपने "अंदर" एक के लिए-प्रत्येक अपने अंदर है कि XML के "संदर्भ"

का उपयोग कर और एक के लिए-प्रत्येक

पुनः उपयोग का एक उदाहरण (जो "गुंजाइश" प्रोग्रामिंग में की अवधारणा की तरह है)
<xsl:for-each select="/xml/data/here"> 
    ... do some stuff ... 
</xsl:for-each> 
<xsl:for-each select="/xml/data/here"> 
    ... do some DIFFERENT stuff ... 
</xsl:for-each> 

प्रत्येक-नोड्स टेम्पलेट नोड्स (पुन: उपयोग के दूसरे स्तर) के भीतर निहित हैं। दो प्रकार के टेम्पलेट नोड्स हैं: मिलान और नामांकित। मिलान टेम्पलेट नोड्स, उपरोक्त वर्णित प्रत्येक नोड की तरह कार्य करते हैं, लेकिन एक्सएसएल प्रसंस्करण शुरू होने पर किसी भी नोड्स का मिलान होने पर स्वचालित रूप से टेम्पलेट इंजन द्वारा कॉल किया जाता है। मिलान टेम्पलेट नोड्स भी स्पष्ट रूप से लागू किया जा सकता है। दूसरी तरफ नामित टेम्पलेट नोड्स हमेशा स्पष्ट रूप से लागू होते हैं और इन्हें फ़ंक्शंस के रूप में सोचा जा सकता है। जो हमेशा बुलाया जाएगा (क्योंकि एक रूट नोड हमेशा मौजूद रहेंगे) एक मैच टेम्पलेट के

उदाहरण

<xsl:template match="/"> 
    ... do some stuff ... 
</xsl:template> 

एक और मैच टेम्पलेट बुला स्पष्ट

<xsl:template match="/"> 
    <xsl:apply-templates select="xml/data/too" /> 
</xsl:template> 

<xsl:template match="xml/data/too"> 
    ... do something ... 
</xsl:template> 

नोट एक मैच टेम्पलेट: में मैच टेम्पलेट को काम करने के लिए ऑर्डर करें, एक्सएमएल नोड यह मेल खाने की ज़रूरतों को पूरा करने के लिए है। यदि इसमें कोई मिलान नहीं है, तो टेम्पलेट नहीं है।

एक नाम टेम्पलेट

<xsl:template name="WriteOut"> 
    ... data with NO Context Here ... 
</xsl:template> 

या एक मेल खाने वाले टेम्पलेट से कोई नाम टेम्पलेट बुला

<xsl:template match="/"> 
    <xsl:call-template name="WriteOut" /> 
<xsl:template> 

नोट का उदाहरण: आप मिश्रण और मिलान कर सकते हैं कि आप कहां से, तुम बस मेल खाते हैं और नाम दिया कॉल टेम्पलेट्स देखना है कि आप किस संदर्भ में हैं।

सभी टेम्पलेट नोड्स एक्सएसएल स्टाइलशीट में आयोजित किए जाते हैं, और आप सी में और आयात विभिन्न स्टाइलशीट शामिल हैं। उदाहरण के लिए आप एक टेम्पलेट में एचटीएमएल हेडर नोड्स से निपटने वाले सभी टेम्पलेट्स और एचटीएमएल बॉडी नोड्स से निपटने वाले सभी टेम्पलेट्स को दूसरे में रख सकते हैं। फिर आप एक स्टाइलशीट बना सकते हैं जिसमें हेडर और बॉडी स्टाइलशीट दोनों शामिल हों।

एक का उदाहरण

<xsl:include href="header.xsl" /> 

अंत में वहाँ स्टाइलशीट सहित के लिए-eaching, templating के माध्यम से या के माध्यम से के माध्यम से डेटा का हिस्सा, सार संक्षेप के तीन तरीके हैं नोड शामिल हैं।

संबंधित मुद्दे