2009-07-17 11 views
11

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

+0

धारणा है कि इसके लिए उपलब्ध उपकरण हैं, इस विचार पर आधारित है कि इसे शुरू करने के लिए व्यापक रूप से अपनाया गया था। लेकिन एक वाक्यविन्यास परिप्रेक्ष्य से, क्यों? एक ही जानकारी एक बहुत अधिक संक्षिप्त प्रारूप में प्रतिनिधित्व किया जा सकता था। यह जानकारी के 3 पृष्ठों के लिए, काम पर मिलने वाले कुछ चश्मे, बॉयलर प्लेट के 10 पृष्ठ पढ़ने जैसा है। यह मुझे एक अच्छा कारण नहीं देता है कि इसका उपयोग पहली जगह क्यों किया जाता था। – NoMoreZealots

उत्तर

11

ये केवल दो विकल्प नहीं हैं, आप JSON या YAML का भी उपयोग कर सकते हैं जो xml से अधिक हल्के वजन वाले हैं।

सामान्यतः, यदि आपके पास कई विशेष वर्णों के साथ सरल सारणीबद्ध डेटा है, तो CSV खराब विकल्प नहीं है। संरचित डेटा के लिए, अन्य 3 में से किसी एक का उपयोग करने पर विचार करें।

+0

+1: बहुत से लोग भूल जाते हैं कि एक्सएमएल के अलावा प्रारूप हैं जो लगभग एक ही चीज करते हैं। मैंने कभी भी वाईएएमएल के साथ काम नहीं किया है लेकिन जेएसओएन एक्सएमएल के लिए एक महान "हल्के वजन" विकल्प है (उल्लेख नहीं करना कि अधिकांश प्रोग्रामिंग भाषाओं में पार्स करना आसान है)। –

+0

ओह, गीज़, यह अच्छा है मैंने कुछ वाईएएमएल और जेएसओएन देखा। और वह वास्तव में मुझे मेरा जवाब देता है। एक्सएमएल की तुलना में निश्चित रूप से बेहतर गैर-स्वामित्व प्रारूप हैं। – NoMoreZealots

+0

कई मामलों के लिए, जेएसओएन एक्सएमएल की तुलना में काम करने के लिए निश्चित रूप से बेहतर है। जहां XML प्राप्त कर्षण यहां मानक मानकीकृत स्कीमा के साथ काम करते हैं, और स्कीमा को एक साथ एकीकृत करते समय (नेमस्पेस एक महान विचार है!)। यदि आपको इनमें से किसी की आवश्यकता नहीं है, और विशेष रूप से यदि आप अपनी जरूरतों के लिए विज्ञापन-प्रसार प्रारूप बना रहे हैं, तो JSON या YAML के साथ जाएं। – jcdyer

4

यह सब इस बात पर निर्भर करता है कि आपको क्या करना है। यदि आपको एक सरल "फ्लैट" पंक्ति संरचना की तुलना में अपने डेटा संरचनाओं में अधिक जटिलता की आवश्यकता हो सकती है। उदाहरण के लिए पदानुक्रमित डेटा, तो एक्सएमएल एक बढ़िया विकल्प है।

6

एक्सएमएल चीजों के जटिल, संरचित और पदानुक्रमिक प्रतिनिधित्व का समर्थन करता है। सीएसवी जो मामूली रूप से स्टोर कर सकता है उससे बहुत दूर है।

ऑब्जेक्ट उन्मुख वातावरण में एक जटिल ऑब्जेक्ट ग्राफ़ के बारे में सोचें। इसे एक्सएमएल दस्तावेज़ के रूप में आसानी से क्रमबद्ध किया जा सकता है लेकिन सीएसवी ऐसी चीज को संभाल नहीं सकता है।

+0

ठीक है, मैं हाइरिकल बनाम सीएसवी दे दूंगा। लेकिन अगर मैं एक जटिल ऑब्जेक्ट उन्मुख वातावरण के बारे में सोच रहा हूं, तो डेटा प्रतिनिधित्व के लिए सिंटैक्स की तरह एक सी ++ या जावा बहुत हल्का वजन है। मैंने वास्तव में एक "सी-संरचना" शैली डेटा पार्सर लिखने के बारे में सोचा है क्योंकि वाक्यविन्यास इतना साफ है। – NoMoreZealots

2

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

+0

अच्छा उदाहरण: आप सीएसवी में अल्पविराम वाले डेटा से कैसे निपटते हैं? एक्सएमएल में इस तरह के मामलों से निपटने का एक सही तरीका है। – russau

+0

सीएसवी एक मानक है: http://www.rfc-editor.org/rfc/rfc4180।txt – pmf

+0

यह वास्तव में एक्सएमएल का उपयोग करने का एक कारण नहीं है, हालांकि। –

1

एक्सएमएल अनुबंध (स्कीमा या डीटीडी) के खिलाफ मान्य किया जा सकता है।

1

एक्सएमएल भी इसके आसपास के मानार्थ प्रौद्योगिकियों है: XmlDom, XPath, XSLT, XSD, XML स्कीमा

16

लाभ

फायदे एक्सएमएल के एक नंबर सीएसवी से अधिक है:

  • श्रेणीबद्ध डेटा संगठन
  • स्वत: डेटा सत्यापन (एक्सएमएल स्कीमा या डीटीडी)
  • Eas ily प्रारूपों कन्वर्ट (XSL का प्रयोग करके)
  • आसान रिलेशनल संरचना
  • XML-RPC
  • वस्तु हठ (मार्शलिंग) के लिए उपयुक्त के साथ संयोजन में इस्तेमाल किया जा सकता की पहचान करने के
  • सरल व्यापार से व्यापार संचार
  • सहायक संबंधित तकनीकों (XPath, डोम)
  • आधुनिक वेब ब्राउज़र
  • निकालें, रूपांतरण, और लोड (ईटीएल) उपकरण
  • साथ तंग एकीकरण पिछड़ों प्रारूप संगतता (संस्करण विशेषता)
  • डिजिटल हस्ताक्षर

यह पूरी तरह से समस्या डोमेन और क्या आप हल करने की कोशिश कर रहे हैं पर निर्भर करता है फ़ाइल।

उदाहरण

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

आप सीएसवी के साथ ऐसा नहीं कर सकते हैं।

नुकसान

योएल Spolsky a great article क्यों एक्सएमएल एक जटिल डेटा स्टोर के रूप में एक गरीब विकल्प है पर है: यह धीमी है। (एक डेटाबेस के विपरीत, जो एक एकल सीपीयू निर्देश के साथ पिछले या अगले रिकॉर्ड पुनर्प्राप्त कर सकता है, एक्सएमएल दस्तावेज़ में रिकॉर्ड को रिकॉर्ड करना बहुत धीमा है।) तर्कसंगत रूप से, इसे waiting 18 months द्वारा हल किया गया अनुकूलन समस्या माना जा सकता है। इस प्रकार:

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

संबंधित प्रश्न

यह भी देखें: Why Should I Use A Human Readable File Format

+1

+1 बिल्कुल, एक्सएमएल के आसपास उपकरण और विनिर्देशों का एक संपूर्ण पारिस्थितिक तंत्र है। एक और: एक्सएमएल डिजिटल हस्ताक्षर आपको डेटा प्रमाणित करने का एक मानक तरीका प्रदान करता है। http://www.w3.org/Signature/ –

4

वेल एक्सएमएल मानव पठनीय और मानव संपादन योग्य है। आप एक एक्सएमएल फ़ाइल देख सकते हैं और जानते हैं कि यह वास्तव में क्या है। एक सीएसवी फ़ाइल मानव पठनीय है लेकिन आप वास्तव में नहीं जानते कि प्रत्येक मूल्य का क्या अर्थ है।

उदाहरण के लिए, यदि हम उपयोगकर्ता खाते संग्रहीत कर रहे हैं, तो आप क्या पसंद करेंगे?

<user> 
    <username>ryeguy</username> 
    <password>abc123</password> 
    <regdate>3-4-08</regdate> 
    <email>[email protected]</email> 
</user> 

या

ryeguy,abc123,3-4-08,[email protected] 
बेशक

, यह सिर्फ एक उदाहरण है, लेकिन 30 क्षेत्रों या तो साथ यह कल्पना!

या इससे भी बदतर, अगर हम उप-क्षेत्र बनाते हैं तो क्या होगा?

<user> 
    <username>ryeguy</username> 
    <password>abc123</password> 
    <regdate>3-4-08</regdate> 
    <email>[email protected]</email> 
    <posts> 
     <post> 
      <id>34</id> 
      .... 
     </post> 
    </posts> 
</user> 

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

+0

मुझे नहीं पता, फ़ाइल प्रारूप वास्तव में वास्तविक डेटा से अधिक स्थान लेता है। डेटा यानी सामान जो आपको वास्तव में जानना है! यदि मैं हाथ से बजाए प्रोग्राम से कर रहा हूं, तो " डेटा" बस मुझे और अधिक चीजें हैं जो मुझे अपने एचडी को क्लोज़ करना और घड़ी की चक्रों को अपशिष्ट करना है और बड़ी फ़ाइलों के लिए यह वास्तव में पढ़ने योग्य नहीं है । – NoMoreZealots

+0

शायद आप पहली पंक्ति के रूप में "उपयोगकर्ता नाम, पासवर्ड, regdate, ईमेल" जैसे हेडर पंक्ति चाहते हैं, तो, यदि आप वास्तव में अपने फ़ील्ड याद नहीं कर सकते हैं। – erjiang

3

तथ्य यह है कि एक्सएमएल मानव पठनीय है कि इसका मतलब यह नहीं है इसे पढ़ने के (या संपादित) होने सीधे मनुष्यों द्वारा के विचार के साथ बनाया गया है।

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

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

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

हथौड़ा सिंड्रोम का शिकार नहीं है: आप एक हथौड़ा (XML) है जब, सब कुछ एक कील (कुछ आप XML के साथ हल करने के लिए है कि) की तरह दिखता है। वास्तविकता बहुत अलग और नीच है। एक्सएमएल अच्छा है, लेकिन यह किसी भी समस्या का जवाब नहीं है।

+0

मुझे हथौड़ा टिप्पणी पसंद है। बॉब Fett सिर्फ बॉब, Fett, 100 की तुलना में लगता है, अच्छी तरह से गूंगा। – NoMoreZealots

1

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

2

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

1

मैं इस मामले में प्राथमिक भेद के बारे में सोच के रूप में XML आधारित वृक्ष है, जबकि सीएसवी टेबल आधारित है पसंद है।

है, तो आप घोंसला और फिर से घोंसला और छोड़ सकते हैं और आम तौर पर XML में एक जटिल वृक्ष संरचना बनाते हैं, जबकि आप केवल सीएसवी में सरल 2 डी टेबल बना सकते हैं।

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