2010-09-27 20 views
8

के बिना क्रम वाली सूची के साथ एक प्रकार का विस्तार करने के लिए कैसे यह मेरी XML स्कीमाXSD: तत्वों

<xs:complexType name="Friend"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="address" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

<xs:complexType name="Coworker"> 
    <xs:all> 
     <xs:element name="name" type="xs:string" /> 
     <xs:element name="phone" type="xs:string" /> 
     <xs:element name="office" type="xs:string" /> 
    </xs:all> 
</xs:complexType> 

बेहतर रख-रखाव के लिए का एक हिस्सा है, मैं एक (सार) सुपर प्रकार में साझा गुण चाहते हैं या कुछ इस तरह का। लेकिन अधिक महत्वपूर्ण, मैं चाहता हूं कि सभी तत्व अनियंत्रित और वैकल्पिक भी हों।

क्या यह संभव है, और इसे करने का सबसे अच्छा तरीका क्या है?

उत्तर

13

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

मान लीजिए कि आप Person नामक एक जटिल प्रकार को Friend और Coworker के सुपर-प्रकार के रूप में पेश करते हैं। यहाँ अपने विकल्प हैं:

  1. xs:sequence साथ xs:all बदलें, उप-प्रकारों से name और phone हटाने, सुपर-प्रकार में जोड़ने के लिए, और विरासत जोड़ें। आपके तत्वों को अब आदेश दिया जाना है, लेकिन आप उन्हें व्यक्तिगत रूप से वैकल्पिक बना सकते हैं। यह अवैधxs:all का उपयोग XML स्कीमा में टाइप पदानुक्रमों में करने के लिए करने के लिए है, क्योंकि प्रोसेसर यह नहीं बता सकता कि मूल सामग्री मॉडल कहां बंद हो जाता है और बाल सामग्री मॉडल शुरू होता है।
  2. xs:all<xs:choice maxOccurs="unbounded"> दोनों प्रकारों में बदलें, और अपनी विरासत जोड़ें। फिर आपके तत्व फिर से अनियंत्रित हो जाते हैं, लेकिन वे दोहरा सकते हैं।

तो निष्कर्ष में: आपके प्रकार के नाम दिए गए, मुझे लगता है कि आपकी आवश्यकताओं को पूरी तरह से पूरा नहीं किया जाएगा। मैं पहले विकल्प के लिए जाऊंगा: मनमानी तत्व आदेश पर जोर देना अक्सर उतना उपयोगी नहीं होता जितना लगता है।

+0

मुझे डर था कि यह मामला होगा। तो (1) यह होगा। – Cephalopod

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