xml - Dynamic attribute in element XSD Schema -
इसका मतलब है कि विशेषता कृपया मुझे उपयुक्त उदाहरण दें। करने के लिए अन्य विशेषताओं की सामग्री के आधार पर विशेषताओं की अनुमति दें, जिन्हें आपको XSD 1.1 (या कुछ एक्सएसडी 1.0 एक्सटेंशन जैसे स्कीमाट्रान) की आवश्यकता है। XSD 1.1 में आप एक कोड का उपयोग कर सकते हैं इस उदाहरण को मान्य करने के लिए: आप निम्न के समान एक XSD का उपयोग कर सकते हैं: मैंने एक अलग विशेषता समूह में प्रत्येक मोड के लिए विशेषताओं को रखा है। आपका यह पंक्ति XSD 1.1 की आवश्यकता है सत्यापन अन्यथा विफल हो जाएगा। ये अपडेट: मैंने आप अन्य मापदंडों (यह एक XPath उपशीर्षक) का भी उपयोग कर सकते हैं, जैसे विशेषताओं की संख्या, उदाहरण के लिए यदि आपके पास कई विशेषताओं हैं और आप बहुत से कि गुण 3 की कुल संख्या को प्रतिबंधित करेगा। & lt; element & gt; में गतिशील विशेषता जोड़ना संभव है उदाहरण के लिए मेरे पास
& lt; A & gt; तत्व में एक निश्चित विशेषता नाम
मोड
& lt; ए मोड = "सक्षम" & gt; ; & Lt;! - सक्षम या अक्षम - & gt; यदि मोड सक्षम होता है तो यह तत्व `& lt; A & gt;` जैसे & lt; ए मोड = "सक्षम" attr1 = "abc" attr2 = "xyz" & gt; में कुछ और गतिशील विशेषता जोड़ देगा। यदि मोड अक्षम है तो इसे यह पसंद आएगा & lt; ए मोड = "अक्षम" attr3 = "abc" attr4 = "xyz" & gt;
मोड तय हो गई है और
attr1, attr2, attr3 और attr4
मोड के मानों पर निर्भर करती है विशेषता
मोड - फिक्स्ड विशेषता।
attr1, attr2, attr3 और attr4 - गतिशील विशेषता < कोड> मोड
xs: assert जहां आप जटिल प्रकार के लिए XPath का उपयोग घोषित करते हैं।
< कोड> & lt; मोड & gt; & lt; ए मोड = "सक्षम" attr1 = "abc" attr2 = "xyz" / & gt; & lt; ए मोड = "अक्षम" attr3 = "abc" attr4 = "xyz" / & gt; & Lt; / मोड & gt;
& lt; xs: schema xmlns: xs = "http://www.w3.org / 2001 / XMLSchema "elementForm डिफॉल्ट =" योग्य "xmlns: vc =" http://www.w3.org/2007/XMLSchema-versioning "vc: minVersion =" 1.1 "& gt; & Lt; xs: तत्व नाम = "मोड" & gt; & LT; XS: complexType & gt; & LT; XS: अनुक्रम & gt; & lt; xs: तत्व रेफरी = "ए" मिन ओकर्स = "0" maxOccurs = "unbounded" / & gt; & Lt; / XS: अनुक्रम & gt; & Lt; / XS: complexType & gt; & Lt; / XS: तत्व & gt; & Lt; xs: विशेषता समूह का नाम = "सक्षम-विशेषताओं" & gt; & lt; xs: विशेषता नाम = "attr1" type = "xs: स्ट्रिंग" का उपयोग करें = "वैकल्पिक" / & gt; & lt; xs: विशेषता नाम = "attr2" प्रकार = "xs: स्ट्रिंग" का उपयोग करें = "वैकल्पिक" / & gt; & Lt; / XS: attributeGroup & gt; & Lt; xs: विशेषता समूह का नाम = "अक्षम-विशेषताओं" & gt; & Lt; xs: विशेषता नाम = "एट्री 3" प्रकार = "x: स्ट्रिंग" का उपयोग करें = "वैकल्पिक" / & gt; & Lt; xs: विशेषता नाम = "attr4" प्रकार = "xs: स्ट्रिंग" का उपयोग करें = "वैकल्पिक" / & gt; & Lt; / XS: attributeGroup & gt; & Lt; xs: तत्व का नाम = "ए" & gt; & LT; XS: complexType & gt; & lt; xs: विशेषता समूह रिफ = "अक्षम-विशेषताएँ" / & gt; & Lt; xs: विशेषता समूह रिफ = "सक्षम-विशेषताएँ" / & gt; & Lt; xs: विशेषता नाम = "मोड" का उपयोग करें = "आवश्यक" & gt; & LT; XS: simpleType & gt; & lt; xs: प्रतिबंध आधार = "xs: NMTOKEN" & gt; & Lt; xs: गणना मूल्य = "सक्षम" / & gt; & Lt; xs: गणना मूल्य = "अक्षम" /> & Lt; / XS: प्रतिबंध & gt; & Lt; / XS: simpleType & gt; & Lt; / XS: विशेषता & gt; & lt; xs: assert test = "(@ mode = 'ENABLE' और @ attr1 और @ attr2 और नहीं (@ एट्रर 3) और नहीं (@ एट्री 4)) या (@ मोड = 'अक्षम' और @ एट्री 3 और एटीआर 4) और नहीं (@ एट्री 1) और नहीं (@ एटीआर 2)) "/ & gt; & Lt; / XS: complexType & gt; & Lt; / XS: तत्व & gt; & Lt; / XS: स्कीमा & gt;
मोड विशेषता वास्तव में
निश्चित नहीं है लेकिन इसमें दो मान हो सकते हैं, इसलिए मैंने उन दोनों मानों को प्रतिबंधित करने के लिए एक गणन का उपयोग किया।
xs: assert लाइन। एक्सपीथ अभिव्यक्ति का मूल्यांकन जटिल प्रकार के तत्वों के मुताबिक किया जाता है। यदि अभिव्यक्ति सही है, तो यह मान्य होगी।
ए नोड दोनों सत्यापन विफल हो जाएंगे:
& lt; modes & gt; & lt; ए मोड = "अक्षम" attr1 = "fgs" attr4 = "hjs" / & gt; & Lt; ए मोड = "सक्षम" attr3 = "fgs" attr4 = "hjs" / & gt; & Lt; / मोड & gt;
नहीं () उपरोक्त वर्णों को जोड़ दिया है, क्योंकि जैसा कि आपने नोट किया था कि यह तर्क अधूरा था। अब यह मान्य करने के लिए मान्य है:
& lt; ए मोड = "अक्षम" attr1 = "fgs" attr2 = "hjs" attr3 = "fgs" attr4 = "fgs" / & gt;
नहीं () आप उपयोग कर सकते हैं:
@ mode = 'ENABLE' और @ attr1 और @ attr2 और गिनती (@ *) = 3
Comments
Post a Comment