2010-01-26 17 views
7

किसी कारण से, एमएस .Net (v3.5) टूल - xsd.exe किसी भी तत्व के अंदर उपयोग नहीं होने पर प्रकार उत्पन्न नहीं करता है।.Net xsd.exe उपकरण सभी प्रकारों को उत्पन्न नहीं करता

उदा

XSD फ़ाइल (मैं जटिल तत्व में फेंक दिया इस चेतावनी से बचने के लिए - "चेतावनी:। क्योंकि जटिल प्रकार के साथ कोई उच्च-स्तरीय तत्व पाए गए वर्गों उत्पन्न नहीं कर सकते"):

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:simpleType name="EnumTest"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="item1" /> 
     <xs:enumeration value="item2" /> 
     <xs:enumeration value="item3" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:complexType name="myComplexType"> 
    <xs:attribute name="Name" use="required" type="xs:string"/> 
    </xs:complexType> 
    <xs:element name="myElem" type="myComplexType"></xs:element> 
</xs:schema> 

जब मैं रन xsd.exe

का उपयोग कर के माध्यम से XSD/सी xsdfile.xsd

मैं उत्पन्न सीएस फ़ाइल में EnumTest नहीं दिख रहा।

नोट; भले ही मैं यहां enum का उपयोग नहीं करता, लेकिन मेरे वास्तविक प्रोजेक्ट में, मेरे पास ऐसे मामले हैं जहां हम आउटपुट के रूप में enum के स्ट्रिंग मान भेजते हैं।

मैं इन्हें शामिल करने के लिए xsd टूल को कैसे मजबूर कर सकता हूं? या मुझे किसी अन्य उपकरण पर स्विच करना चाहिए?

मैं दृश्य स्टूडियो में काम 2008

+0

आपका simpletype किसी भी तत्व द्वारा नहीं किया जाता है ... यह प्रयोग करें, फिर कोशिश करें। –

+0

मुझे लगता है कि आपने मेरी पोस्ट पूरी तरह से नहीं पढ़ी है! – Mrchief

+1

मैंने आपकी पोस्ट पढ़ी। लेकिन अगर इस प्रकार का उपयोग करने वाला कोई तत्व नहीं है, तो सिस्टम एक प्रकार को परिभाषित नहीं करेगा। जोड़ें और फिर देखें कि यह क्या करता है। (यह एक अनुकूलन चीज़ है ...) –

उत्तर

5

मैं समाप्त करने के लिए इस टूल का एक बेवकूफ कमी है होगा के लिए इस पर

देखो। शायद इस व्यवहार को चालू करने के लिए एक स्विच दें। इस व्यवहार को न होने के कारण, मुझे xsd के बाहर प्रकार बनाने के लिए मजबूर होना पड़ता है और यह खंडित कोड बनाता है।

यह मेरी व्यक्तिगत राय है और मुझे पूरा यकीन है कि ऐसे लोग भी हैं जो इसे साझा करेंगे।

+0

उपकरण स्कीमा के लिए कक्षाएं उत्पन्न करता है। यदि स्कीमा को शामिल करना था, तो एक्सएएमएल नेमस्पेस, फिर विम दस ब्रिंक द्वारा संकेतित ऑप्टिमाइज़ेशन के बिना इसे एक्सएमएल की पूरी दुनिया के लिए कक्षाएं बनाने की आवश्यकता होगी। यह आम तौर पर अवांछित है। यदि तत्वों को स्कीमा में संदर्भित नहीं किया गया है, तो वे elided हैं। – Pekka

+0

यह एक बढ़िया मामला है और मैं यह नहीं कह रहा हूं कि यह हर आयात के लिए करता है। बस मेरी स्कीमा के लिए। लेकिन फिर से, आप इसकी ग्रैन्युलरिटी को नियंत्रित करने के लिए स्विच कर सकते हैं। – Mrchief

+0

मैंने सोचा होगा कि एक्सएमएल में एक्स्टेंसिबल दृढ़ता से सुझाव देता है कि अधिकांश स्कीमाटा दूसरों को आयात करेगा, लेकिन अधिकांश सॉफ्टवेयर केवल स्थानीय प्रकारों में दिलचस्पी रखते हैं, शेष डेटा को बिना किसी पेलोड के रूप में छोड़ दिया जाता है। एक गलतफहमी भी हो सकती है। तत्व सार्वजनिक इंटरफ़ेस हैं, जबकि प्रकारों की उल्लेखनीय सुविधा है। यदि आप स्कीमा में केवल एक तरह का नामित आर्टिफैक्ट चाहते हैं तो आप हमेशा गुमनाम प्रकारों वाले तत्वों को परिभाषित कर सकते हैं। – Pekka

0

आप यहाँ enum उपयोग नहीं करते हैं, या किसी अन्य वर्ग में आप XSD उपकरण के माध्यम से जेनरेट कर रहे हैं, तो इसे कहीं और अपनी परियोजना में केवल आपके के रूप में परिभाषित कोई अन्य enum होगा। यदि आपको पूरी तरह से xsd टूल आपके लिए कक्षा बनाने की आवश्यकता है, तो कार्यशाला एलेक्स का समाधान इस मामले में सबसे अधिक उपयोग किया जाने वाला वर्कअराउंड है (मैं वास्तव में इसे एक वर्कअराउंड भी नहीं मानता, यह वास्तव में उपयोग करने में सक्षम होने के लिए बहुत सुविधाजनक है इस तरह से उपकरण)

3

मुझे पता है कि यह बहुत पुराना है, लेकिन जब मैं खोज रहा था तो यह Google में आया और मुझे जवाब मिला।

एक एक्सएसडी को एक एक्सएस लीज करना होगा: तत्व मान्य होना चाहिए और xsd.exe के लिए सही काम करने के लिए है। अधिक जानकारी के http://keithelder.net/2008/11/02/creating-a-rest-wcf-service-from-an-existing-xsd-schema/

1

मुझे xs:complexTypexs:element के अंदर नहीं होने के साथ ही इसी तरह की समस्या आई, और इस प्रकार उत्पन्न सीएस फ़ाइल में शामिल नहीं किया गया। हमारे परिदृश्य में हमारे पास एक wsdl फ़ाइल है जो दो xsd फ़ाइलों को आयात करती है, इसलिए यह आपके लिए लागू नहीं हो सकती है।

इसके बजाय उन दो XSD फाइलों पर xsd.exe चलाने का

, हम निम्नलिखित किया:

wsdl.exe /language:CS /out:OutputDir OurService.wsdl first.xsd second.xsd 

यह एक आकर्षण की तरह काम किया, और सब कुछ उत्पन्न, जटिल प्रकार सहित।

+0

हाँ, वह उस समय एक और विकल्प था। यहां तक ​​कि डब्ल्यूसीएफ का जनरेटर भी सही तरीके से इसे संभालता है हालांकि सुनिश्चित नहीं है। मैं अब लंबे समय से एक्सएसडी से दूर गया हूं इसलिए निश्चित रूप से बात नहीं कर सकता। – Mrchief

2

एक्सएसडी फ़ाइल के भीतर enums बनाना संभव है भले ही आप उन्हें सत्यापन के लिए उपयोग करने का इरादा नहीं रखते हैं।XSD के लिए निम्न जोड़ें:

<xs:element name="DummyEnumTest" type="EnumTest" abstract="true" block="#all"/> 

(जहां EnumTest enum आप उत्पन्न देखना चाहते है)।

abstract विशेषता यह सुनिश्चित करती है कि तत्व किसी इंस्टेंस दस्तावेज़ के दस्तावेज़ तत्व की भूमिका निभा नहीं सके। block विशेषता कम महत्वपूर्ण है।

एक ही लक्ष्य को पूरा करने के अन्य तरीके हैं जैसे कहीं भी आप अपने समेकित प्रकार के साथ एक प्रतिबंधित विशेषता घोषित करना चाहते हैं। मैं इसे उपयोगी इस तरह एक सामान्य आवरण के भीतर अपने सभी अप्रयुक्त enums संपुटित करने के लिए, वैश्विक घोषणाओं को कम करने लगता है:

<xs:element name="ForceGenerationOfBaseEnums" abstract="true" block="#all"> 
    <xs:complexType> 
     <xs:choice> 
      <xs:element name="..." type="..."/> 
      <xs:element name="..." type="..." /> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 
+0

जो मुझे फिर से मेरे प्रारंभिक पकड़ में लाता है - यह आपको पीढ़ी के होने के लिए कम से कम एक अप्रयुक्त 'तत्व' घोषित करने के लिए मजबूर करता है। – Mrchief

+0

@ मर्चिफ़ - 'xsd.exe' .NET कक्षाओं के चारों ओर एक पतला आवरण है। इसके चारों ओर जादू नहीं है। 'Xsd2Code' का स्रोत डाउनलोड करें, जो एक समान प्रकार का ओपन सोर्स रैपर है (वैसे भी 'xsd.exe' से अधिक लचीला) और यदि आप' xsd.exe' की कॉस्मेटिक अपूर्णताओं को स्वीकार नहीं कर सकते हैं तो इसे अपनी आवश्यकताओं के लिए उपयोग या अनुकूलित करें। । [इस सवाल] पर भी देखें (http://stackoverflow.com/questions/386155/comparison-of-xsd-codegenerators-c)। –

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