2010-03-05 19 views
47

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

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

एक्सएसडी और डीटीडी के बीच चयन करते समय मुझे किन कारकों पर विचार करना चाहिए?

+1

बनाम प्रश्न के साथ बड़े ओवरलैप: http://stackoverflow.com/questions/1544200/what-is-difference-between-xml-chechema-and-dtd –

उत्तर

44

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

हालांकि, एक्सएमएल दस्तावेज का वर्णन करने के आपके वर्तमान उद्देश्यों के लिए, वास्तव में एक्सएसडी के साथ चिपक जाता है।

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

+0

अच्छा संक्षिप्त जानकारीपूर्ण उत्तर: आपकी सजा ने मुझे कुछ आश्चर्यचकित कर दिया : 'क्योंकि वे एक्सएमएल हैं [...] आप उनकी [वैधता] को बहुत आसान देख सकते हैं': दिलचस्प तरीके से आप ऐसा करते हैं जो डीटीडी मानक पर भरोसा करता है - http://www.w3.org/2001/ XMLSchema.dtd – monojohnny

+2

मेरा मतलब यह है कि एक एक्सएसडी स्वयं एक वैध XML दस्तावेज़ है, इसलिए आप इसे और XmlDocument या जो भी और पार्स जानकारी खोल सकते हैं।DTDs मान्य XML, इसलिए यदि आप कोड को उस DTD सामग्री (जो एक्सएमएल वर्गों बनाता है एक कोड जनरेटर की तरह) में पढ़ता लिखना चाहते हैं, आप पार्स करने के लिए है कि अपने आप को फ़ॉर्मेट की जरूरत नहीं कर रहे हैं। मुझे यकीन है कि डीटीडी फाइलों को पढ़ने के लिए componets/utilities हैं, लेकिन एक्सएसडी आपको इसे (अपेक्षाकृत) आसानी से पारदर्शी एक्सएमएल के माध्यम से मुफ्त में देता है। –

+2

@monoJohnny - आप बहुत सही XSD स्कीमा दस्तावेज़ों के लिए एक DTD है कि वहाँ रहे हैं, लेकिन यह कहना स्कीमा दस्तावेजों की कि मान्यता जरूरी DTDs पर निर्भर करता है बहुत सही नहीं है; स्कीमा दस्तावेज़ों के लिए एक एक्सएसडी स्कीमा भी है। DTD आंशिक रूप से बूटस्ट्रैपिंग के लिए प्रदान किया गया था (जब XSD की प्रारंभिक ड्राफ्ट बाहर आया, DTDs पहले से ही व्यापक रूप से समर्थन किया था) और आंशिक रूप से तुलना प्रयोजनों के लिए (मदद करने के लिए DTD की समझ रखने वाले पाठकों स्कीमा दस्तावेज़ों के लिए स्कीमा को समझने)। –

5

यह डीटीडी की संरचना को समझने में कोई दिक्कत नहीं होगी (यह आपको लंबे समय तक एक्सएसडी को बेहतर ढंग से समझने में मदद करेगा) ... लेकिन आपको आगे बढ़ने वाले एक्सएसडी का उपयोग करना चाहिए।

7

यह वास्तव में इस बात पर निर्भर करता है कि संरचना कितनी जटिल है कि आपको सेटअप करने की आवश्यकता है।

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

जैसा कि मैं इसे समझता हूं, एक्सएसडी डीटीडी से लिया गया है, इसलिए समझना डीटीडी एक्सएसडी सीखने के लिए एक ठोस नींव देगा, साथ ही डीटीडी की कुछ कमियों को इंगित करेगा।

5

DTD सीखने में कोई बुराई है, लेकिन, XSD का उपयोग सुनिश्चित करें क्योंकि XSD अधिक शक्ति है,

XSD के साथ आप केवल एक्सएमएल टैग की/पदानुक्रम लेकिन यह भी संरचना मान्य नहीं कर सकता,

  1. आप परिभाषित कर सकते हैं नोड्स के मानों का डेटा प्रकार। [दिनांक, संख्या, स्ट्रिंग आदि]
  2. तुम भी नोड के लिए, कस्टम data_types, [उदाहरण परिभाषित कर सकते हैं, संभव डेटा हो सकता है 12 महीनों में से एक .. ताकि आप की जरूरत के सभी 12 महीनों परिभाषित करने के लिए एक नया डेटा गणन मान के रूप में सभी 12 महीने नाम लिख प्रकार .. सत्यापन त्रुटि से पता चलता है, तो इनपुट एक्सएमएल इन 12 मूल्यों से किसी भी दूसरे मान ..]
  3. आप पर प्रतिबंध डाल सकते हैं minOccurs और maxOccurs का उपयोग करके तत्वों की घटना, डिफ़ॉल्ट v अल्यू 1 और 1.

.. और कई और ...

कुछ प्रतिबंध होते हैं: जैसे के रूप में,

  1. एक तत्व (नाम) XSD फ़ाइल में परिभाषित किया गया केवल एक डेटा-प्रकार के साथ परिभाषित किया जाना चाहिए।
  2. आप किसी अन्य नोड/विशेषता के मान का उपयोग करके नोड/विशेषता मान्य नहीं कर सकते हैं।
+1

कोई DTD सुविधा, कि XSD में नहीं किया जा सकता है? –

+2

@dma_k, कोई नहीं! .. –

+0

>> आप एक नोड/विशेषता एक और नोड/विशेषता के मान का उपयोग कर मान्य नहीं कर सकता। क्या इसका मतलब है कि मेरे पास डायनामिक डेटा टाइप नहीं हो सकता है? उदाहरण के लिए उपयोगकर्ता किसी तत्व में डेटाबेस कनेक्शन की एक सूची कॉन्फ़िगर कर सकते हैं और कनेक्शन तत्वों का उपयोग किसी भिन्न तत्व (सेवाओं का कहना) में कर सकते हैं और यदि xvd मान्य है, तो उसी नाम के साथ कनेक्शन मौजूद है जो sevices तत्व के अंदर कॉन्फ़िगर किया गया है? – balki

2

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

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

मुझे लगता है कि क्योंकि यह एक्सएमएल सिंटैक्स का उपयोग करता XSD अभी भी बेहतर और अधिक प्राकृतिक है, बस डेविल्स एडवोकेट :) खेलना चाहते थे

+0

जैसे regex के साथ भी डीटीडी के लिए घटनाओं पर प्रतिबंध जोड़ सकते हैं [यह] कहा गया है [http://stackoverflow.com/questions/1490583/dtd-or-xml-chechema-which-one -इस-बेहतर) कि एक्सएसडी फाइलें एक्सएमएल दस्तावेजों के साथ भी इनलाइन हो सकती हैं, क्या आप पहले मुद्दे के बारे में अधिक जानकारी देंगे? (ईएनटीटीआई फ़ंक्शन को शामिल करना) – Shohreh

2

वहाँ एक IMHO बहुत महत्वपूर्ण मुद्दा एक XSD अगर साथ हो सकता है एक साथ एक DTD उपयोग करने के लिए (है आप में गहरे सत्यापन करना होगा):

DTD में आप अपनी खुद की संस्थाओं को परिभाषित कर सकते जैसे:

<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO"> 

अपने दस्तावेज़ आप की जरूरत wherevever कर सकते हैं बस कोड और MyName में; इसके बजाय इन सभी चीजों को टाइप करना।

इसके अलावा मान लें कि आपके एक एक्सएमएल की तरह फ़ाइल (शायद कोई अन्य एप्लिकेशन द्वारा उत्पादित) है कि इसी तरह टैग का एक बहुत है, लेकिन कोई रूट टैग, जैसे होते हैं:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' --> 
<Book Author="Author1"> 
    <Titel>Erstes Buch</Titel> 
</Book> 
... 
<Book Author="Author5"> 
    <Titel>Fünftes Buch</Titel> 
</Book> 

इस फाइल को मान लें नाम है " Booklist.TXT ",

अब आप अपने गुरु-XML कोड कर सकते हैं:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' --> 
<DOCTYPE MyRoot [ 
<ENTITY AllBooks SYSTEM "Booklist.TXT"> 
] 

<MyRoot> 
... some prefix-stuff as needed ... 
&AllBooks; <!-- here are all the Books --> 
... some post stuff es needed ... 
</MyBook> 

और आप केवल आसपास के XML कोड और टी के लिए नहीं habe चाहिए जब भी आप एक और संदर्भ में पुस्तकों की जरूरत है ouch या कॉपी स्वयं पुस्तकसूची, इसके अलावा आप इसे एक ही स्थान पर रखरखाव कर सकते हैं और किसी भी दस्तावेज़ में सभी परिवर्तन कर सकते हैं।

+1

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

0

एक्सएमएल स्कीमा अधिक जटिल सत्यापन कर सकता है। E.g यदि डीटीडी एक एक्सएमएल तत्व की डेटाटाइप जांचता है तो पूर्णांक या स्ट्रिंग.एक्सएमएल स्कीमा अधिक जटिल मान्यताओं को निष्पादित कर सकता है जैसे कि एक्सएमएल तत्व एक स्ट्रिंग है जो अपरकेस अक्षर या सकारात्मक पूर्णांक से शुरू होता है। अंत में एक्सएमएल स्कीमा एक्सएमएल सिंटैक्स का उपयोग करता है और यह वेब सेवाओं के विकास के लिए एक प्राकृतिक पसंद है।

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