Як генерувати зразкові XML документи зі свого DTD чи XSD?


186

Ми розробляємо додаток, який передбачає значну кількість перетворень XML. У нас немає належних вхідних тестових даних, лише DTD або XSD файли. Ми хотіли б самі сформувати наші тестові дані з цих файлів. Чи існує простий / безкоштовний спосіб зробити це?

Редагувати

Очевидно, що для цього немає вільних інструментів, і я погоджуюся, що OxygenXML є одним з найкращих інструментів для цього.


8
Я не бачу відповідей на ці запитання, які не відповідають формату запитань або запитуютьdebate, arguments, polling, or extended discussion
mjn

Відповіді:


29

Я думаю, що Oxygen ( http://www.oxygenxml.com/ ) робить це добре, але це ще один комерційний продукт. Хоча це приємно ... Я настійно рекомендую його для тих, хто робить багато XML-робіт. Він також входить в хороший плагін Eclipse.

Я вірю, що існує безкоштовна, повнофункціональна 30-денна пробна версія.


У мене є купа XSD, які, в свою чергу, успадковують схеми від різних XSD, і мені потрібно генерувати XML-файл для тестування з цього XSD, для цього я використовую oxyxML, але коли я намагаюся це зробити, це не працює для мене і він говорить, будь ласка, визначте кореневий вузол, але він не дозволяє мені це зробити. Отже, якщо хтось працював з oxyxML, підкажіть, що може бути для цього?
Рейчел

Спасибі Левеленд. Це також відповіло на моє запитання! Якщо ви хочете відповісти на моє запитання: stackoverflow.com/questions/7041388/… , я був би більш ніж радий позначити ваше як відповідь.
Ерік Н

179

У Visual Studio 2008 SP1 та пізніших версіях XML Schema Explorer може створити документ XML з деякими основними зразковими даними:

  1. Відкрийте свій XSD документ
  2. Перейдіть на XML Schema Explorer
  3. Клацніть правою кнопкою миші кореневий вузол та оберіть "Створити зразок Xml"

Знімок екрана провідника XML Schema


15
так, це найпростіший спосіб. Відкрийте XSD, перейдіть до провідника XML Schema, виберіть кореневий вузол, клацніть правою кнопкою миші та оберіть "Генерувати зразок Xml".
balint

+1 Дякую @Sam Warwick та @balint. Це було дуже корисно!
jessegavin

3
Я використовував це з VS2008, але я не можу знайти його у VS2010. Чи може хтось підтвердити, що це все ще існує?
Саймон

Те саме, що Саймон: я не можу знайти цього і у VS2010. Згідно з MSDN, воно все одно має бути там, але воно просто не з’явиться ніде в інтерфейсі ... :-(
Martijn

6
@Simon: "Створення зразка XML" ви отримуєте лише тоді, коли клацніть правою кнопкою миші один з елементів у програмі провідника схеми. Елементи зображуються графічно через зелені дужки лівого / прямого кута: "<>". Ви, напевно, праворуч натискаєте тип, і генерувати повідомлення генеруватиме його лише для елементів (що має сенс).
Мігель Севілья

126

В останніх версіях вільного та відкритого коду Eclipse IDE ви можете створювати XML-документи з файлів DTD та XSD. Клацніть правою кнопкою миші на заданому файлі * .dtd або * .xsd та виберіть "Створити -> XML-файл ...". Ви можете вибрати, який корінний елемент генерувати та чи слід генерувати необов'язкові атрибути та елементи.

Звичайно, ви можете використовувати Eclipse і для створення та редагування файлів схем DTD та XSD. І вам не потрібно встановлювати додатки. Він включений у стандартний розподіл.


Дякую! Затьмарення безкоштовно, і це було ідеальним рішенням.
Акку

Ви, хлопці, знаєте, яка функція Eclipse забезпечує цю функціональність? У моєму підменю "Створити" є "Класи JAXB" як єдиний пункт.
otto.poellath

9
Вам потрібно встановити проект веб-інструментів (подивіться у розділі Довідка-> Встановити нове програмне забезпечення), щоб отримати ці варіанти.
pwaring

3
Eclipse здається хорошим варіантом, але я не міг змусити покоління слідкувати за імпортованими XSD. Наприклад, якби у мене був XSD, що описує 3 елементи, а один із них був складним типом, визначеним у посиланні / імпорті XSD, він би не генерував для цього елемента. Будь-які ідеї?
Девід Гергерт

@DavidHergert Простий спосіб вирішення може створити тип заглушки.
Адам Матан

32

Для користувачів Intellij Idea:

Погляньте на Інструменти -> Дії XML

введіть тут опис зображення

Здається, працює дуже добре (наскільки я тестував).

Редагувати:

Як згадував @naXa, тепер ви також можете клацнути правою кнопкою миші файл XSD і натиснути "Генерувати XML-документ із схеми XSD ..."


чи є спосіб вказати # елементів для генерації (для послідовностей)?
Микита

Я перевіряв кожне рішення цієї теми, і це працювало найкраще
FLX,

1
Не працює для мене в останньому RubyMine (v. 7.0, заснований на Intellij Idea) з XSD з багатьма імпортами. У мене нічого, крім повідомлення про помилку.
Енвек

3
"Помилка компіляції схеми"?
Червоний горох

1
У новіших версіях клацніть правою кнопкою миші на XSD та виберіть "Генерувати XML-документ із XSD-схеми ..."
naXa

12

Кампроцесор, доступний на Sourceforge.net, зробить генерацію тестів xml для будь-якого XSD. Доступний підручник, який покаже вам, як генерувати власні тестові приклади - включаючи використання підказків щодо вмісту для забезпечення реалістичних прикладів, а не лише випадкових непотрібних.

Підручник доступний тут: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

А більше інформації про інструмент, який використовує стандарт механізму збирання вмісту OASIS (CAM) для перетворення вашого XSD на більш зручну для XSLT структуру - можна знайти на веб-сайті ресурсу - http://www.jcam.org.uk

Насолоджуйтесь, DW


3
Пряме посилання на Sourceforge.net завантажити: sourceforge.net/projects/camprocessor

@Pyderman - ось ваші налаштування - подивіться, як їх змінити.
Ghoti

10

Ви можете використовувати генератор екземплярів XML, який є частиною багатосхемового валідатора Sun / Oracle .

Це README.txt:

Sun XML Generator - це інструмент Java для генерації різних примірників XML з кількох видів схем. Він підтримує DTD, RELAX Іменний простір, RELAX Core, TREX та підмножину W3C XML Schema Part 1. [...]

Це інструмент командного рядка, який може генерувати як дійсні, так і недійсні екземпляри зі схем. Він може використовуватися для генерації тестових випадків для XML-додатків, які повинні відповідати певній схемі.

Завантажте та розпакуйте xmlgen.zipзі сторінки завантаження MSV та запустіть таку команду, щоб отримати детальні інструкції щодо використання:

java -jar xmlgen.jar -help

Здається, інструмент випускається за ліцензією BSD; вихідний код доступний тут


Дуже хороша! Трохи обмежений, хоча. Я спробував це на XSD, який імпортує інші XSD, і це не вдалося. Але на DTD це працює дуже добре. Дякую!
lindelof

1
Поточні посилання: домашня сторінка , завантаження . xmlgen.zipтільки в nigthlyкаталозі. Я підтверджую нездатність створити зразок з мого xsd.
Jarekczek

У моєму випадку потрібно було використовувати --exampleфайл, щоб містити лексеми, які можна використовувати для створення нового зразкового файлу. Для виготовлення зразка потрібен зразок! Непросто ...
Червоний горох

java.net посилання в основному мертві.
RedGrittyBrick

10

XMLSpy робить це для вас, хоча це не безкоштовно ...

Я вважаю, що Liquid Xml Studio робить це для вас і є безкоштовним, але я особисто не використовував це для створення тестових даних.


Це щось генерує, але ви не маєте великого контролю над цим: ви можете вибрати елемент топлевель та деякі загальні параметри, але ви не можете використовувати XMLSpy для створення набору тестових вікон з багатьма варіантами тощо
Hans-Peter Störr

XMLSpy виглядав добре, але генерував xml, який потім не вдалося перевірити проти xsd, який використовувався для його генерування. Збій. Він також заграв на postiveintegerполі - *ERROR*замість цього
Тим Абел

7

Здається, ніхто поки не зміг відповісти на це питання :)

Я використовую MOXy EclipseLink для динамічного генерування класів прив'язки, а потім рекурсивно проходжуюсь через зв'язані типи. Він дещо важкий, але дозволяє вводити значення XPath після того, як дерево об'єкта буде створено:

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

Ви також можете використовувати XMLPad (безкоштовний у використанні), знайдений тут http://www.wmhelp.com для створення ваших зразків xml. З меню: XSD -> створити зразок XML-файла.


Я отримую переповнення стека або "WMHelp XmlPad перестав працювати", коли я вибираю "Генерувати зразкові дані"
The Red Pea

5

Microsoft опублікувала інструмент "генератор документів" як зразок. Це стаття, яка детально описує архітектуру та роботу зразка програми.

Якщо ви просто хочете запустити інструмент генерації зразків, натисніть тут та встановіть MSI.

Це безкоштовно. Джерело доступне. Потрібен .NET Framework для запуску. Працює лише з XSD. (не Relax NG або DTD).


Вище посилання на статтю про MSDN під назвою "Генерування XML-документів із XML-схем"
Сем Уорвік

Інсталятор скидає купу C # на вашу машину. Просто скиньте їх у LinqPad і у вас є безкоштовний генератор примірників XML. Та да!
Шон Кірон

Через 9 років це все ще чудово працює для XSD.
Mikanikal

5

XML-XIG: Генератор екземплярів XML

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

Цей відкритий ресурс був би корисним.


1
Не дуже зручний для користувачів. Викидає чимало винятків, не може змусити його працювати після отримання незрозумілих NullPointerException.
Jarekczek

4

Microsoft Office має " InfoPath ", який сприймає XSD як імпорт і дозволяє швидко та легко визначити редактор на основі форм для створення XML-файлів. Він має два режими - один, де ви визначаєте форму, та інший, коли ви створюєте XML-файл, заповнюючи форму. Я вважаю, що вперше це було з Office 2003, і ​​більшість людей ніколи його не встановлюють. Це мене шокує, наскільки мені це подобається.


1

XMLBlueprint 7.5 може зробити наступне: - генерувати зразок xml від dtd - генерувати зразок xml зі схеми розслаблення ng - генерувати зразок xml із xml схеми


1

Версія з відкритим кодом SoapUI може генерувати запити SOAP з WSDL (який містить визначення типів XSD), тому схоже, що це функція з відкритим вихідним кодом цієї функції. На жаль, я не зрозумів, до якої бібліотеки звик.


1

Liquid XML Studio має майстра генератора зразків XML, який буде створювати зразкові файли XML зі схеми XML. Очевидно, що отримані дані відповідають схемі (вона просто не може генерувати дані для шаблонів регулярних виразів).

Створіть XML-зразок із XSD


0

Бібліотека OpenXSD зазначає, що у них є підтримка для генерації екземплярів XML на основі XSD. Перевірте це.


чи можете ви опублікувати приклад використання?
naXa



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.