Como gerar uma amostra de documentos XML a partir do DTD ou do XSD?

Estamos a desenvolver uma aplicação que envolve uma quantidade substancial de transformações XML. Nós não temos nenhum dado de teste de entrada apropriado per se, apenas arquivos DTD ou XSD. Gostaríamos de gerar os nossos dados de teste a partir destes ficheiros. Existe uma maneira fácil / livre de fazer isso?

Editar

[[1]} aparentemente não há ferramentas livres para isso, e eu concordo que Oxigenxml é uma das melhores ferramentas para isso.

Author: lindelof, 2008-08-20

19 answers

No Visual Studio 2008 SP1 e mais tarde o XML Schema Explorer pode criar um documento XML com alguns dados básicos de amostra:

  1. Abra o seu documento XSD
  2. mudar para XML Schema Explorer
  3. carregue com o botão direito no nó raiz e escolha "Gerar amostra Xml"

Screenshot of the XML Schema Explorer

 171
Author: Sam Warwick, 2011-09-21 10:28:41

Nas versões recentes do código livre e aberto Eclipse, poderá gerar documentos XML a partir de ficheiros DTD e XSD. Clique com o botão direito num dado *.dtd ou *.ficheiro xsd e seleccione " gerar - > ficheiro XML...". Você pode escolher qual o elemento raiz a gerar e se atributos e elementos opcionais devem ser gerados.

Claro que pode usar o Eclipse para criar e editar os seus ficheiros DTD e XSD schema, também. E você não precisa instalar quaisquer plugins. Está incluído na norma distribuicao.

 120
Author: Florian Fankhauser, 2009-07-17 08:58:04

Para utilizadores de ideias do Intelij:

Veja as ferramentas - > acções XML

enter image description here

Parece funcionar muito bem (tanto quanto eu testei).

Editar:

Como mencionado por @naXa, poderá agora também carregar com o botão direito no ficheiro XSD e carregar em "gerar o documento XML a partir do esquema XSD..."

 28
Author: yamass, 2018-01-06 18:08:26

O camprocessador disponível em Sourceforge.net fará a geração de casos de teste xml para qualquer XSD. Há um tutorial disponível para mostrar como gerar seus próprios exemplos de teste-Incluindo usando dicas de conteúdo para garantir exemplos realistas, não apenas lixo aleatório.

O tutorial está disponível aqui: http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

E mais informações sobre a ferramenta-que está usando o conteúdo OASIS O padrão do mecanismo de montagem (CAM) para refacturar o seu XSD numa estrutura mais amigável do XSLT-pode ser encontrado na página web do recurso - http://www.jcam.org.uk

Divirta-se, DW
 12
Author: , 2008-11-10 02:08:21

Pode usar o gerador de instância XML que faz parte do validador Sun / Oracle Multi-Schema .

É README.estado txt:

O gerador Sun XML é uma ferramenta Java para gerar várias instâncias XML de vários tipos de esquemas. Suporta DTD, relaxa o espaço de nomes, relaxa o núcleo, TREX, and a subset of W3C XML Schema Part 1. [...]

Esta é uma ferramenta de linha de comandos que pode gerar tanto válida como inválida exemplos de esquemas. Pode ser utilizado para a gerar os casos de teste para XML aplicações que precisam estar em conformidade com um esquema particular.

Transferir e desfazer xmlgen.zip da página de download do msv e executar o seguinte comando para obter instruções de Utilização detalhadas:

java -jar xmlgen.jar -help

A ferramenta parece ser lançada sob uma licença BSD; o código-fonte está acessível a partir de aqui

 9
Author: falko, 2012-10-26 12:52:17

O XMLSpy faz isso por ti, embora isso não seja de graça...

Acredito que o Liquid Xml Studio o faz por si e é gratuito, mas não o usei pessoalmente para criar dados de teste.

 9
Author: SCdF, 2016-09-09 08:11:03
Parece que até agora ninguém foi capaz de responder à pergunta:

Eu uso o MOXy da EclipseLink para gerar dinamicamente classes de ligação e depois passo recursivamente pelos tipos de ligação. É um pouco pesado, mas permite a injecção do valor de XPath assim que a árvore de objectos estiver instanciada:

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 é um método recursivo muito simples:

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");
        }
    }

Converter tudo para XML é muito fácil:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
 7
Author: Michal Rames, 2011-06-02 02:45:18

Também pode usar o XMLPad (livre de usar) encontrado aqui http://www.wmhelp.com para gerar as suas amostras de xml. A partir do menu : XSD -> gerar um ficheiro XML de exemplo.

 6
Author: Pat B, 2016-01-04 19:04:51

A Microsoft publicou uma ferramenta "document generator" como amostra. Este é um artigo que descreve a arquitectura e o funcionamento da aplicação de amostras com algum detalhe.

Se só quiser executar a ferramenta de geração de amostras, Carregue aqui e instale o MSI.

É grátis. A fonte está disponível. Requer que o Framework. net funcione. Só funciona com XSD. (não relaxar NG ou DTD).
 5
Author: Cheeso, 2009-06-03 15:53:58

XML-XIG: XML Instance Generator

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

Este recurso seria útil.
 5
Author: rolandpeng, 2011-02-25 07:30:06

O Microsoft Office tem ' InfoPath ', que toma um XSD como uma importação e permite-lhe definir rápida e facilmente um editor baseado no formulário para criar ficheiros XML. Ele tem dois modos - um onde você define o formulário, e outro modo onde você cria o arquivo XML, preenchendo o formulário. Creio que veio primeiro com o escritório 2003, e a maioria das pessoas nunca o instala. Choca-me o quanto gosto.

 4
Author: Kieveli, 2009-05-21 14:29:33

XMLBlueprint 7.5 pode fazer o seguinte: - gerar uma amostra de xml a partir do dtd - gerar amostra xml a partir do esquema relax ng - gerar a amostra xml do esquema xml

 1
Author: Peter, 2010-03-12 08:55:47

A versão de código aberto de SoapUI pode gerar pedidos de SOAP a partir do WSDL (que contém definições de tipo XSD), por isso parece que existe uma implementação de código aberto desta funcionalidade. Infelizmente, ainda não descobri a que Biblioteca está habituada.

 1
Author: otto.poellath, 2010-11-26 12:06:26

O Liquid XML Studio tem um assistenteGerador de amostras XML que irá compilar ficheiros XML de exemplo a partir de um esquema XML. Os dados resultantes parecem estar em conformidade com o esquema (ele simplesmente não pode gerar dados para padrões regex).

Generate an XML Sample from an XSD

 1
Author: Sprotty, 2017-03-07 07:16:04

A Biblioteca OpenXSD menciona que eles têm suporte para gerar instâncias XML com base no XSD. Olha para isto.

 0
Author: Aravind R. Yarram, 2011-12-19 05:56:37

Para ser completo, vou adicionar http://code.google.com/p/jlibs/wiki/XSInstance , que foi mencionado numa pergunta semelhante (mas específica de Java): qualquer "API" Java para gerar uma amostra de XML do XSD?

 0
Author: Marnix Klooster, 2017-05-23 12:34:37

O modelo XML também faz isso; as instruções aqui

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

Não é grátis, mas há um teste de 10 dias livre; parece rápido e eficiente; infelizmente é apenas Windows.
 0
Author: Bambax, 2012-10-14 15:31:48

Também há http://xsd2xml.com/, um gerador XSD online para XML

 0
Author: Sphinxxx, 2018-06-16 13:43:03