java - XSD polymorphism doesn't work with JAXP? -
मेरे पास XML जैसा था:
& lt; सदस्यों & gt; & LT; सदस्य & gt; & LT; नाम & gt; जॉन & lt; / नाम & gt; & LT; गुण & gt; & LT; उम्र & gt; 20 & lt; / उम्र & gt; & LT; पता & gt; 20 & lt; / पता & gt; & Lt; / गुण & gt; & Lt; / सदस्य & gt; & LT; सदस्य & gt; & LT; नाम & gt; कायला & lt; / नाम & gt; & LT; गुण & gt; & LT; लिंग & gt; महिला & lt; / लिंग & gt; & LT; पता & gt; 20 & lt; / पता & gt; & Lt; / गुण & gt; & Lt; / सदस्य & gt; & Lt; / सदस्यों & gt; यहां कई सदस्य नोड होंगे, वे सभी एक & lt; नाम & gt; नोड और एक properties नोड साझा करते हैं। हालांकि, गुण में तत्व अलग हैं, या तो उम्र + पता या लिंग + पता मान्य विकल्प हैं।
मैंने इस तरह एक XSD लिखने की कोशिश की:
& lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8"? & Gt; & Lt; xs: स्कीमा विशेषताफ़ॉर्म डिफॉल्ट = "अयोग्य" तत्वफार्मडिफ़ॉल्ट = "योग्य" xmlns: xs = "http://www.w3.org/2001/XMLSchema" & gt; & Lt; xs: तत्व का नाम = "सदस्य" प्रकार = "सदस्य प्रकार" / & gt; & Lt; x: जटिल टाइप नाम = "सदस्य प्रकार" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व प्रकार = "सदस्य टाइप" नाम = "सदस्य" अधिकतम ओकेर्स = "असीबद्ध" minOccurs = "0" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: complexType & gt; & Lt; x: जटिल टाइप नाम = "सदस्य प्रकार" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व का नाम = "नाम" प्रकार = "x: स्ट्रिंग" / & gt; & Lt; xs: तत्व प्रकार = "गुण प्रकार" नाम = "गुण" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: complexType & gt; & Lt; x: जटिल टाइप नाम = "प्रॉपर्टी टाइप करें" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व प्रकार = "xs: स्ट्रिंग" नाम = "पता" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: complexType & gt; & Lt; xs: जटिल टाइप नाम = "गुण प्रकार टाइप ए" & gt; & LT; XS: complexContent & gt; & Lt; x: एक्सटेंशन बेस = "प्रॉपर्टी टाइप करें" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व प्रकार = "xs: स्ट्रिंग" नाम = "आयु" मिनट ऑक्कर = "0" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: विस्तार & gt; & Lt; / XS: complexContent & gt; & Lt; / XS: complexType & gt; & Lt; x: जटिल टाइप करें नाम = "गुण प्रकार टाइप करें" & gt; & LT; XS: complexContent & gt; & Lt; x: एक्सटेंशन बेस = "प्रॉपर्टी टाइप करें" & gt; & LT; XS: अनुक्रम & gt; & Lt; xs: तत्व प्रकार = "xs: स्ट्रिंग" नाम = "लिंग" मिनट ऑक्कर = "0" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: विस्तार & gt; & Lt; / XS: complexContent & gt; & Lt; / XS: complexType & gt; & Lt; / XS: स्कीमा & gt; मुझे आशा है कि यहाँ में बहुरूपता की तरह कुछ हो सकता है, लेकिन जब मैं जेएएनएसपी का इस्तेमाल कर रहा हूँ, जो काम नहीं करता है। मैंने समूह सुविधा का उपयोग करने की कोशिश की, लेकिन 2 समूहों में एक समान पता तत्व है, इस प्रकार यह अभी भी उपलब्ध नहीं है।
तो, कैसे क्या मुझे एक्सएसडी डिजाइन करना चाहिए?
आपकी वर्तमान एक्सएमएल स्कीमा
अपनी XML स्कीमा के साथ जिस तरह से यह है, आपका XML निम्न की तरह दिखना होगा:
& lt; सदस्य xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" & gt ; & LT; सदस्य & gt; & LT; नाम & gt; जॉन & lt; / नाम & gt; & Lt; गुणों xsi: type = "propertiesTypeA" & gt; & LT; पता & gt; 20 & lt; / पता & gt; & LT; उम्र & gt; 20 & lt; / उम्र & gt; & Lt; / गुण & gt; & Lt; / सदस्य & gt; & LT; सदस्य & gt; & LT; नाम & gt; कायला & lt; / नाम & gt; & Lt; गुणों xsi: type = "propertiesTypeB" & gt; & LT; पता & gt; 20 & lt; / पता & gt; & LT; लिंग & gt; महिला & lt; / लिंग & gt; & Lt; / गुण & gt; & Lt; / सदस्य & gt; & Lt; / सदस्यों & gt; निम्नलिखित बातों पर ध्यान दें:
- इनहेरिट किए गए विशेषताओं को पहले प्रकट होने की आवश्यकता है।
- आपको
xsi :विशेषता
आप क्या चाहते हैं
तत्व प्रकार को ओवरराइड करने के लिए टाइप करें
अपने XML में "पसंद" निर्दिष्ट करना स्कीमा शायद आप के लिए एक बेहतर फिट होगी आपको अब उप प्रकार की आवश्यकता नहीं होगी।
& lt; x: जटिल टाइप नाम = "गुण प्रकार टाइप करें" & gt; & LT; XS: अनुक्रम & gt; & LT; XS: विकल्प & gt; & Lt; xs: तत्व प्रकार = "x: स्ट्रिंग" नाम = "आयु" / & gt; & Lt; xs: तत्व प्रकार = "xs: स्ट्रिंग" नाम = "लिंग" / & gt; & Lt; / XS: विकल्प & gt; & Lt; xs: तत्व प्रकार = "xs: स्ट्रिंग" नाम = "पता" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: complexType & gt;
Comments
Post a Comment