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

Estamos desenvolvendo um aplicativo que envolve uma quantidade substancial de transformações XML. Não temos dados de teste de input adequados, apenas arquivos DTD ou XSD. Gostaríamos de gerar nossos dados de teste nós mesmos a partir desses arquivos. Existe uma maneira fácil / gratuita de fazer isso?

Editar

Aparentemente, não há ferramentas gratuitas para isso, e eu concordo que o OxygenXML é uma das melhores ferramentas para isso.

Eu acho que Oxygen ( http://www.oxygenxml.com/ ) faz isso também, mas esse é outro produto comercial. É um bom, embora … Eu recomendo fortemente para quem faz muito trabalho XML. Ele vem em um bom plugin do Eclipse também.

Eu acredito que há um teste gratuito de 30 dias.

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

  1. Abra seu documento XSD
  2. Mude para o XML Schema Explorer
  3. Clique com o botão direito do mouse no nó raiz e escolha “Generate Sample Xml”

Captura de tela do explorador de esquema XML

Em versões recentes do Eclipse IDE de código aberto e livre, você pode gerar documentos XML a partir de arquivos DTD e XSD. Clique com o botão direito do mouse em um determinado arquivo * .dtd ou * .xsd e selecione “Generate -> XML File …”. Você pode escolher qual elemento-raiz gerar e se atributos e elementos opcionais devem ser gerados.

É claro que você também pode usar o Eclipse para criar e editar seus arquivos de esquema DTD e XSD. E você não precisa instalar nenhum plug-in. Está incluído na distribuição padrão.

Para usuários do Intellij Idea:

Dê uma olhada em Ferramentas -> Ações XML

insira a descrição da imagem aqui

Parece funcionar muito bem (até onde eu testei).

Editar:

Como mencionado pelo @naXa, agora você também pode clicar com o botão direito do mouse no arquivo XSD e clicar em “Gerar documento XML do esquema XSD …”

O camprocessador disponível no Sourceforge.net fará a geração de casos de teste xml para qualquer XSD. Há um tutorial disponível para mostrar a você como gerar seus próprios exemplos de teste – incluindo o uso de dicas de conteúdo para garantir exemplos realistas, não apenas randoms.

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 padrão OASIS Content Assembly Mechanism (CAM) para refatorar seu XSD em uma estrutura mais amigável XSLT – podem ser encontradas no site de resources – http://www.jcam.org.uk

Aproveite, DW

Você pode usar o Gerador de Instâncias XML, que faz parte do Validador de Esquemas Múltiplos da Sun / Oracle .

É README.txt afirma:

O Sun XML Generator é uma ferramenta Java para gerar várias instâncias XML a partir de vários tipos de esquemas. Ele suporta DTD, RELAX Namespace, RELAX Core, TREX e um subconjunto do W3C XML Schema Part 1. […]

Esta é uma ferramenta de linha de comando que pode gerar instâncias válidas e inválidas de esquemas. Ele pode ser usado para gerar casos de teste para aplicativos XML que precisam estar em conformidade com um esquema específico.

Faça o download e descompacte xmlgen.zip da página de download do msv e execute o seguinte comando para obter instruções detalhadas de uso:

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 daqui

XMLSpy faz isso para você, embora não seja de graça …

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

Parece que ninguém foi capaz de responder à pergunta até agora 🙂

Eu uso o MOXy do EclipseLink para gerar dinamicamente classs de binding e, em seguida, recursivamente percorrer os tipos ligados. É um pouco pesado, mas permite injeção de valor de XPath quando a tree de objects é 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 bastante 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 em XML é bem fácil:

 Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); 

Você também pode usar o XMLPad (livre para usar) encontrado aqui http://www.wmhelp.com para gerar suas amostras de xml. No menu: XSD -> gerar arquivo XML de amostra.

XML-XIG: Gerador de Instância XML

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

Este opensource seria útil.

Microsoft Office tem ‘ InfoPath ‘, que leva um XSD como uma importação e permite que você defina rápida e facilmente um editor baseado em formulário para criar arquivos XML. Ele tem dois modos – um em que você define o formulário e outro modo em que você cria o arquivo XML preenchendo o formulário. Eu acredito que veio pela primeira vez com o Office 2003, e a maioria das pessoas nunca o instala. Isso me choca com o quanto eu gosto.

A Microsoft publicou uma ferramenta “gerador de documentos” como amostra. Este é um artigo que descreve a arquitetura e a operação do aplicativo de amostra com algum detalhe.

Se você quiser apenas executar a ferramenta de geração de amostra, clique aqui e instale o MSI.

É grátis. A fonte está disponível. Requer o .NET Framework para ser executado. Funciona apenas com XSDs. (não Relax NG ou DTD).

O XMLBlueprint 7.5 pode fazer o seguinte: – gerar amostra de xml a partir de dtd – gerar amostra de xml a partir do esquema de relaxamento – gerar amostra de xml a partir do esquema xml

A versão de software livre do SoapUI pode gerar solicitações SOAP do WSDL (que contém definições do tipo XSD), portanto, parece haver uma implementação de software livre dessa funcionalidade. Infelizmente, eu não descobri qual biblioteca é usada para isso.

O Liquid XML Studio possui um assistente de Gerador de Amostra XML que criará arquivos XML de amostra 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 de regex).

Gerar uma Amostra XML de um XSD

A biblioteca OpenXSD menciona que eles têm suporte para gerar instâncias XML com base no XSD. Dê uma olhada.

Para completar, adicionarei http://code.google.com/p/jlibs/wiki/XSInstance , que foi mencionado em uma pergunta semelhante (mas específica de Java): Qualquer “API” Java para gerar XML de amostra do XSD?

XML Blueprint também faz isso; instruções aqui

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

Não é grátis, mas há um teste gratuito de 10 dias; parece rápido e eficiente; infelizmente é apenas o Windows.

Há também o http://xsd2xml.com/ , um gerador online de XSD para XML