2011-04-28 17 views
7

मेरे पास कुछ एक्सएमएल दस्तावेज़ हैं जिन पर मेरा कोई नियंत्रण नहीं है। उनकी संरचना अच्छी तरह से परिभाषित है, लेकिन इसका वर्णन पीडीएफ के समूह में किया गया है, जो कि बहुत सटीक होने के बावजूद स्वचालित सत्यापन को बहुत ही व्यवहार्य नहीं बनाते हैं। मैं उन पीडीएफ निष्पादन योग्य नियमों (अधिकतर) बनाने के लिए एक एक्सएमएल स्कीमा लिखने की कोशिश कर रहा हूं।टाइप किए गए मानों को XML स्कीमा के साथ खाली करने की अनुमति कैसे दें?

सभी तत्व अनिवार्य हैं। लेकिन उनमें से आधा या तो खाली हो सकता है या सरल टाइप की गई सामग्री हो सकती है।

इन तत्वों के लिए डेटाटाइप को परिभाषित करते समय, मैंने प्रत्येक के दो संस्करणों को परिभाषित किया: एक "सामान्य" एक, और दूसरा जो खाली हो सकता है।

<xs:simpleType name="empty"> 
    <xs:restriction base="xs:string"> 
    <xs:length value="0"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:simpleType name="codPostal"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="opt_codPostal"> 
    <xs:union memberTypes="empty codPostal"/> 
</xs:simpleType> 

वहाँ ऐसा करने का एक कम दोहराव रास्ता नहीं है: मैं एक empty डेटाप्रकार साथ यूनियनों को परिभाषित करते हुए ऐसा किया?

उत्तर

6

आप xs: nillable का उपयोग कर सकते हैं।

XSD

<xs:simpleType name="codPostal"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="OptionalString" type="codPostal" nillable="true" /> 

में दस्तावेज़ में

<OptionalString xsi:nil="true" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 

इस गैर स्ट्रिंग प्रकार के लिए सबसे उपयोगी है (उदाहरण के लिए दिनांक आदि) तार के लिए के रूप में आप सिर्फ शून्य लम्बाई इस्तेमाल कर सकते हैं।

<OptionalString /> 

दुर्भाग्यवश आपको दस्तावेज़ पर "शून्य" विशेषता निर्दिष्ट करने की आवश्यकता है। जहां तक ​​मुझे पता है, आप जो भी चाहते हैं उसे करने का एकमात्र गैर-घुसपैठ तरीका संघ प्रकार का दृष्टिकोण है जिसे आपने पहले ही चुना है।

+0

हां, स्ट्रिंग उदाहरण बेवकूफ था ... मैंने इसे और अधिक सार्थक में बदल दिया (जो वास्तव में आपके उत्तर को अमान्य नहीं करता है।) –

+0

मुझे * दस्तावेज़ में 'xsi: nil' का उपयोग करना चाहिए? मैं दस्तावेज़ को नहीं बदल सकता :( –

+0

@ मार्टिन्हो: दुर्भाग्य से हाँ, आपको दस्तावेज़ पर भी "शून्य" निर्दिष्ट करने की आवश्यकता है। AFAIK केवल वही गैर-घुसपैठ करने का तरीका है जो आप चाहते हैं वह संघ प्रकार का दृष्टिकोण है जिसे आपने पहले ही चुना है –

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