Как сгенерировать образцы 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).
Ответ 11
XML-XIG: генератор экземпляров XML
http://xml-xig.sourceforge.net/
Этот openource был бы полезен.
Ответ 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. Проверьте это.
Ответ 17
Для полноты я добавлю http://code.google.com/p/jlibs/wiki/XSInstance, который упоминался в подобном (но специфичном для Java) вопросе: Любой Java "API" создать XML-образец из XSD?
Ответ 18
XML Blueprint также делает это; инструкции здесь
http://www.xmlblueprint.com/help/html/topic_170.htm
Это не бесплатно, но есть 10-дневная бесплатная пробная версия; это кажется быстрым и эффективным; к сожалению, это только Windows.
Ответ 19
Там также http://xsd2xml.com/, онлайн генератор XSD to XML