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


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

Edit

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

19 172

19 ответов:

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

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

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

  1. откройте XSD-документ
  2. переключиться в Обозреватель XML-схем
  3. щелкните правой кнопкой мыши корневой узел и выберите "Создать образец Xml"

Screenshot of the XML Schema Explorer

в последних версиях free и open source затмение IDE вы можете создавать XML-документы из файлов DTD и XSD. Щелкните правой кнопкой мыши на данном *.dtd или *.xsd-файл и выберите "создать -> XML-файл...". Вы можете выбрать, какой корневой элемент для создания и должны ли создаваться дополнительные атрибуты и элементы.

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

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

посмотрите на инструменты - > действия XML

enter image description here

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

Edit:

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

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

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

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

наслаждайтесь, DW

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

это README.txt состояния:

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

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

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

java -jar xmlgen.jar -help

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

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

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

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

Я использую 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);

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

Microsoft опубликовала инструмент "генератор документов" в качестве примера. эта статья это описывает архитектуру и работу примера приложения в некоторых деталях.

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

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

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

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

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

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

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

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

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

Generate an XML Sample from an XSD

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

для полноты я добавлю http://code.google.com/p/jlibs/wiki/XSInstance, который был упомянут в аналогичном (но специфичном для Java) вопросе:любой Java " API " для создания образца XML из XSD?

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

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

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

есть еще http://xsd2xml.com/, онлайн генератор XSD в XML