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

StackOverflow https://stackoverflow.com/questions/17106

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

  1. Откройте свой XSD-документ
  2. Переключиться на обозреватель XML-схем
  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

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

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

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

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

Наслаждайся, ДВ

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

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

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

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

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

java -jar xmlgen.jar -help

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

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

я полагаю, что Жидкая XML-студия делает это за вас и бесплатно, но лично я не использовал его для создания тестовых данных.

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

Я использую 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.Работает только с XSD.(не Relax NG или DTD).

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

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

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

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

XMLBlueprint 7.5 может делать следующее:- Сгенерировать образец XML из DTD - генерировать образец XML из схемы расслабления NG - генерировать образец XML из схемы XML

Версия с открытым исходным кодом Мыльный интерфейс может генерировать запросы 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top