2012-03-21 26 views
5

में टाइप करें विशेषता मैं इस तरह के एक नमूना देखा है:रेफरी विशेषता या XSD

<xsd:element name="Product"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ProductName" type="xsd:string" /> 
      <xsd:element name="Customer" type="xsd:CustomerType" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="CustomerType"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FullName" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:occupation" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

और मुझे आश्चर्य है कि क्यों किसी एक type बजाय ref तरह के मामले में चुना जाएगा:

<xsd:element name="Product"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ProductName" type="xsd:string" /> 
      <xsd:element ref="Customer" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="Customer"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FullName" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:occupation" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

क्या ref के बजाय Type का उपयोग करने का सकारात्मक पक्ष होगा, क्या कोई मुझे समझा सकता है? मुझे क्या पता है ref में minOccurs और maxOccurs विकल्प भी हो सकते हैं ताकि आप ref को deserialized कोड में सरणी के रूप में परिभाषित कर सकें।

उत्तर

5

इसे देखने के कई तरीके हैं। मुझे लगता है कि यह सब कुछ बुनियादी सिद्धांतों के साथ शुरू हुआ, जैसे संलेखन शैली में स्थिरता। वहां से, लोगों ने एक तरफ बनाम दूसरे तरीके के प्रभावों का विश्लेषण करना शुरू कर दिया; नाम दिए गए थे: रूसी गुड़िया, सलामी स्लाइस, वेनेटियल ब्लिंड्स, द गार्डन ऑफ ईडन। यदि आप और जानना चाहते हैं, एक्सएसडी संलेखन शैलियों के बारे में एक खोज, जिसे एक्सएसडी के लिए डिज़ाइन पैटर्न भी कहा जाता है, इस विषय पर काम करने वाली साइटों की एक बड़ी संख्या प्रदान करेगा। यह link और this one बहुत अच्छा "फास्ट फूड" जैसा संदर्भ है, जैसा कि मैं शुरू करूंगा ... जबकि मैं वहां कुछ बयानों से असहमत हूं, उदा। contains only one global element (इसलिए, यदि मैं किसी वेब सेवा के लिए आरक्यू/आरएस स्कीमा परिभाषित करता हूं, तो मैं अनुपालन नहीं करता?) कुल मिलाकर एक अच्छा स्टार्टर है।

आपके मामले में, संदर्भित तत्वों के आधार पर लगातार सामग्री मॉडलों को परिभाषित करना "सलामी स्लाइस" पैटर्न का संकेत है: सभी तत्व वैश्विक, प्रकार स्थानीय (अनाम)। पहला निहितार्थ यह है कि कोई टैग से जुड़े नामस्थान से छुटकारा नहीं पा सकता है।

संदर्भित तत्वों का उपयोग नहीं करते हैं, बल्कि इसके बजाय स्थानीय परिभाषाओं पर भरोसा करते हैं, जो वैश्विक हैं, "वेनिस ब्लिंड" पैटर्न इंगित करते हैं। ऊपर नामस्थान टिप्पणी को ध्यान में रखते हुए, इस दृष्टिकोण के साथ अब स्कीमा तत्व पर elementFormDefault विशेषता सेट करके नामस्थानों को नियंत्रित करना संभव है।

कणों से जुड़े minOccurs/maxOccurs, यहां प्रासंगिक नहीं हैं। वैश्विक तत्व के लिए, ये विशेषताएं लागू नहीं होती हैं। सामग्री मॉडल कणों के लिए, तत्व एक प्रकार का है, चाहे तत्व रेफ एड या स्थानीय है, इससे कोई फर्क नहीं पड़ता।

+0

आपका पहला लिंक टूटा हुआ प्रतीत होता है। – BrianTheLion

+0

@BrianTheLion, मैंने पहला लिंक अपडेट किया है। –

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