Как сгенерировать образцы XML-документов из их DTD или XSD?

Мы разрабатываем приложение, которое предполагает значительное количество XML-преобразований. У нас нет надлежащих входных тестовых данных как таковых, а только файлов DTD или XSD. Мы хотели бы сами генерировать наши тестовые данные из этих файлов. Есть ли простой/бесплатный способ сделать это?

Edit

По-видимому, для этого нет бесплатных инструментов, и я согласен с тем, что OxygenXML является одним из лучших инструментов для этого.

Ответ 1

Я думаю, что Oxygen (http://www.oxygenxml.com/) также делает это, но это другой коммерческий продукт. Это хороший, хотя... Я бы настоятельно рекомендовал его для тех, кто много работает в XML. Он также входит в хороший плагин Eclipse.

Я действительно считаю, что есть бесплатная, полнофункциональная 30-дневная пробная версия.

Ответ 2

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

  • Откройте документ XSD
  • Переключиться на проводник XML-схем
  • Щелкните правой кнопкой мыши корень node и выберите "Создать образец Xml"

Screenshot of the XML Schema Explorer

Ответ 3

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

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

Ответ 4

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

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

enter image description here

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

Изменить:

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

Ответ 5

Капропроцессор, доступный на 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

Ответ 6

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

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

Ответ 7

Вы можете использовать Генератор экземпляров XML, который является частью Sun/Oracle Multi-Schema Validator.

В README.txt указано:

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

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

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

java -jar xmlgen.jar -help

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

Ответ 8

Кажется, никто не смог ответить на вопрос до сих пор:)

Я использую EclipseLink MOXy для динамического создания классов привязки, а затем рекурсивно просматриваю связанные типы. Он несколько тяжелый, но он позволяет инъекции значения 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);

Ответ 9

Вы также можете использовать XMLPad (бесплатно), найденный здесь http://www.wmhelp.com генерировать ваши образцы XML. Из меню: XSD → создать образец XML файла.

Ответ 10

В качестве примера Microsoft опубликовала инструмент "Генератор документов". Это статья, в которой подробно описывается архитектура и работа примера приложения.

Если вы просто хотите запустить инструмент создания образцов, нажмите здесь и установите MSI.

Это бесплатно. Источник доступен. Требуется .NET Framework для запуска. Работает только с XSD. (не Relax NG или DTD).

Ответ 12

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

Ответ 13

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

Ответ 14

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

Generate an XML Sample from an XSD

Ответ 15

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

Ответ 16

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

Ответ 18

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

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

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

Ответ 19

Там также http://xsd2xml.com/, онлайн генератор XSD to XML