2009-05-15 8 views
8

में केस-असंवेदनशील तत्व कैसे प्राप्त करें, जहां तक ​​मुझे एक्सएमएल तत्व प्रकार के नाम के साथ-साथ विशेषता नाम केस संवेदनशील हैं।एक्सएमएल

क्या केस असंवेदनशील तत्व प्राप्त करने का कोई तरीका या कोई चाल है?

स्पष्टीकरण: एक व्याकरण XSD जो डेटा अपलोड करने के लिए कुछ ग्राहकों के लिए प्रयोग किया जाता है के माध्यम से परिभाषित किया गया है। उपयोगकर्ता- सामग्री जेनरेटर- अलग-अलग टूल का उपयोग कर एक्सएमएल फाइलें बना रहे हैं लेकिन उनमें से कई सादे पाठ संपादकों या जो कुछ भी उपयोग कर रहे हैं। कभी-कभी जब ये लोग अपनी फाइलें अपलोड करने का प्रयास कर रहे होते हैं तो उन्हें असंगतता त्रुटियां मिलती हैं। यह एक आम त्रुटि है कि वे लोअरकेस और अपरकेस टैग मिश्रण करते हैं हालांकि यह हमेशा स्पष्ट था कि टैग केस संवेदनशील हैं।

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

कोई विचार?

अग्रिम धन्यवाद!

+1

जवाब के लिए धन्यवाद साधारण समाधान सभी टैग लोअरकेस भेजना है। इस मामले में UNFORTUNATELY XML मशीन से उत्पन्न नहीं है। हाथ लिखा है :-) – Luixv

+0

इनपुट को लोअरकेस में परिवर्तित करने का विकल्प नहीं है? –

+0

नहीं, यह नहीं है। उपयोगकर्ताओं के पास एक जीयूआई है जहां से वे अपनी फाइलें सीधे अपलोड करते हैं। – Luixv

उत्तर

0

एक्सएमएल आम तौर पर मशीन उत्पन्न होता है। इसलिए, आपके पास चौड़ाई <RANdOm /> केस कोई वास्तविक समस्या नहीं होनी चाहिए।

यदि वास्तविक समस्या यह है कि दो अलग-अलग सिस्टम दो अलग-अलग प्रकार के टैग (<Widget /> बनाम <widget />) उत्पन्न कर रहे हैं, तो मुझे लगता है कि आप बस अपने एक्सएसडी में दोनों मामलों को परिभाषित कर सकते हैं।

1

XPath/Xslt प्रोसेसर केस संवेदनशील हैं। यदि आप गलत केस निर्दिष्ट करते हैं तो वे नोड/विशेषता का चयन नहीं कर सकते हैं।

मामले में आप उत्पादन के लिए नोड नाम चाहते हैं और यह अपर केस में रहना चाहता हूँ, आप कर सकते हैं:

upper-case(local-name()) 
5

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

यानी एक्सएमएल फ़ाइल> XSD के विरुद्ध पार्स और सही> अपलोड

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

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

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

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

यहां चर्चा करने के लिए इस बारे में जाने के बहुत सारे तरीके हैं। यह मुख्य रूप से आपके लिए उपलब्ध कौशल-सेट या वित्त पर निर्भर करता है।

+0

जो आप कह रहे हैं वह सही है। जो मैं खोज रहा हूं वह एक्सएसडी स्तर पर कुछ है। मेरा मतलब है कि अगर मैं एक्सएसडी स्तर पर इस समस्या का सामना कर सकता हूं तो मैं सर्वर-साइड विधियों को बदलने से बचाना पसंद करूंगा। – Luixv

+0

वैसे भी, टिप्पणी के लिए धन्यवाद। ऐसा लगता है कि एक्सएसडी स्तर पर कोई रास्ता नहीं है। +1 – Luixv

+0

महान उत्तर, मैंने जो कहा होगा उतना ही! +1 – Cerebrus

1

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

यह उपयोगकर्ता को सामाजिक सुरक्षा संख्या प्रविष्टि फ़ील्ड में विशेष वर्ण इनपुट करने की अनुमति देने के समान होगा, क्योंकि उपयोगकर्ता विशेष पात्रों में प्रवेश करने में अधिक आरामदायक है (हां, यह उदाहरण मूर्ख है, बेहतर नहीं सोच सकता !)

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

0

अपलोड करने के बाद, एक्सएमएल फ़ाइल (डीओएम या एसएएक्स के माध्यम से) चलें और सत्यापन करने से पहले आवरण को ठीक करें?

1

सिद्धांत रूप में, आप गलत रूप से पूंजीकृत तत्व नामों को सत्यापित करने के लिए XML स्कीमा को हैक करने का प्रयास कर सकते हैं।

यह XML स्कीमा में प्रतिस्थापन समूह तंत्र का उपयोग करके किया जा सकता है। उदाहरण के लिए, यदि अपना स्कीमा था:

<xsd:element name="Foobar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="fooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FOOBAR" type="xsd:string" substitutionGroup="foobar"/> 

आदि

कोशिश करते हैं और संभव गलतियों वे कर सकता का अनुमान लगाने की:

<xsd:element name="foobar" type="xsd:string"/> 

तो आप XML स्कीमा के लिए निम्न जोड़ सकता है । प्रत्येक तत्व के लिए, मामलों के 2^एन संभावित संयोजन हो सकते हैं, जहां एन नाम की लंबाई है (माना जाता है कि नाम का प्रत्येक अक्षर एक पत्र है)।

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

जैसा कि अन्य लोगों ने कहा है, या तो मामले को ठीक करने के लिए सबमिट किए गए इनपुट को प्री-प्रोसेस करें या उपयोगकर्ताओं को सबमिट करने से पहले सही इनपुट तैयार करने के लिए।

0

/जिम्मेदार बताते हैं जब आप उपयोगकर्ता से xml लोड और उसके बाद ही सभी लोअरकेस टैग के लिए बनाया गया XSD पर जाँच/विशेषताओं