xml - Dynamic attribute in element XSD Schema -


& 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 - गतिशील विशेषता < कोड> मोड

कृपया मुझे उपयुक्त उदाहरण दें।

करने के लिए अन्य विशेषताओं की सामग्री के आधार पर विशेषताओं की अनुमति दें, जिन्हें आपको XSD 1.1 (या कुछ एक्सएसडी 1.0 एक्सटेंशन जैसे स्कीमाट्रान) की आवश्यकता है। XSD 1.1 में आप एक कोड का उपयोग कर सकते हैं xs: assert जहां आप जटिल प्रकार के लिए XPath का उपयोग घोषित करते हैं।

इस उदाहरण को मान्य करने के लिए:

 < कोड> & lt; मोड & gt; & lt; ए मोड = "सक्षम" attr1 = "abc" attr2 = "xyz" / & gt; & lt; ए मोड = "अक्षम" attr3 = "abc" attr4 = "xyz" / & gt; & Lt; / मोड & gt;   

आप निम्न के समान एक XSD का उपयोग कर सकते हैं:

  & 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;   

मैंने एक अलग विशेषता समूह में प्रत्येक मोड के लिए विशेषताओं को रखा है। आपका मोड विशेषता वास्तव में निश्चित नहीं है लेकिन इसमें दो मान हो सकते हैं, इसलिए मैंने उन दोनों मानों को प्रतिबंधित करने के लिए एक गणन का उपयोग किया।

यह पंक्ति XSD 1.1 की आवश्यकता है 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;   

आप अन्य मापदंडों (यह एक XPath उपशीर्षक) का भी उपयोग कर सकते हैं, जैसे विशेषताओं की संख्या, उदाहरण के लिए यदि आपके पास कई विशेषताओं हैं और आप बहुत से नहीं () आप उपयोग कर सकते हैं:

  @ mode = 'ENABLE' और @ attr1 और @ attr2 और गिनती (@ *) = 3   

कि गुण 3 की कुल संख्या को प्रतिबंधित करेगा।

Comments

Popular posts from this blog

Pass DB Connection parameters to a Kettle a.k.a PDI table Input step dynamically from Excel -

multithreading - PhantomJS-Node in a for Loop -

c++ - MATLAB .m file to .mex file using Matlab Compiler -