Как генерировать образцы 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, для этого я использую oxygenXML, но когда я пытаюсь это сделать, он не работает для меня и он говорит, пожалуйста, определите корневой узел, но это не позволяет мне сделать это. Так что, если кто-то работал с oxygenXML, предложите, что может быть для этого?
Рэйчел
Спасибо Левеланд. Это ответило и на мой вопрос! Если вы хотите прийти, ответьте на мой вопрос: stackoverflow.com/questions/7041388/… , я был бы более чем рад отметить ваш ответ.
Эрик Х
179

В Visual Studio 2008 с пакетом обновления 1 (SP1) и более поздних версиях XML Schema Explorer может создавать XML-документ с некоторыми основными примерами данных:

  1. Откройте документ XSD
  2. Переключиться на XML Schema Explorer
  3. Щелкните правой кнопкой мыши корневой узел и выберите «Создать образец XML».

Снимок экрана проводника XML-схемы

Сэм Уорик
источник
15
да, это самый простой способ. Откройте XSD, переключитесь в XML Schema Explorer, выберите корневой узел, щелкните правой кнопкой мыши и выберите «Создать образец XML».
Баллин
+1 Спасибо, Сэм, Уорик и @ Балинт. Это было действительно полезно!
Джессегавин
3
Я использовал это с VS2008, но я не могу найти это в VS2010. Кто-нибудь может подтвердить, что это все еще существует?
Симон
То же, что и Саймон: я не могу найти это и в VS2010. Согласно MSDN, он все еще должен быть там, но он просто нигде не будет отображаться в интерфейсе ... :-(
Martijn
6
@Simon: «Генерировать образец XML» вы получаете только при щелчке правой кнопкой мыши по одному из элементов в проводнике схемы. Элементы изображены графически через зеленые левые / правые угловые скобки: «<>». Вы, вероятно, щелкаете правой кнопкой мыши по типу, и генерирующее сообщение будет генерировать его только для элементов (что имеет смысл).
Мигель Севилья
126

В последних версиях Eclipse IDE с открытым исходным кодом вы можете создавать XML-документы из файлов DTD и XSD. Щелкните правой кнопкой мыши по указанному файлу * .dtd или * .xsd и выберите «Создать -> Файл XML ...». Вы можете выбрать, какой корневой элемент генерировать и следует ли создавать дополнительные атрибуты и элементы.

Конечно, вы можете использовать Eclipse для создания и редактирования файлов схемы DTD и XSD. И вам не нужно устанавливать какие-либо плагины. Это входит в стандартную поставку.

Флориан Фанкхаузер
источник
Спасибо! Eclipse бесплатен, и это было идеальное решение.
Акку,
Ребята, вы случайно не знаете, какая функция Eclipse предоставляет эту функцию? В моем подменю «Генерировать» единственным элементом является «Классы JAXB».
otto.poellath
9
Вам нужно установить проект Web Tools (смотрите Help-> Install New Software), чтобы получить эти опции.
pwaring
3
Eclipse кажется хорошим вариантом, но я не смог заставить поколение следовать импортированным XSD. Например, если бы у меня был XSD, описывающий 3 элемента, и одним из них был complexType, который был определен в ссылочном / импортированном XSD, он не сгенерировал бы для этого элемента. Любые идеи?
Дэвид Хергерт
@DavidHergert Простой обходной путь - создание типа заглушки.
Адам Матан
32

Для пользователей Intellij Idea:

Взгляните на Инструменты -> Действия XML

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

Кажется, работает очень хорошо (насколько я проверял).

Редактировать:

Как уже упоминалось @naXa, теперь вы также можете щелкнуть правой кнопкой мыши по файлу XSD и щелкнуть «Создать документ XML из схемы XSD ...»

yamass
источник
Есть ли способ указать количество элементов для генерации (для последовательностей)?
Никита
Я проверил каждое решение этой
темы,
1
Не работает для меня в последнем RubyMine (v. 7.0, на основе Intellij Idea) с XSD со многими импортами. У меня нет ничего, кроме сообщения об ошибке.
Envek
3
"Ошибка компиляции схемы"?
Красный горох
1
В более новых версиях щелкните правой кнопкой мыши XSD и выберите «Создать XML-документ из схемы XSD ...»
naXa
12

Camprocessor, доступный на Sourceforge.net, будет выполнять генерацию тестовых примеров XML для любого XSD. Существует учебное пособие, которое покажет вам, как создавать собственные тестовые примеры, включая использование подсказок по содержанию для обеспечения реалистичных примеров, а не только случайных ненужных.

Учебное пособие доступно здесь: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

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

Наслаждайся, DW


источник
3
Прямая ссылка на Sourceforge.net скачать: sourceforge.net/projects/camprocessor
@Pyderman - это ваши настройки - посмотрите, как их изменить.
Готи
10

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

Это README.txt гласит:

Sun XML Generator - это инструмент Java для генерации различных экземпляров XML из нескольких видов схем. Он поддерживает DTD, пространство имен RELAX, ядро ​​RELAX, TREX и подмножество XML-схемы W3C, часть 1. [...]

Это инструмент командной строки, который может генерировать как действительные, так и недействительные экземпляры из схем. Он может использоваться для генерации тестовых случаев для приложений XML, которые должны соответствовать определенной схеме.

Загрузите и распакуйте xmlgen.zipсо страницы загрузки msv и выполните следующую команду, чтобы получить подробные инструкции по использованию:

java -jar xmlgen.jar -help

Инструмент, кажется, выпущен под лицензией BSD; исходный код доступен отсюда

Фалько
источник
Очень хорошо! Немного ограничен, хотя. Я попробовал это на XSD, который импортирует другой XSD, и это не удалось. Но на DTD это работает очень хорошо. Спасибо!
Линделоф
1
Текущие ссылки: домашняя страница , загрузки . xmlgen.zipтолько в nigthlyкаталоге. Я подтверждаю неспособность создать образец из моего xsd.
Ярекчек
В моем случае необходимо было использовать --exampleфайл, содержащий токены, которые можно использовать для создания нового файла примера. Требуется образец, чтобы сделать образец! Не просто ...
Красный горох
Ссылки на java.net в основном мертвы.
RedGrittyBrick
10

XMLSpy делает это для вас, хотя это не бесплатно ...

Я считаю, что Liquid Xml Studio делает это для вас и является бесплатным, но я лично не использовал его для создания тестовых данных.

SCdF
источник
Он генерирует что-то, но вы не имеете большого контроля над ним: вы можете выбрать элемент верхнего уровня и некоторые общие параметры, но вы не можете использовать 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).

Cheeso
источник
Выше ссылка на статью в MSDN под названием «Генерация XML-документов из XML-схем»
Сэм Уорвик,
Установщик помещает кучу кода C # на ваш компьютер. Просто скопируйте их в LinqPad, и у вас будет бесплатный генератор экземпляров XML. Та да!
Шон Кирон
9 лет спустя это все еще отлично работает для XSD.
Миканикал
5

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

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

Этот открытый источник будет полезен.

rolandpeng
источник
1
Не очень удобно для пользователя. Бросает много исключений, не может заставить его работать после необъяснимого NullPointerException.
Ярекчек
4

В Microsoft Office есть InfoPath , который принимает XSD в качестве импорта и позволяет быстро и легко определить редактор на основе форм для создания файлов XML. Он имеет два режима - один, в котором вы определяете форму, и другой режим, в котором вы создаете файл XML, заполняя форму. Я полагаю, что он впервые появился в Office 2003, и большинство людей никогда его не устанавливают. Меня шокирует, насколько мне это нравится.

Kieveli
источник
1

XMLBlueprint 7.5 может выполнять следующие действия: - генерировать образец xml из dtd - генерировать образец xml из схемы relax ng - генерировать образец xml из схемы xml

Питер
источник
1

Версия SoapUI с открытым исходным кодом может генерировать SOAP-запросы из WSDL (который содержит определения типов XSD), поэтому, похоже, существует реализация этой функциональности с открытым исходным кодом. К сожалению, я не понял, какая библиотека используется для этого.

otto.poellath
источник
1

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

Создать образец XML из XSD

Sprotty
источник
0

В библиотеке OpenXSD упоминается, что они поддерживают создание экземпляров XML на основе XSD. Проверь это.

Аравинд Яррам
источник
Можете ли вы опубликовать пример использования?
naXa
0

XML Blueprint также делает это; инструкции здесь

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

Это не бесплатно, но есть 10-дневная бесплатная пробная версия; кажется быстрым и эффективным; к сожалению это только винда.

Bambax
источник