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

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

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

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

19 ответов


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

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


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

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

Screenshot of the XML Schema Explorer


в последних версиях бесплатного и с открытым исходным кодом затмение 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 и подмножество части 1 схемы W3C XML. [...]

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

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

java -jar xmlgen.jar -help

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


XBRL программирования это для вас, хотя это не бесплатно...

Я считаю, что Жидкий 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 мастер, который будет создавать образцы XML-файлов из схемы XML. Полученные данные, похоже, соответствуют схеме (она просто не может генерировать данные для шаблонов регулярных выражений).

Generate an XML Sample from an XSD


на 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