2008-09-02 12 views
6

जब XSD आप नेस्टेड प्रकार या वैश्विक प्रकार (complexType) के रूप में अपने प्रकार निर्धारित कर सकते हैं या तो परिभाषित करने।XSD: नेस्टेड प्रकार बनाम वैश्विक प्रकार

मैं समझता हूं कि जब वैश्विक रूप से मोर्फिज्म या तत्वों का पुन: उपयोग होता है तो वैश्विक प्रकारों का अधिक उपयोग होता है।

हालांकि, यदि आपके पास एक बड़ा डेटा मॉडल है तो आपको प्रत्येक स्तर के लिए एक वैश्विक जटिल टाइप परिभाषित करना होगा और फिर एक तत्व बनाएं जो वैश्विक प्रकार का संदर्भ देता है।

नेस्टेड

<xs:element name="person"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="firstname"/> 
          <xs:element name="lastname"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="address"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="street"/> 
          <xs:element name="city"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 

वैश्विक

<xs:element name="person"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="name" type="nameType"/> 
      <xs:element name="address" type="addressType"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="nameType"> 
    <xs:sequence> 
     <xs:element name="firstname"/> 
     <xs:element name="lastname"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="addressType"> 
    <xs:sequence> 
     <xs:element name="street"/> 
     <xs:element name="city"/> 
    </xs:sequence> 
</xs:complexType> 

इसलिए, मेरे सवाल: जब आप उन्हें विश्व बनाने के बजाय नेस्टेड प्रकार का उपयोग कर रहे हैं?

रुचि रखने वाले किसी भी व्यक्ति के लिए: मेरा प्रश्न किसी भी तरह से इस प्रश्न से संबंधित है (XML attribute vs element)।

उत्तर

7

दिए गए उदाहरण में, दोनों के बीच कोई वास्तविक अंतर नहीं है - और कोई भी महत्वपूर्ण लाभ या नुकसान नहीं है।

हालांकि, बड़े स्कीमा में चीजें बहुत ही अजीब और प्रबंधित करने में मुश्किल हो सकती हैं जब वैश्विक पर घोंसला चुनने का अभ्यास स्पष्ट रूप से परिभाषित नहीं होता है।

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

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

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

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