2010-01-18 13 views
17

मैं एक उपकरण के आउटपुट को देख रहा हूं, एक्सएमएल में डेटाबेस टेबल डंप कर रहा हूं। स्तंभों में से एक 64Kbit नाम पर है, उपकरण को कूटबद्ध है कि इस तरह के रूप में, और मुझे लगता है कि दोहराने की जरूरत है:एन्कोडिंग XML तत्व नाम किसी संख्या से शुरू होता है?

<_x0036_4kbit>0</_x0036_4kbit> 

इस मानक एन्कोडिंग के कुछ प्रकार है? मैं इसके बारे में और कहां जान सकता हूं?

उत्तर

15

खैर, यह भी मानक होना प्रतीत नहीं होता है, लेकिन स्पष्ट रूप से एक्सएमएल एक तत्व नाम के पहले अक्षर के रूप में संख्या (और कुछ अन्य चीजों) की अनुमति नहीं देता:

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | 
        [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | 
        [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | 
        [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | 
        [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 

यहाँ इस एन्कोडिंग सिर्फ थोड़े निकल जाता है पहला चरित्र अगर यह आवश्यकताओं को फिट नहीं करता है। यह उस चरित्र के हेक्साडेसिमल मान का उपयोग करता है। _x0036_ स्पष्ट रूप से हेक्साडेक्सिमल 0x36 से संबंधित है जो दशमलव में 54 है और 6 का प्रतिनिधित्व करता है।

6

एक एक्सएमएल नाम एक अंक से शुरू नहीं हो सकता है, इसलिए कुछ अन्य प्रतिनिधित्व का उपयोग किया जाना चाहिए जिसे '6' के रूप में समझा जा सकता है।

उपकरण ने अंडरस्कोर से घिरे चरित्र के हेक्साडेसिमल प्रतिनिधित्व को लिखने के लिए चुना है। कोड \x0036 चरित्र '6' के लिए हेक्साडेसिमल कोड है, जो दशमलव में 54 है। अंडरस्कोर एक एक्सएमएल नाम की शुरुआत में मान्य वर्ण हैं, इसलिए यह काम करता है।

यह वही तकनीक एक्सएमएल नामों में अमान्य अन्य पात्रों से बचने के लिए उपयोग की जा सकती है। उदाहरण के लिए इस तकनीक का उपयोग माइक्रोसॉफ्ट के एक्सएमएल कन्वर्ट द्वारा किया गया है, जैसा कि here वर्णित है, लेकिन मुझे यकीन है कि अन्य टूल्स भी हैं जो एक ही तकनीक का उपयोग करते हैं।

1

यह एन्कोडिंग एक्सएमएल के लिए डिफ़ॉल्ट नहीं है, लेकिन आपके उपकरण द्वारा आवश्यक लगता है, क्योंकि तत्वों को small character set से शुरू होना चाहिए।

_x0036_ अनुक्रम Haxadecimal संख्या 36 (दशमलव 54) का प्रतिनिधित्व करता है, जो ASCII तालिका में आपके 6 वर्ण का प्रतिनिधित्व करता है।

40

आधिकारिक शब्द यह है कि एक्सएमएल नामकरण सम्मेलनों पर लगाए गए प्रतिबंध को एक्सएमएल के पैरेंट-सेट एसजीएमएल से विरासत में मिला है, केवल एक अपवाद के साथ: एक्सएमएल में, एक अतिरिक्त विकल्प के रूप में, नाम अंडरस्कोर '_' चरित्र से शुरू हो सकते हैं।

एसजीएमएल 1 9 60 के दशक में आईबीएम द्वारा विकसित किया गया था, जो '1 9 60 की शैली' सोच रहे थे।

नतीजतन, मस्तिष्क-तूफान जो एसजीएमएल के निर्माण की ओर ले जाता है, उस भारी धारणा से विचलित हो सकता है कि अंतरिक्ष जहाजों, समय-यात्रा और रसोई के पन्नी से बने ब्लेयर 'उन्हें एलियंस' से बचाने के लिए और विचार-उत्तेजना और दिमाग-नियंत्रण पर उनके मूर्ख-कठिन प्रयासों को उचित प्रक्रियाओं के बारे में सोचा गया था।

तो। सवाल अभी भी बनी हुई है। एसजीएमएल संख्याओं की अनुमति क्यों नहीं देता है? इसके अलावा, नियंत्रण-पात्रों के अलावा किसी भी चरित्र के उपयोग पर लगाए गए किसी प्रकार का प्रतिबंध क्यों नहीं होगा; <,>, & और खाली जगह? यह पागलपन होगा, निश्चित रूप से कंप्यूटर गीक को इतने सारे कुंजियों के साथ इतने सारे कुंजियों के साथ पेश करने के लिए, केवल उन्हें इस्तेमाल करने से रोकने के लिए।

1 9 60 के दशक में पार्सर सोचने का सबसे महत्वपूर्ण कारण यह है कि यह जटिलता नियम के बाद पूरी तरह से पैडेंट्री की डिग्री है।

'सरल पार्सर है, यह तेजी से प्रदर्शन करेंगे'

वर्णमाला 26 राजधानी + 26 uncapital पात्रों कुल में बड़ा है, और कहा कि 52. की अनुमति दे संख्या है एक अतिरिक्त दस अंक, एक के बारे में है जो छठा और!

मानव शब्दों में, यह छह छिपे हुए गंदे-encrusted बर्तन धोने की तरह होगा, हर एक को साफ करने के लिए एक घंटे लग रहा है, और फिर अंतिम बर्तन के नीचे छिपा एक अतिरिक्त बोनस पॉट धोने के लिए है, और आप इसे धोना चाहिए ! आपको अपने पूरे जीवन के लिए हर दिन इस दिनचर्या को दोहराना होगा, और यह वही है जो इसे पसंद है। ठीक!

मार्क-अप भाषा दस्तावेज़ों में सामग्री में बढ़ने की प्रवृत्ति है। तो, पार्सर के लिए कम नौकरियां, प्रदर्शन गति में प्रत्यक्ष वृद्धि का मतलब है। लाभ तब तक रैंक के माध्यम से नीचे घूमते हैं जब तक वे शुद्ध आकर्षक प्रदर्शन में बदलाव नहीं करते।

'घोड़े, गाड़ी और कमोडोर 64 के पुराने दिनों में' किलोबाइट्स स्वयं की देखभाल करने के लिए, उपयोगकर्ता की ज़िम्मेदारी उनके बिट्स और बाइट्स को मैन्युअल रूप से गिनने के लिए उपयोगकर्ता की ज़िम्मेदारी थी। हालांकि, चूंकि आधुनिक सीपीयू अपने प्राचीन पूर्ववर्ती से निपटने में अधिक सक्षम है, इसलिए पार्सर द्वारा लगाए गए प्रतिबंध प्रदर्शन के मुद्दों से अधिक महत्वपूर्ण हो गए हैं।

यदि यह कोई सांत्वना है, तो अगर मैं मार्क-अप भाषा स्वयं डिजाइन करना चाहता हूं (जो कि तर्क के लिए है, हम एनएएम-एलआईटी-एमएएमएल को कॉल करेंगे, क्योंकि निकोलस की भयानक मार्क-अप भाषा सबसे शानदार मार्क-अप है भाषा (कभी भी!), तो यह आपको दुनिया के पूरे इतिहास में, और वास्तव में ब्रह्मांड के बिना किसी अपवाद के सभी पात्रों का उपयोग करने की अनुमति देगा, और मैं वास्तव में कुछ काम करने के लिए कड़ी मेहनत करूँगा भाषा का अपना उपयोग, जिसे अभी भी अपने स्वयं के बचने वाले चरित्र के उपयोग से दस्तावेज़ में उपयोग किया जा सकता है, जो कि किसी भी अन्य चरित्र की तरह कुछ भी नहीं दिखता है।

एक्सएमएल द्वारा लगाए गए प्रतिबंध एसजीएमएल से विरासत में हैं, और हम सभी सहमत हैं कि इस दिन और अंतरिक्ष जहाज के ऊंटों की आयु ए अन्य उपयोगी रोबोटिक स्तनधारियों, वे अनावश्यक, बेवकूफ हैं और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के अनाज के खिलाफ जाते हैं।

इसके अलावा http://www.w3.org/TR/REC-xml/

पर पढ़ने हालांकि simpliest रास्ता है कि मैं एक नाम एक्सएमएल संगत बनाने के लिए मिल गया है '_' के एक प्रत्यय शामिल करने के लिए है, कोई मानक नहीं है और इस तरह के अन्य तरीकों के रूप में उपयोग में हैं।

आपके उदाहरण में, पहला अक्षर हेक्स मान में परिवर्तित कर दिया गया है। यह हेक्स मान ASCII, यूनिकोड और निस्संदेह दोनों में '6' वर्ण का प्रतिनिधित्व करता है।

हेक्स मानों का उपयोग करने के बारे में एक अच्छी बात यह है कि कोड-सेट में सभी वर्ण उदा। यूनिकोड का प्रतिनिधित्व किया जा सकता है।

एक बुरी बात यह है कि वे एक नज़र में पठनीय नहीं हैं।

+4

"इन पुराने दिनों में" - "ये" में "वाई" एक "वाई" नहीं है, यह "थ" के लिए एक पुराना अंग्रेज़ी पत्र है जो एक विकृत "वाई" जैसा दिखता है कि जर्मन में एक विशेष पत्र है जो "एसएस" के लिए कम या कम है लेकिन विकृत "बी" की तरह दिखता है। तो आपने अभी कहा "पुराने दिनों में"। मैं स्पष्ट रूप से इसे प्रासंगिक होने के लिए मजबूर कर सकता हूं - यह दिखाता है कि आपको बहुत से अक्षरों की अनुमति नहीं देनी चाहिए या अन्यथा आपको अराजकता और भ्रम मिलता है। असल में एसजीएमएल को यह गलत लगता है - आपको केवल एक अक्षर की आवश्यकता है जो असीमित संख्या को स्पष्ट रूप से और यथासंभव सरल रूप से परिभाषित करने के लिए आवश्यक है, और वह पत्र स्पष्ट रूप से पूंजी "ओ" होना चाहिए। – Steve314

+2

प्रश्न में वर्ण: कांटा (þ) और एस्ज़ेट (ß)। – jdmichal

+0

यह सब मनोरंजक है, लेकिन लड़का मुझे खुशी है कि वे एक्सएमएल को उस "सीमा" के साथ डिजाइन करते हैं। यह निश्चित रूप से अन्य वास्तविक दुनिया (सिस्फी के विपरीत) प्रोग्रामिंग भाषाओं के साथ इसे एकीकृत करना बहुत आसान बनाता है। क्योंकि अन्यथा, वहां बहुत से लोग होंगे जिन्होंने सोचा था कि एक टैग के साथ अपना टैग शुरू करना एक अच्छा विचार था और इस पर ध्यान नहीं दिया कि इसे किसने उपभोग किया था। – jep

4

आईआईआरसी (मैं वहां था, लेकिन यह बहुत समय पहले था) सोच यह थी कि XML तत्व & प्रोग्रामिंग-भाषा संरचनाओं के गुणों को मैप करना बहुत आम होगा, जो चर द्वारा दर्शाए जाते हैं, और बहुत कम (कोई भी ?) प्रोग्रामिंग भाषाएं वेरिएबल नामों की अनुमति देती हैं जो संख्याओं से शुरू होती हैं। तो, विचार यह है कि एक्सएमएल तत्व/विशेषता नामों को अधिकांश भाषाओं के चर-नामकरण नियमों में अच्छी तरह से फिट होना चाहिए। क्या मुझे अभी भी विश्वास है? अगर हम फिर से एक्सएमएल कर रहे थे, तो क्या मैं इसके साथ ठीक रहूंगा? पता नहीं; हालांकि यह एक दिलचस्प चर्चा होगी।

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