2011-10-07 19 views
9

मैं एक जटिल प्रकार की घोषणा में शामिल करने के लिए एक तत्व घोषित करना चाहता हूं, और तत्व में एक अनिवार्य विशेषता है: "विकल्प = मेरा विकल्प", लेकिन "विकल्प" का मूल्य संदर्भ के आधार पर विशेषता कुछ भी हो सकती है।एक्सएसडी स्कीमा में एलिमेंट-अनिवार्य विशेषता घोषणा:

यह है: इस तत्व वाले जटिल प्रकार का उपयोग करके किसी अज्ञात मान के साथ विशेषता "विकल्प" किसी भी दस्तावेज़ में अनिवार्य होना चाहिए।

उदाहरण:

<xs:element name="SpecialOption" type="xs:string"/> 

    <xs:complexType name="SpecialOptions"> 
     <xs:sequence> 
      <xs:element ref="SpecialOption" minOccurs="1" maxOccurs="100"/> 
      <xs:element ref="XXX"/>  
     </xs:sequence> 
    </xs:complexType> 

इस मामले में तत्व जटिल प्रकार "SpecialOptions" में "SpecialOption" इस अनिवार्य विशेषता होनी चाहिए।

मुझे नहीं पता कि एक्सएसडी में किसी तत्व के लिए अनिवार्य विशेषता कैसे घोषित करें, या यह निर्दिष्ट करने के लिए कि विशेषता में एक मान होना चाहिए जो अभी तक ज्ञात नहीं है।

उत्तर

23

आपको आवश्यक विशेषता को शामिल करने के लिए "स्पेशलऑप्शन" तत्व की परिभाषा को संशोधित करने की आवश्यकता है।

<xs:element name="SpecialOption" type="xs:string"/> 
इस के लिए

:

<xs:element name="SpecialOption"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="Option" type="xs:string" use="required"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
यह आपके जटिल प्रकार की आवश्यकता "विकल्प" "SpecialOption" तत्व के सभी उदाहरणों पर "SpecialOptions" में विशेषता शामिल होंगे बदलने जटिल के साथ

इस कोड अपडेट करें प्रकार। xs:string प्रकार के "विकल्प" विशेषता को घोषित करने से इस क्षेत्र में किसी भी मूल्य को पारित करने की अनुमति मिलेगी।

+0

अच्छा लगता है - मुझे यह जानने की ज़रूरत है: विशेषता को तत्व का एक अनिवार्य घटक कैसे बनाना है। "टाइप" एक्स के रूप में "विकल्प" विशेषता घोषित करना: स्ट्रिंग इस क्षेत्र में किसी भी मान को पारित करने की अनुमति देगा। " समझा - लेकिन मुझे एक गणना प्रकार घोषित करके बेहतर तरीके से सेवा दी जा सकती है और मेरी जरूरतों के विकास के रूप में इसे विस्तारित किया जा सकता है। आपका कोड आज़माएगा - अगर यह काम करता है, तो आपको बक्षीस मिल गया है। – Vector

3

एक विशेषता को अनिवार्य रूप से चिह्नित करने के लिए आप <xs:attribute use="required" /> का उपयोग करते हैं।

प्रकार के लिए, आपके पास अंतर्निहित एक्सएसडी प्रकार (xs: string आदि) का विकल्प है, या आप अपना खुद का <xs:simpleType /> परिभाषित कर सकते हैं और इसका उपयोग कर सकते हैं।

अद्यतन

मुझे विश्वास है आप से क्या मतलब विशेषता एक मूल्य है कि अभी तक ज्ञात नहीं होना चाहिए नहीं कर रहा हूँ। क्या इसका मतलब यह है कि मान एक स्ट्रिंग है, लेकिन कोई स्ट्रिंग हो सकती है? या एक दशमलव?

क्योंकि यह एक विशेषता मान है क्योंकि हम आपके बारे में बात कर रहे हैं अंतर्निहित एक्सएसडी प्रकारों का उपयोग करने के लिए प्रतिबंधित हैं, या अंतर्निर्मित प्रकारों में से किसी एक के आधार पर अपना xs:simpleType प्रकार परिभाषित कर रहे हैं। यह वह जगह है जहां आप अनुमत मान पर अधिक कड़े नियम लागू कर सकते हैं, उदाहरण के लिए xs:string बढ़ाकर और अनुमत मूल्यों पर नियमित अभिव्यक्ति बाधा जोड़कर।

<xsd:simpleType name="UKDate"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)\d\d"/> 
    </xsd:restriction> 
</xsd:simpleType> 

हालांकि, अगर वहाँ बिल्कुल जानने क्या मूल्य तो उपयोग किया जाएगा आप अच्छी तरह से ज्ञात अस्थायी विरोधाभास जिससे आप एक मूल्य आप केवल रन-टाइम में पता करने के लिए डिजाइन समय में कुछ सीमित नहीं कर सकते है का कोई रास्ता नहीं है। इस उदाहरण में, निश्चित रूप से यह निर्दिष्ट करना आवश्यक है कि विशेषता कम से कम मौजूद होनी चाहिए?

<xs:attribute use="required" />

आशा इससे आपके प्रश्न का थोड़ा और स्पष्ट रूप से जवाब देता है।

+0

वास्तव में बहुत स्पष्ट नहीं है - आपने यह समझाया नहीं है कि एक तत्व घोषित करने के लिए जिसमें एक अनिवार्य विशेषता शामिल है। – Vector

15

1) यह एक साधारण आवश्यक स्ट्रिंग

<xs:element name="SpecialOption"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="Option" type="xs:string" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

2) विशेषता बिल्कुल अनुमति मानों की सूची में से एक की आवश्यकता होती है करने के लिए है:

<xs:element name="SpecialOption"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="Option" use="required"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:enumeration value="DE"/> 
          <xs:enumeration value="EN"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

3) एक एक प्रतिबंध के रूप में एक सीमा का उपयोग कर सकते हैं , नीचे दिए गए उदाहरण की तरह।

<xs:element name="SpecialOption"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="Option" use="required"> 
        <xs:simpleType> 
         <xs:restriction base="xs:integer"> 
          <xs:minInclusive value="95"/> 
          <xs:maxInclusive value="137"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

4) नीचे, विशेषता को दशमलव मान वाली सूची के रूप में घोषित किया गया है। यह एक विशेषता को निर्दिष्ट मानों का सबसेट रखने की अनुमति देता है, उदा। विकल्प = "6 77 95"।

<xs:simpleType name="Items"> 
    <xs:restriction base="xs:decimal"> 
     <xs:enumeration value="137"/> 
     <xs:enumeration value="95"/> 
     <xs:enumeration value="6"/> 
     <xs:enumeration value="77"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:element name="SpecialOption"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="Option" use="required"> 
        <xs:simpleType> 
         <xs:list itemType="Items"/> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

5) यहाँ विशेषता वैकल्पिक घोषित किया जाता है, लेकिन एक डिफ़ॉल्ट मान ("परीक्षण"), जो कभी कभी पर्याप्त है के साथ प्रदान की:

<xs:element name="SpecialOption"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="Option" type="xs:string" use="optional" default="test"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
+0

+1 - आपका उत्तर विस्तृत और बहुत ही जानकारीपूर्ण है लेकिन मैंने 2 जवाब देने के लिए बक्षीस दिया क्योंकि यह पर्याप्त था और आपके पहले से बहुत पहले था। टीएनएक्स – Vector

+0

धन्यवाद, यह समय पर था, और मैंने आपकी टिप्पणियों को ध्यान में रखा। मैं समझता हूं कि उत्तर 2 पर्याप्त था, इसलिए कोई समस्या नहीं:] – mousio

0

, बस आप इसका अनुसरण

के रूप में कर सकते हैं
<xs:element name="SpecialOption"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:whiteSpace value="replace"/> 
      <xs:minLength value="1"></xs:minLength> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 

इस कोड से आप xml टैग पर एक मूल्य डालने के लिए लागू होते हैं और सफेद स्पेस प्रतिबंध xml टैग से सफेद स्थान को हटाने के लिए भी संभाल लेंगे।

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