उनके DTD या XSD से नमूना XML दस्तावेज़ कैसे उत्पन्न करें?


186

हम एक ऐसे अनुप्रयोग का विकास कर रहे हैं जिसमें काफी मात्रा में XML परिवर्तन शामिल हैं। हमारे पास कोई उचित इनपुट परीक्षण डेटा प्रति se, केवल DTD या XSD फाइल नहीं है। हम इन फ़ाइलों से अपना परीक्षण डेटा स्वयं उत्पन्न करना चाहते हैं। क्या ऐसा करने का एक आसान / मुफ्त तरीका है?

संपादित करें

इसके लिए स्पष्ट रूप से कोई मुफ्त उपकरण नहीं हैं, और मैं मानता हूं कि OxygenXML इसके लिए सबसे अच्छे उपकरणों में से एक है।


8
मैं इस प्रश्न के उत्तर को देखने में विफल हूं, जो प्रश्नोत्तर प्रारूप के लिए फिट नहीं है, या debate, arguments, polling, or extended discussion
हल है

जवाबों:


29

मुझे लगता है कि ऑक्सीजन ( http://www.oxygenxml.com/ ) इसे भी करता है, लेकिन यह एक अन्य उत्पाद है। यह एक अच्छा एक है, हालांकि ... मैं दृढ़ता से इसे XML कार्य करने वाले किसी व्यक्ति के लिए सुझाऊंगा। यह एक अच्छा ग्रहण प्लगइन में भी आता है।

मेरा मानना ​​है कि एक स्वतंत्र, पूरी तरह से चित्रित 30 दिन का परीक्षण है।


मेरे पास XSD का एक गुच्छा है, जो अलग-अलग XSD से स्कीमा को विरासत में मिला है और मुझे इस XSD से परीक्षण के उद्देश्य के लिए एक XML फ़ाइल उत्पन्न करने की आवश्यकता है, यह करने के लिए oxygenXML का उपयोग कर रहा हूं, लेकिन जब मैं इसे करने की कोशिश करता हूं, तो यह मेरे लिए काम नहीं कर रहा है और यह कहता है कि कृपया रूट नोड को परिभाषित करें लेकिन इससे मुझे ऐसा करने की अनुमति नहीं है। तो अगर किसी ने oxygenXML के साथ काम किया था तो यह सुझाव दें कि इसके लिए क्या तरीका हो सकता है?
राचेल

धन्यवाद स्तर। इसने मेरे प्रश्न का उत्तर दिया! यदि आप मेरे प्रश्न का उत्तर देना चाहते हैं: stackoverflow.com/questions/7041388/… , तो मैं आपको जवाब के रूप में चिह्नित करने के लिए खुश से अधिक होगा।
एरिक एच

179

Visual Studio 2008 SP1 और बाद में XML स्कीमा एक्सप्लोरर कुछ बुनियादी नमूना डेटा के साथ XML दस्तावेज़ बना सकता है:

  1. अपना XSD डॉक्यूमेंट खोलें
  2. XML स्कीमा एक्सप्लोरर पर स्विच करें
  3. रूट नोड पर राइट क्लिक करें और "नमूना जेएमएल उत्पन्न करें" चुनें

XML स्कीमा एक्सप्लोरर का स्क्रीनशॉट


15
हां, यह सबसे आसान तरीका है। XSD खोलें, XML स्कीमा एक्सप्लोरर में स्विच करें, रूट नोड चुनें, राइट क्लिक करें और "जेनरेट सैंपल एक्सएमएल" चुनें।
बाल्ट जूल

+1 @ शुक्रिया वारविक और @बाल्ट। यह वास्तव में मददगार था!
जेसेगैविन

3
मैंने इसका उपयोग VS2008 के साथ किया, लेकिन मैं इसे VS2010 में नहीं पा सकता। क्या कोई पुष्टि कर सकता है कि यह अभी भी मौजूद है?
साइमन

साइमन के रूप में भी: मैं VS2010 में यह भी नहीं मिल सकता है। MSDN के अनुसार, यह अभी भी वहाँ होना चाहिए, लेकिन यह यूआई में कहीं भी दिखाई नहीं देगा ... :-(
Martijn

6
@ साइमन: जब आप स्कीमा एक्सप्लोरर में तत्वों में से किसी एक पर क्लिक करते हैं तो आपको केवल "जेनरेट सैंपल एक्सएमएल" मिलता है। तत्वों को हरे रंग के बाएँ / दाएँ कोण कोष्ठक के माध्यम से चित्रित किया गया है: "<>"। आप शायद एक प्रकार पर क्लिक कर रहे हैं, और उत्पन्न संदेश केवल तत्वों के लिए उत्पन्न करेगा (जो समझ में आता है)।
मिगुएल सेविला

126

मुक्त और खुले स्रोत ग्रहण आईडीई के हाल के संस्करणों में आप डीटीडी और एक्सएसडी फाइलों से एक्सएमएल दस्तावेज उत्पन्न कर सकते हैं। किसी दिए गए * .dtd या * .xsd फ़ाइल पर राइट-क्लिक करें और "Generate -> XML फ़ाइल ..." चुनें। आप चुन सकते हैं कि कौन सा रूट एलिमेंट जेनरेट करना है और क्या ऑप्शनल फीचर्स और एलिमेंट्स जेनरेट होने चाहिए।

बेशक आप अपनी DTD और XSD स्कीमा फ़ाइलों को बनाने और संपादित करने के लिए ग्रहण का उपयोग कर सकते हैं। और आपको कोई प्लग इन स्थापित करने की आवश्यकता नहीं है। यह मानक वितरण में शामिल है।


धन्यवाद! ग्रहण मुक्त है, और यह सही समाधान था।
अक्कू

क्या आप लोग यह जानने के लिए होते हैं कि एक्लिप्स फ़ीचर इस कार्यक्षमता को प्रदान करता है मेरे "जेनरेट" सबमेनू में एकमात्र आइटम के रूप में "JAXB क्लासेस" है।
otto.poellath

9
इन विकल्पों को प्राप्त करने के लिए आपको वेब टूल प्रोजेक्ट (मदद के तहत देखो-> नया सॉफ़्टवेयर स्थापित करें) स्थापित करने की आवश्यकता है।
pwaring

3
ग्रहण एक अच्छा विकल्प लगता है, लेकिन मुझे आयातित XSD का पालन करने के लिए पीढ़ी नहीं मिल सकी। उदाहरण के लिए, यदि मेरे पास 3 तत्वों का वर्णन करने वाला एक एक्सएसडी है, और उनमें से एक एक जटिल टाइप था जिसे संदर्भित / आयातित एक्सएसडी में परिभाषित किया गया था, तो यह उस तत्व के लिए उत्पन्न नहीं होगा। कोई विचार?
डेविड हेर्गर्ट

@DavidHergert एक साधारण वर्कअब एक स्टब प्रकार उत्पन्न करेगा।
एडम मटन

32

Intellij Idea उपयोगकर्ताओं के लिए:

टूल पर एक नज़र डालें -> एक्सएमएल क्रिया

यहां छवि विवरण दर्ज करें

बहुत अच्छी तरह से काम करने लगता है (जहाँ तक मैंने परीक्षण किया है)।

संपादित करें:

जैसा कि @naXa द्वारा बताया गया है, अब आप XSD फाइल पर राइट-क्लिक कर सकते हैं और "XSD स्कीम से XML डॉक्यूमेंट जेनरेट कर सकते हैं ..." पर क्लिक करें।


वहाँ (#) दृश्यों के लिए तत्वों के # निर्दिष्ट करने के लिए एक तरीका है?
निकिता

मैंने इस धागे के हर समाधान का परीक्षण किया और इसने
FLX

1
कई आयातों के साथ XSD के साथ नवीनतम रूबीमाइन (v। 7.0, इंटेलीज आइडिया आधारित) में मेरे लिए काम नहीं करता है। मुझे त्रुटि संदेश के अलावा कुछ नहीं मिला है।
30:14

3
"स्कीमा संकलन त्रुटि"?
लाल मटर

1
नए संस्करणों में, XSD पर राइट-क्लिक करें और "XSD स्कीमा से XML दस्तावेज़ जेनरेट करें ..." का चयन करें
naXa

12

Sourceforge.net पर उपलब्ध कैंप्रोसेसर किसी भी XSD के लिए xml टेस्ट केस जनरेशन करेगा। वहाँ एक ट्यूटोरियल उपलब्ध है जो आपको दिखाएगा कि कैसे अपने स्वयं के परीक्षण उदाहरण उत्पन्न करें - जिसमें यथार्थवादी संकेत सुनिश्चित करने के लिए सामग्री संकेत का उपयोग करना शामिल है, न केवल यादृच्छिक रद्दी वाले।

ट्यूटोरियल यहां उपलब्ध है: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

और टूल के बारे में अधिक जानकारी - जो कि अपने XSD को अधिक XSLT फ्रेंडली स्ट्रक्चर में रिफ्लेक्टर करने के लिए OASIS कंटेंट असेंबली मैकेनिज्म (CAM) मानक का उपयोग कर रहा है - संसाधन वेबसाइट - http://www.jcam.org.uk से पाया जा सकता है

आनंद लें, डीडब्ल्यू


3
Sourceforge.net डाउनलोड का सीधा लिंक है: sourceforge.net/projects/camprocessor

@Pyderman - यह आपकी सेटिंग है - उन्हें बदलने का तरीका देखें।
घोटी

10

आप XML इंस्टेंस जेनरेटर का उपयोग कर सकते हैं जो सूर्य / ओरेकल मल्टी-स्कीमा वैलिडेटर का हिस्सा है

यह README.txt है:

सन एक्सएमएल जेनरेटर कई तरह के स्कीमा से विभिन्न एक्सएमएल इंस्टेंसेस जेनरेट करने के लिए जावा टूल है। यह DTD, RELAX Namespace, RELAX Core, TREX और W3C XML स्कीमा पार्ट 1 का सबसेट सपोर्ट करता है […]

यह एक कमांड-लाइन टूल है जो स्कीमा से वैध और अमान्य दोनों उदाहरण उत्पन्न कर सकता है। इसका उपयोग XML अनुप्रयोगों के लिए परीक्षण मामलों को उत्पन्न करने के लिए किया जा सकता है जिन्हें किसी विशेष स्कीमा के अनुरूप होना चाहिए।

एमएसवी डाउनलोड पेजxmlgen.zip से डाउनलोड और अनपैक करें और विस्तृत उपयोग निर्देश प्राप्त करने के लिए निम्न कमांड चलाएं:

java -jar xmlgen.jar -help

उपकरण बीएसडी लाइसेंस के तहत जारी किया गया प्रतीत होता है; स्रोत कोड यहां से सुलभ है


बहुत अच्छा! हालांकि थोड़ा सीमित है। मैंने इसे एक एक्सएसडी पर आजमाया जो अन्य एक्सएसडी का आयात करता है और यह विफल रहा। लेकिन डीटीडी पर यह बहुत अच्छा काम करता है। धन्यवाद!
लिंडेलोफ

1
वर्तमान लिंक: होमपेज , डाउनलोडxmlgen.zipकेवल nigthlyनिर्देशिका में। मैं अपने xsd से एक नमूना उत्पन्न करने में असमर्थता की पुष्टि करता हूं।
जारेक्जेक सेप

मेरे मामले में, --exampleएक नई नमूना फ़ाइल बनाने के लिए उपयोग किए जा सकने वाले टोकन को रखने के लिए फ़ाइल का उपयोग करने की आवश्यकता है । यह एक नमूना लेने के लिए एक नमूना लेता है! आसान नहीं है ...
द रेड मटर

java.net लिंक मूल रूप से मृत हैं।
RedGrittyBrick

10

XMLSpy आपके लिए ऐसा करता है, हालांकि यह मुफ़्त नहीं है ...

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


यह कुछ उत्पन्न करता है, लेकिन आपके पास इस पर बहुत अधिक नियंत्रण नहीं है: आप toplevel तत्व और कुछ सामान्य विकल्प चुन सकते हैं, लेकिन आप XMLSpy का उपयोग कई वेरिएंट आदि के साथ
टेस्टकेस के

XMLSpy अच्छा लग रहा था लेकिन उत्पन्न xml जो तब इसे उत्पन्न करने के लिए उपयोग किए जाने वाले xsd के विरुद्ध मान्य करने में विफल रहा। असफल। यह भी एक postiveintegerमैदान पर बारफेड - *ERROR*इसके बजाय डाल
टिम Abell

7

ऐसा लगता है कि कोई भी इस सवाल का जवाब देने में सक्षम नहीं था :)

मैं EclipseLink के MOXy का उपयोग गतिशील रूप से बाध्यकारी वर्गों को उत्पन्न करने के लिए करता हूं और फिर पुनर्जन्म के लिए बाध्य प्रकारों से गुजरता हूं। यह कुछ हद तक भारी है, लेकिन यह एक्सपीथ वैल्यू इंजेक्शन की अनुमति देता है, जब ऑब्जेक्ट ट्री तुरंत हो जाता है:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps बहुत सरल पुनरावर्ती विधि है:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

XML के लिए सब कुछ परिवर्तित करना बहुत आसान है:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

7

आप अपने xml नमूने उत्पन्न करने के लिए यहां प्राप्त XMLPad (उपयोग करने के लिए निःशुल्क) का उपयोग http://www.wmhelp.com पर भी कर सकते हैं । मेनू से: XSD -> नमूना XML फ़ाइल उत्पन्न करें।


जब मैं "जेनरेट सैंपल डेटा" चुनता हूं तो मुझे एक ढेर ओवरफ्लो या "WMHelp XmlPad ने काम करना बंद कर दिया है"
लाल मटर

5

Microsoft ने एक "दस्तावेज़ जनरेटर" उपकरण को नमूने के रूप में प्रकाशित किया है। यह एक लेख है जो नमूना ऐप की वास्तुकला और संचालन का कुछ विस्तार से वर्णन करता है।

यदि आप नमूना निर्माण उपकरण चलाना चाहते हैं, तो यहाँ क्लिक करें और MSI स्थापित करें।

यह निःशुल्क है। स्रोत उपलब्ध है। चलाने के लिए .NET फ्रेमवर्क की आवश्यकता होती है। केवल XSD के साथ काम करता है। (एनजी या डीटीडी को आराम नहीं)।


उपरोक्त लिंक MSDN पर एक लेख है, जिसे 'XML स्कीम्स से XML डॉक्युमेंट्स बनाना' कहा जाता है
सैम वारविक

इंस्टॉलर आपकी मशीन पर C # कोड का एक गुच्छा गिराता है। बस उन LinqPad में डंप और आप अपने नि: शुल्क XML उदाहरण जनरेटर है। ता दह!
सीन किरन

9 साल बाद, यह अभी भी XSD के लिए बढ़िया काम कर रहा है।
मिकानिकल

5

XML-XIG: XML इंस्टेंस जेनरेटर

http://xml-xig.sourceforge.net/

यह ओपनसोर्स मददगार होगा।


1
बहुत उपयोगकर्ता के अनुकूल नहीं है। बहुत सारे अपवादों को फेंकता है, अस्पष्टीकृत होने के बाद इसे काम नहीं कर सकता है NullPointerException
जेरेकेक सेप

4

Microsoft Office के पास ' InfoPath ' है, जो एक XSD को आयात के रूप में लेता है और आपको XML फ़ाइलों के लिए फ़ॉर्म-आधारित संपादक को जल्दी और आसानी से परिभाषित करने देता है। इसके दो मोड हैं - एक जहां आप फॉर्म को परिभाषित करते हैं, और दूसरा मोड जहां आप फॉर्म भरकर XML फाइल बनाते हैं। मेरा मानना ​​है कि यह पहली बार ऑफिस 2003 के साथ आया था, और अधिकांश लोग इसे कभी भी इंस्टॉल नहीं करते हैं। यह मुझे बहुत हैरान करता है कि मुझे यह कितना पसंद है।


1

XMLBlueprint 7.5 निम्न कार्य कर सकता है: - dtd से नमूना xml उत्पन्न करता है - एनजी स्कीमा में आराम से नमूना xml उत्पन्न करता है - xml स्कीमा से नमूना xml उत्पन्न करता है


1

SoapUI का खुला स्रोत संस्करण WSDL (जिसमें XSD प्रकार की परिभाषाएँ हैं) से SOAP अनुरोध उत्पन्न कर सकता है, इसलिए ऐसा लगता है कि इस कार्यक्षमता का एक खुला स्रोत कार्यान्वयन है। दुर्भाग्य से, मुझे पता नहीं चला है कि यह किस पुस्तकालय के लिए उपयोग किया जाता है।


1

लिक्विड एक्सएमएल स्टूडियो में एक्सएमएल सैंपल जेनरेटर विजार्ड है जो कि एक्सएमएल स्कीमा से सैंपल एक्सएमएल फाइल बनाएगा। परिणामी डेटा स्कीमा का अनुपालन करता है (यह सिर्फ रेगेक्स पैटर्न के लिए डेटा उत्पन्न नहीं कर सकता है)।

एक XSD से एक XML नमूना उत्पन्न करें


0

OpenXSD पुस्तकालय का उल्लेख है XSD के आधार पर एक्सएमएल उदाहरणों पैदा करने के लिए समर्थन है कि वे। उसकी जांच करो।


क्या आप एक उपयोग उदाहरण पोस्ट कर सकते हैं?
naXa

0

पूर्णता के लिए मैं http://code.google.com/p/jlibs/wiki/XSInstance जोड़ूंगा , जिसका उल्लेख एक समान (लेकिन जावा-विशिष्ट) प्रश्न में था: XSD से नमूना XML उत्पन्न करने के लिए कोई जावा "एपीआई"?


0

XML ब्लूप्रिंट भी ऐसा करता है; यहाँ निर्देश

http://www.xmlblueprint.com/help/html/topic_170.htm

यह मुफ़्त नहीं है, लेकिन 10-दिन का निःशुल्क परीक्षण है; यह तेज और कुशल लगता है; दुर्भाग्य से यह केवल विंडोज है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.