2010-03-08 9 views
6

वहाँ प्रपत्र <myElement/> के खाली तत्वों अपने xml में इस्तेमाल किया जा रहा रोकने के लिए एक तरीका है? दूसरे शब्दों में, क्या आप अपने xsd में निर्दिष्ट कर सकते हैं कि <myElement/> अमान्य है?सीमित करने से खाली तत्वों

nillable="false" का उपयोग करना काम नहीं करता है, और न ही करता है - उन दोनों के <myElement/> अनुमति देते हैं।

उत्तर

10

आप बिल्कुल दिखाई देने से तत्व को रोकने की कोशिश कर रहे हैं, तो आप यह minOccurs="0" साथ चिह्नित कर सकते हैं। मेरा अनुमान है कि यह नहीं है कि आप के बाद, क्या कर रहे हैं, इसलिए यदि आप यकीन है कि वहाँ हमेशा जटिल तत्व से जुड़ी विशेषताओं कर रहे हैं बनाने के लिए कोशिश कर रहे हैं, तो आप विशेषताओं में से कम से कम एक पर usage="required" निर्दिष्ट या कोई विशेषता का उपयोग करना समूह। यदि myElement एक सरल प्रकार है और आप यकीन है कि यह एक मूल्य है बनाना चाहते हैं, तो आप हमेशा यह के प्रकार को प्रतिबंधित कर सकता है। आप एक गैर शून्य स्ट्रिंग चाहते हैं, तो आप कर सकता है:

<xsd:element name="myElement"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="1" /> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:element> 
+0

यह आशाजनक लग रहा है। क्या होगा यदि यह एक साधारण प्रकार नहीं है, उदा। "xsd: date" –

+0

'xsd: date' एक साधारण प्रकार है। लेकिन अगर यह एक साधारण प्रकार नहीं है, तो आप '' का उपयोग कर सकते हैं। हालांकि, उन लोगों के साथ, मैं आमतौर पर 'xsd: element' की' टाइप' विशेषता का उपयोग करता हूं यानी: '' –

+0

तो आप कह रहे हैं कि 'minLength' है गैर-स्ट्रिंग सरल प्रकारों के लिए वैध संपत्ति? –

4

अपने स्कीमा-सत्यापन त्रुटि दिखाने में सक्षम नहीं है, तो जब डेटा प्रकार, DATE का एक तत्व रिक्त है, तो आप एक का उपयोग कर सकते पैटर्न [यदि आवश्यक प्रारूप टाइप करने के लिए आपके लिए बोझ नहीं है];

मैं एक उदाहरण को शामिल किया है, इसी तरह के कोड के कार्यान्वयन अपने उपकरण पर काम करेगा,

यह नमूना एक्सएमएल है:

<root> 
    <date1>12/31/1999</date1> <!-- The Date format defined here is MM/DD/YYYY, null value or Date with any other format aren't accepted--> 
</root> 

यह इसी XSD है:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="Date_Def.xsd"/> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="date1" type="DATE_TYPE" minOccurs="0" maxOccurs="1" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

गौर करें कि मैं एक और स्कीमा फ़ाइल किस प्रकार DATE_TYPE की परिभाषा भी शामिल है, शामिल कर रहा हूँ
यहाँ Date_Def.xsd फ़ाइल है:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="DATE_TYPE"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

दिनांक स्वरूप यहां बताए गए MM/DD/YYYY, शून्य मान या किसी अन्य स्वरूप के साथ दिनांक है, स्वीकार किए जाते हैं आप भी एक अशक्त टैग को स्वीकार करना चाहते हैं, इस के साथ पैटर्न की जगह नहीं कर रहे हैं ..

<xs:pattern value="|(([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9])"/> 

जिनमें से मान्यता को स्वीकार करता है, या तो अशक्त टैग या पैटर्न MM/DD/YYYY की तिथि-मूल्य।

आप पैटर्न के डिजाइन पर अधिक मदद की जरूरत है, तो एसओ में यह एक पोस्ट बनाने के लिए स्वतंत्र लग रहा है, आशा है कि यह मदद की। :-)

[ध्यान दें :: टाइप परिभाषा भी एक ही फाइल है, जो अतिरिक्त नाम-रिक्त स्थान एक्सएमएल के साथ-साथ XSD फ़ाइलों में उल्लेख की जरूरत में परिभाषित किया जा सकता है, एक बाहरी फ़ाइल को परिभाषित है हानिरहित और पुनः उपयोग करने योग्य]

+0

धन्यवाद। मैं ऐसे टूल ढूंढने में कामयाब रहा जो सत्यापन को सही तरीके से करते थे। यह पैटर्न सामान उपयोगी है, था। –

+0

@ क्रिस, एनपी [15 वर्ण] –

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