XSLT और संभव विकल्प [बंद]


15

मैंने एक XML फ़ाइल को एक दूसरे (HTML, आदि) में बदलने के लिए XSLT पर एक नज़र डाली थी। अब जबकि मैं देखता हूं कि XSLT के लिए लाभ हैं (एक मानकीकृत और प्रयुक्त उपकरण होने के नाते) मैं कुछ कारणों से अनिच्छुक हूं

  • XSLT प्रोसेसर काफी भारी / संसाधन भूख लगती है
  • एक्सएमएल प्रोग्रामिंग के लिए एक बुरा अंकन है और एक्सएसएलटी के बारे में क्या है।

यह XSLT को यहां ट्रोल नहीं करना चाहता, हालांकि मैं केवल यह बताना चाहता हूं कि मैं इसके बारे में क्या नापसंद करता हूं ताकि आपको यह पता चल सके कि मैं एक विकल्प से क्या उम्मीद करूंगा।

कुछ लिस्प बैकग्राउंड होने से मुझे आश्चर्य होता है कि क्या कुछ लिस्प के आधार पर ट्री-स्ट्रक्चर ट्रांसफॉर्मेशन के लिए बेहतर तरीके हैं। मैंने DSSSL के संदर्भ देखे हैं, दुख की बात है कि DSSSL के बारे में अधिकांश लिंक मर चुके हैं, इसलिए यह पहले से ही कुछ कोड को देखने के लिए चुनौतीपूर्ण है जो इसे दिखाता है। क्या DSSSL अभी भी उपयोग में है? मुझे याद है कि मैंने एक बार डॉकबुक सामान की जाँच करते समय ओपनजेड स्थापित किया था।

जेफ एटवुड का ब्लॉग पोस्ट XSLT के बजाय रूबी का उपयोग करने पर संकेत देता है।

क्या गैर-एक्सएमएल प्रोग्रामिंग भाषा में एक्सएसएलटी के समान एक्सएमएल ट्रांसफॉर्मेशन करने के लिए कोई समझदार तरीके हैं? मैं इनपुट के लिए खुला रहूंगा

  • XML ट्रांसफॉर्मेशन की सुविधा देने वाली भाषाओं की स्क्रिप्टिंग के लिए उपयोगी लाइब्रेरी
  • विशेष रूप से (लेकिन विशेष रूप से नहीं) लिस्प जैसी परिवर्तनकारी भाषाएँ, या रूबी, आदि।

कुछ चीजें जो मुझे अब तक मिली हैं:

  • वेब पर कुछ स्थानों ने लिनक को संभावित विकल्प के रूप में इंगित किया है। काफी आम तौर पर मैं किसी भी प्रकार का वर्गीकरण करता हूं, उन लोगों से भी जिन्हें एक्सएसएलटी का सबसे अच्छा अनुभव था।
  • योजना के लिए http://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/ और http://www.okmij.org/ftp/Scheme/xml.html

मैं एचएक्सटी और हास्केल का उपयोग अक्सर करता हूं, यह बहुत सुखद है
डैनियल ग्रैजर

5
सभी निष्पक्षता में, यह जेफ एटवुड नहीं है जो रूबी की वकालत कर रहा है, वह मार्टिन फाउलर को उद्धृत कर रहा है जो रूबी को पसंद करता है। Fowler द्वारा मूल पोस्ट यहाँ है: martinfowler.com/bliki/MovingAwayFromXslt.html और यह 10 साल पहले 2003 में लिखी गई थी - मुझे लगता है कि XSLT 2.0 2007 में और कई सुधारों के साथ , और XPath 2.0 के साथ 2010 में बाहर आई।
FrustratedWithFormsDesigner

जवाबों:


18

जब आप उनके बारे में गहन अनुभव नहीं करते हैं, तो प्रौद्योगिकियों का आकलन करना मुश्किल है, लेकिन निश्चित रूप से जब आपको अपने निर्णय लेने होंगे, तो उस दुविधा का कोई सरल जवाब नहीं है।

आप दो चिंताओं का हवाला देते हैं: प्रदर्शन और प्रयोज्य। मैं नीचे दोनों को संबोधित करने का प्रयास करूंगा।

सबसे पहले, प्रदर्शन। पाठ्यक्रम का प्रदर्शन न केवल भाषा पर बल्कि कार्यान्वयन पर भी निर्भर करता है, और उपयोगकर्ताओं की विशेषज्ञता पर भी। अलग-अलग XSLT प्रोसेसर प्रदर्शन में व्यापक रूप से भिन्न हो सकते हैं, और एक ही प्रोसेसर व्यापक रूप से भिन्न हो सकते हैं कि इसका उपयोग कैसे किया जाता है (सैक्सन के साथ, उदाहरण के लिए, प्रदर्शन की समस्या वाले लोग अक्सर डोम के साथ इसका उपयोग करते पाए जाते हैं, जो एक खराब संयोजन है , और यदि आप सैक्सन के मूल वृक्ष मॉडल का उपयोग करते हैं तो प्रदर्शन दस गुना बढ़ सकता है)। तो पहली सलाह है कि हार्स पर प्रदर्शन न करें, इसे मापें; और दूसरी सलाह यह सुनिश्चित करना है कि माप करने वाले व्यक्ति के पास पर्याप्त अनुभव है कि वह मूर्खतापूर्ण गलती न करे। अधिक आसानी से कहा से किया।

मज़बूती से, आप रूपांतरण नौकरियों को दो श्रेणियों में अलग कर सकते हैं: सरल और जटिल। सरल परिवर्तनों के लिए, एक अच्छे XSLT प्रोसेसर के साथ समय सभी पार्सिंग और क्रमांकन में व्यतीत होता है और XSLT प्रसंस्करण समय शायद ही तस्वीर में आता है। चूँकि कोई भी अन्य तकनीक समान पार्सिंग और क्रमांकन लागतों को वसूलने वाली है, इसलिए रूपांतरण तकनीक का विकल्प एक बड़ा बदलाव नहीं ला सकता है (स्ट्रीमिंग का उपयोग करते हुए बहुत कम-स्तर की कोडिंग को छोड़कर, लेकिन बहुत से लोग प्रोग्रामिंग का खर्च नहीं उठा सकते हैं। समय और कौशल को लागू करने की आवश्यकता है)। बड़े दस्तावेजों पर जटिल परिवर्तनों के लिए, आपको एसक्यूएल प्रोग्रामिंग के साथ समान मुद्दे मिलना शुरू हो जाते हैं: अच्छे प्रदर्शन को प्राप्त करने के लिए प्रोग्रामर के कौशल और ज्ञान और ऑप्टिमाइज़र की क्षमताओं के बीच अच्छी बातचीत की आवश्यकता होती है। SQL के साथ के रूप में, यह ' इस तरह की उच्च-स्तरीय भाषा में कुछ सरल कथन लिखना बहुत आसान है, जिसके परिणामस्वरूप प्रोसेसर को बहुत बड़ी मात्रा में काम करना पड़ता है। लेकिन SQL के साथ भी, प्रोग्रामर जो जानते हैं कि वे क्या कर रहे हैं, नौसिखियों की तुलना में बहुत बेहतर करेंगे।

दूसरा, प्रयोज्यता। XSLT के लिए XML- आधारित सिंटैक्स बहुत से लोगों के लिए भाषा के साथ पहली मुठभेड़ पर बहुत दूर है। लेकिन इस तरह से करने के लिए अच्छे कारण और वास्तविक लाभ हैं: "टेम्पलेट" तर्क है, कि परिणाम कोड में बहुत सारे कोड होते हैं, जो कि परिणाम दस्तावेज़ में लिखे जाते हैं, और XML लिखने का सबसे अच्छा तरीका एक्सएमएल में है। और "प्रतिबिंब" तर्क है; बड़े जटिल प्रणालियों में, स्टाइलशीट को खोजने के लिए बहुत आम है जो स्टाइलशीट उत्पन्न करते हैं। फिर "उपकरण" तर्क है; यदि आप एक XML दुकान में हैं, तो आपके पास बहुत सारे XML टूलिंग हैं जैसे कि सिंटैक्स-निर्देशित संपादकों, और अपने कार्यक्रमों और अपने डेटा को संभालने के लिए समान टूल का उपयोग करने में सक्षम होना अच्छा है। नुकसान तुलनात्मक रूप से काफी कॉस्मेटिक हैं: ' संपादन में शामिल कीस्ट्रोक्स की संख्या (आसानी से एक अच्छा संपादन उपकरण के साथ तय) है, और कोड की वाचालता (इसकी पठनीयता को कम करना) है। XSLT 2.0 में नियमित अभिव्यक्ति और स्टाइलशीट फ़ंक्शंस जैसी सुविधाओं की शुरूआत के साथ वर्बोसिटी को बहुत कम किया जाता है: XSLT 2.0 का पूरा फायदा उठाने पर कई स्टाइलशीट आधे या एक तिहाई आकार में कम हो जाती हैं।

DSSSL का आपका उल्लेख मुझे एक मुस्कुराहट के साथ छोड़ देता है। मैंने कभी भी DSSSL का उपयोग नहीं किया है, लेकिन मैंने जो कहानियां सुनीं, वे अनुपयुक्त थीं क्योंकि इसका सिंटेक्स आर्कन था, और डेटा के सिंटैक्स (एसजीएमएल) से असंबंधित था। XSLT के लिए एक XML सिंटैक्स का उपयोग DSSSL के साथ अनुभव से दृढ़ता से प्रेरित था।

ऐसे लोग हैं जो XSLT से प्यार करते हैं और ऐसे लोग हैं जो इसे नफरत करते हैं। अप्रत्याशित रूप से, जो लोग इसका उपयोग करते हैं, वे पहली श्रेणी में आते हैं। जो लोग इसे नापसंद करते हैं, वे आम तौर पर वे हैं जिन्होंने "XSLT तरीके से सोचना" नहीं सीखा है। आप तर्क दे सकते हैं कि एक प्रोग्रामिंग भाषा को आपके सोचने के तरीके को प्रभावित नहीं करना चाहिए, लेकिन ऐसा होता है: नियम-आधारित भाषा में लिखना एक अनिवार्य भाषा में लिखने से अलग मानसिकता रखता है। कई प्रोग्रामर्स की पहली प्रतिक्रिया यह है कि वे नियंत्रण में कम महसूस करते हैं (समस्या का वर्णन करने के बजाय, कंप्यूटर को बताएं कि कदम से कदम क्या करना है)। यह उस प्रतिक्रिया के समान है जो आप तब देखते थे जब लोगों को पहली बार SQL में लाया गया था। इन दिनों, लोग अपने करियर में पहले SQL सीखते हैं, इसलिए कम मानसिक उत्पीड़न की आवश्यकता होती है।

अंतत:, आपको उद्देश्यपूर्ण मापन योग्य मानदंडों के आधार पर एक तकनीक का चयन करना चाहिए, न कि प्रेम / घृणा प्रतिक्रियाओं पर। उन मापों को बनाना मुश्किल है। लेकिन XSLT का उपयोग बहुत सारे लोग बहुत तीव्रता से और बहुत सफलतापूर्वक कर रहे हैं, इसलिए इसमें कोई संदेह नहीं है कि यह किया जा सकता है।


2
"नियम आधारित भाषा" के लिए अधिक सामान्य शब्द एक घोषित भाषा है।
डैनियल ग्रैजर

@ मिचेल के - अच्छा लगाया। मैं व्यक्तिगत रूप से XSLT से प्यार करता हूं और इसे C # के साथ उपयोग करता हूं। इसके अलावा मैं XSL- एफओ के साथ उत्पाद पीडीएफ दस्तावेजों के लिए इसका इस्तेमाल करता हूं। XSLT शक्तिशाली, बहुत शक्तिशाली है, जिससे मुझे बड़ी मात्रा में डेटा को जल्दी से HTML, XSL-FO, XML या पाठ में बदलने की अनुमति मिलती है।
फिल्लीएनजे

3

संदर्भ के बारे में अतिरिक्त जानकारी के बिना, इसका उत्तर देना मुश्किल है।

फिर भी, मुझे समझ नहीं आया कि आप XSLT का उपयोग क्यों नहीं करना चाहते हैं। यह काम के लिए सही उपकरण है, और एक शक्तिशाली है। यह विशेष रूप से एक एक्सएमएल को दूसरे में बदलने के लिए किया जाता है।

XSLT प्रोसेसर काफी भारी / संसाधन भूख लगती है

क्या आपके पास समर्थन करने के लिए कठिन डेटा है? क्या आपने XSLT का उपयोग करके समाधान को लागू किया है और पाया है कि XSLT वह अड़चन है जो प्रदर्शन से संबंधित सभी गैर-कार्यात्मक आवश्यकताओं को पूरा करते हुए उत्पाद को वितरित करना असंभव बनाता है?

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

एक्सएमएल प्रोग्रामिंग के लिए एक बुरा अंकन है और एक्सएसएलटी के बारे में क्या है।

तो आप एक XML को दूसरे में बदलना चाहते हैं, लेकिन XSLT का उपयोग नहीं करना चाहते क्योंकि "XML एक बुरा अंकन है"?

यदि यह तथ्य है कि आप XML को एक तरह की प्रोग्रामिंग भाषा के रूप में उपयोग करते हैं जो आपको बहुत परेशान करती है, तो इसे प्रोग्रामिंग के रूप में नहीं देखें, बल्कि रूपांतरण नियमों का एक समूह है।

आपको XSLT को हाथ से लिखने की भी आवश्यकता नहीं है। बहुत सारे ईटीएल संपादक हैं जो आपको ग्राफिक रूप से एक एक्सएमएल को एंटोथेर में मैप करने की अनुमति दे सकते हैं: किसी भी प्रोग्रामिंग की आवश्यकता नहीं है। उनमें से कुछ आउटपुट के रूप में XSLT का उपयोग करते हैं।


मुझे XSLT आधारित शीट के साथ संसाधन समस्याओं का सामना करना पड़ा है, वे एक ग्राफिकल टूल के साथ बनाए गए थे फिर भी बड़ी फ़ाइलों के साथ काम करना बंद कर दिया।
सिरबेल

1
तब शायद आपके खुद के साथ मुद्दे XSLT fileनहीं XSLT Transformationsहैं
मालाची

अब मैं XML की निंदा नहीं कर रहा हूं, वास्तव में मुझे लगता है कि यह डेटा प्रतिनिधित्व (विशेषकर मार्कअप के लिए) के लिए उपयुक्त है। "प्रोग्रामिंग भाषा" के रूप में - और XSLT एक डोमेन विशिष्ट प्रोग्रामिंग भाषा है - यह असुविधाजनक है। <xsl: क्वेरी विशेषताओं में जो भी> टैग, मेटलंगुज (जैसे xpath, $ संकेतन, आदि) है वह सब कुछ जो XML में मैप नहीं किया गया है उसे विशेषता उद्धरण में रखा जा रहा है। एक्सएमएल की एस-अभिव्यक्ति प्रतिनिधित्व की छाप के लिए: blog.getprismatic.com/blog/2013/1/22/… इतने दूर में XML और प्रोगैंग का काम बेकार लग सकता है
wirbel

1

यदि आप XSLT का उपयोग कच्चे XSLT और कुछ मापदंडों जो आप XSLT इंजन के लिए कर रहे हैं, के आधार पर XML उत्पन्न करने के लिए कर रहे हैं, तो एक टेम्प्लेटिंग XML दृष्टिकोण का उपयोग करना समझना और बनाए रखना बहुत आसान है।

मैं एक ऐसी परियोजना पर रहा हूँ जहाँ मूंछों का इस्तेमाल XSLT को बदलने के लिए किया गया था और परिणाम बहुत सरल आधार XML फ़ाइलों का था जिसे हर कोई संपादित कर सकता था और समायोजित कर सकता था, बजाय इसके कि परियोजना का काम एक या दो बहादुर आत्माओं को दिया जा रहा था, जो कुल मौन में बैठते थे पसीने की बूंदों के साथ ...

टेम्प्लेट दृष्टिकोण उपयोग के लिए उपयुक्त नहीं है जब बेस एक्सएमएल भी अपने आप में वैध डेटा है, और यह कि एक्सएसएलटी का उपयोग वैकल्पिक प्रतिनिधित्व प्रदान करने के लिए किया जा रहा है, या स्रोत एक्सएमएल से एक एक्सट्रैक्ट।


क्या आप इस बारे में और अधिक व्याख्या करने का मन बना रहे हैं कि यह पूछे गए प्रश्न का उत्तर देने के लिए आपको क्या करने की सलाह देता है? स्टैक एक्सचेंज में "लिंक-ओनली जवाब" का बहुत स्वागत नहीं है
gnat

1
आपकी प्रतिक्रिया के साथ समीक्षा उत्तर इनलाइन
माइकल शॉ

0

XML एक प्रोग्रामिंग लैंग्वेज नहीं है

XML एक तरह से Transfer / Transport Data है।
XSLT निर्देश क्या करता है Xpath का उपयोग डेटा को विशिष्ट तरीके से क्वेरी करने के लिए करता है और इसे किसी अन्य डेटा ट्रांसपोर्ट ऑब्जेक्ट / दस्तावेज़ में डालता है।

और / या

XSLT आपके XML को HTML में बदल सकता है, जो XML डॉक्यूमेंट में मौजूद डेटा को प्रदर्शित / ट्रांसपोर्ट करने का एक और तरीका है।

यदि आप XML को बदलना चाहते हैं, या XML दस्तावेज़ बनाएँ, तो आप किसी भी भाषा का उपयोग कर सकते हैं: C #, VB, रूबी, आदि।

जब आप एक्सएमएलटी फाइल का उपयोग करते हैं तो आमतौर पर एक्सएमएल डॉक्यूमेंट को बदलने के लिए आपके पास अभी भी ओरिजिनल एक्सएमएल डॉक्यूमेंट होता है, आप वास्तव में ओरिजिनल डॉक्यूमेंट को नहीं बदलते हैं, आप वास्तव में एक नया बनाते हैं।


1
विकिपीडिया कहता है: "XSLT एक ट्यूरिंग-पूर्ण भाषा है, जिसका अर्थ है कि यह कंप्यूटर द्वारा निष्पादित की जाने वाली किसी भी गणना को निर्दिष्ट कर सकता है।" मैंने कभी नहीं कहा कि XML प्रति प्रोग्रामिंग एक भाषा थी।
सिरबेल

आपने कहा कि प्रोग्रामिंग भाषाओं में "XML प्रोग्रामिंग के लिए एक बुरा संकेतन है" जिसका मैंने उपयोग किया है आप डेटा को एक्सएमएल फाइलों से आसानी से खींच सकते हैं। XSLT बहुत सारे संगणना करने में सक्षम होने के लिए ग्राउंडिंग ग्राउंड है और उस डेटा को किसी अन्य डेटा ट्रांसपोर्ट ऑब्जेक्ट / डॉक्यूमेंट पर थूकता है। यह SQL से SQL सर्वर की तरह है यह बहुत सारा सामान कर सकता है लेकिन यह ज्यादातर बैक एंड है, फ्रंट एंड नहीं। XSLT की तरह SQL, यह एक विशिष्ट तरीके से डेटा पर सवाल उठाता है, लेकिन आप कभी भी उस क्वेरी के परिणामों को एक रिपोर्ट के रूप में नहीं देना चाहते हैं, आप रिपोर्ट बिल्डर को सूचना भेजना चाहते हैं
मालाची

2
XSLT डेटा क्वेरी नहीं करता है, XPATH क्वेरी करता है। क्या XSLT एक घोषित भाषा नहीं है जो पार्स किए गए xml पर निर्देशों को परिभाषित करती है?
फिल्लीएनजे

XSLT पैटर्न के आधार पर परिवर्तन नियमों को परिभाषित करता है जिसके लिए वह Xpath का उपयोग कर सकता है। यानी आपके पास उच्च स्तरीय प्रोग्रामिंग निर्माण हो सकते हैं जैसे कि xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofपरिवर्तन नियमों को परिभाषित करने के लिए।
सिरबेल 10'13

1
@PhilVallone मैं सहमत हूँ। मैं वहां गलत था। wirrbel, मैं आपसे XSLT / XSL के बारे में कोई बहस करने वाला नहीं हूं और यदि आप अपने XML दस्तावेज़ को किसी अन्य XML दस्तावेज़ में बदलना चाहते हैं, तो आप XSLT / XSL का उपयोग करना चाहते हैं।
मालाची

0

मैंने कई XML प्रोसेसिंग सिस्टम पर काम किया है जो XSLT लाइब्रेरी को जावा या C ++ के साथ उन हिस्सों के लिए जोड़ते हैं जो XSLT में उतना अच्छा नहीं है। ऐसे पुस्तकालय हैं जो 20 एमबी XML फाइलों पर भी बहुत अच्छा XSLT प्रदर्शन प्राप्त करते हैं, हालांकि XSLT के संदर्भ, चर और वास्तव में जटिल स्ट्रिंग पैटर्न के साथ कुछ सीमाएं हैं। मैंने जिस सिस्टम पर काम किया है, उसमें कुछ चीजें जावा / सी ++ में की गई थीं, क्योंकि संदर्भ महत्वपूर्ण था या कुछ जटिल रेगेक्स एक्सप्रेशन ने मदद की। मेरा तरीका यह है कि आपकी पसंद की भाषा में कुछ अतिरिक्त कोड XSLT XML को बदलने का एक अच्छा तरीका है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.