2008-08-10 12 views
8

मैं कुछ XML दस्तावेज़ों पैदा कर रहा हूँ और जब यह पता भाग के लिए आता है मैं टुकड़े कि इस तरह दिखना है:क्या यह "खराब अभ्यास" एक्सएमएल दस्तावेज़ों में लाइनब्रेक्स के प्रति संवेदनशील होने के लिए है?

<Address>15 Sample St 
Example Bay 
Some Country</Address> 

XSLT मैं एक्सएचटीएमएल को यह परिवर्तित करने के लिए है कि न्यू लाइन कन्वर्ट करने के लिए कुछ अजीब पुनरावर्ती टेम्पलेट है स्ट्रिंग्स के भीतर वर्ण < br/> टैग के लिए वर्ण।

यह सब ठीक काम कर रहा है; लेकिन क्या इसे एक्सएमएल दस्तावेजों के भीतर लाइनब्रेक्स पर भरोसा करने के लिए "बुरी आदत" माना जाता है? यदि हां, तो क्या यह अनुशंसा की जाती है कि मैं इसके बजाय ऐसा करूं?

<Address><Line>15 Sample St</Line> 
<Line>Example Bay</Line> 
<Line>Some Country</Line></Address> 

लगता है जैसे कि यह वास्तव में हर जगह है जहाँ मेरे पाठ की तरह टैग के साथ कई पंक्तियों हो सकता है रैप करने के लिए अजीब हो जाएगा ..

उत्तर

9

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

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

एक अन्य संभावित समस्या यह है कि अगर आप अपने XML दस्तावेज़ को खोलने के लिए एक XML संपादक में और यह बहुत-प्रिंट, आप उन पंक्ति विराम कम करने के लिए की संभावना हो जाती है।

यदि आप लाइनब्रेक्स का उपयोग करते रहते हैं, तो सुनिश्चित करें कि एक xml जोड़ें: space = "preserve" विशेषता "पता" में दें।

(। आप अपने DTD में ऐसा कर सकते हैं, यदि आप एक प्रयोग कर रहे हैं) कुछ

  • एक article from XML.com पढ़ने का सुझाव दिया कहते हैं निम्नलिखित:

एक्सएमएल अनुप्रयोग अक्सर लगते हैं व्हाइटस्पेस की ओर कैवेलियर रवैया लेने के लिए में एक XML दस्तावेज़ में स्थानों के नियम जहां व्हाइटस्पेस इससे कोई फर्क नहीं पड़ता कि कभी-कभी एप्लिकेशन को जोड़ने के लिए मुफ्त रीइन या कुछ स्थानों पर व्हाइटस्पेस हटा दें।

-1

हाँ, मैं एक CDATA ब्लॉक का उपयोग लगता है कि खाली स्थान के रक्षा करेगी। हालांकि कुछ पार्सर एपीआई आपको व्हाइटस्पेस को संरक्षित करने की अनुमति देते हैं।

2

मुझे लगता है कि केवल वास्तविक समस्या यह है कि यह एक्सएमएल को पढ़ने में कठोर बनाता है। जैसे

<Something> 
    <Contains> 
     <An> 
      <Address>15 Sample St 
Example Bay 
Some Country</Address> 
     </An> 
    </Contains> 
</Something> 

तो बहुत एक्सएमएल एक चिंता का विषय नहीं है, मैं शायद इसके बारे में चिंता नहीं होगी, जब तक कि यह काम कर रहा। अगर सुंदर एक्सएमएल एक चिंता है, तो मैं XML में एम्बेड करने से पहले स्पष्ट न्यूलाइन को <br /> टैग या \n में परिवर्तित कर दूंगा।

1

यह इस बात पर निर्भर करता है कि आप XML को कैसे पढ़ रहे हैं और लिख रहे हैं।

एक्सएमएल स्वचालित रूप से उत्पन्न किया जा रहा है - अगर नई पंक्तियों या स्पष्ट \ N झंडे
में पार्स किया जा रहा है - तो के बारे में चिंता की कोई बात नहीं है। आपके इनपुट में इसकी कोई अन्य एक्सएमएल नहीं है, इसलिए एक्सएमएल के साथ गड़बड़ करने के लिए यह सिर्फ क्लीनर है।

यदि टैग मैन्युअल रूप से काम किए जा रहे हैं, तो अभी भी एक लाइन ब्रेक होने के लिए अभी भी क्लीनर है, अगर आप मुझसे पूछें।

अपवाद यह है कि यदि आप एक्सएमएल से कुछ संरचना प्राप्त करने के लिए डोम का उपयोग कर रहे हैं तो अपवाद है। उस स्थिति में लाइन ब्रेक स्पष्ट रूप से बुरा हैं क्योंकि वे विरासत को सही ढंग से प्रस्तुत नहीं करते हैं। ऐसा लगता है कि विरासत आपके आवेदन के लिए अप्रासंगिक है, हालांकि, लाइन पर्याप्त ध्वनि तोड़ती है।

एक्सएमएल सिर्फ बुरा (खासकर जब स्वचालित रूप से उत्पन्न) लग रहा है, Tidy मदद कर सकते हैं, हालांकि यह XML के साथ की तुलना में HTML के साथ बेहतर काम करता है।

-1

आपको वास्तव में क्या करना चाहिए, यह आपके एक्सएमएल को एक प्रारूप में परिवर्तित कर रहा है जो सफेद-स्थान को संरक्षित करता है।

तो बजाय < साथ \ N को बदलने के लिए की तलाश br/> आप एक < पूर्व >

इस तरह पूरे ब्लॉक लपेट चाहिए, अपना पता कार्यात्मक रूप से संरक्षित है (चाहे आप लाइन ब्रेक या नहीं शामिल हैं) और एक्सएसटीएल परिणाम में सफेद-स्थान को संरक्षित करना चुन सकता है या नहीं। &#x000D;

-1

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

0

मैं क्या <Line> टैग के साथ गलत क्या है नहीं दिख रहा है -

-2

आप अपने लाइनब्रेक संरक्षित जरूरत है एक CDATA ब्लॉक का उपयोग करते हैं, tweakt said

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

2

डेटा स्टोर करने के लिए विशेषताओं का उपयोग करने के बारे में क्या हैं के बजाय पाठ नोड्स:

<Address Street="15 Sample St" City="Example Bay" State="" Country="Some Country"/> 

मैं जानता हूँ कि बनाम पाठ नोड्स विशेषताओं का उपयोग एक बार बहस विषय है, लेकिन मैं विशेषताओं के साथ समय का 95% अटक गया है, और किसी भी मुसीबतों क्योंकि नहीं किया है इसका

1

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

मैं कहूंगा कि आम तौर पर यह एक बड़ी समस्या नहीं है, लेकिन इस मामले में मुझे लगता है कि लाइन टैग सबसे सही है क्योंकि यह स्पष्ट रूप से दिखाता है कि आप वास्तव में यह नहीं समझते कि विभिन्न संस्कृतियों में लाइनों का क्या अर्थ हो सकता है। (याद रखें कि पते में प्रवेश के लिए अधिकांश रूपों में ज़िप कोड इत्यादि है, और पता पंक्ति 1 और 2.)

लाइन टैग रखने की अजीबता सामान्य एक्सएमएल के साथ आता है, और डरावनी कोडिंग पर बहुत बहस हुई है। http://www.codinghorror.com/blog/archives/001139.html

1

एक्सएमएल स्पेक के पास whitespace और linefeeds and carriage returns in particular के बारे में कुछ कहना है। तो यदि आप अपने आप को वास्तविक लाइनफ़ीड्स (x0A) तक सीमित करते हैं तो आपको ठीक होना चाहिए। हालांकि, कई संपादन उपकरण "बेहतर प्रस्तुति" के लिए एक्सएमएल को दोबारा सुधारेंगे और संभवतः विशेष वाक्यविन्यास से छुटकारा पायेंगे। की तुलना में एक और अधिक मजबूत और क्लीनर दृष्टिकोण "< लाइन> </लाइन>" विचार बस नामस्थान उपयोग करने के लिए हो सकता है और एक्सएचटीएमएल सामग्री, जैसे एम्बेड होगा:

<Address xmlns="http://www.w3.org/1999/xhtml">15 Sample St<br />Example Bay<br />Some Country</Address> 

पहिया बदलने की कोई जरूरत नहीं है जब यह मानक शब्दसंग्रह की बात आती है ।

3

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

<Address>15 Sample St 
Example Bay 
Some Country</Address> 

बिल्कुल

<Address><![CDATA[15 Sample St 
Example Bay 
Some Country]]></Address> 

फर्क सिर्फ इतना है कि कैसे विभिन्न एपीआई इस रिपोर्ट के समान है।

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

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