JSON → XSD

Guia do Desenvolvedor: Gerador de Definições JSON para XML Schema (XSD)

Infira esquemas XML (XSD), estruturas de tipos complexos, atributos e regras de ocorrência minOccurs/maxOccurs a partir de dados JSON.

Padrão de Design
Documento JSON de Entrada
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="https://schema.toolsaa.com/v1"
  xmlns="https://schema.toolsaa.com/v1"
  elementFormDefault="qualified">

  <!-- Top-Level Root Element Declaration -->
  <xs:element name="purchaseOrder" type="PurchaseOrderType"/>

  <!-- Reusable Global Complex Types (Venetian Blind Pattern) -->
  <xs:complexType name="PurchaseOrderType">
    <xs:sequence>
      <xs:element name="orderDate" type="xs:dateTime"/>
      <xs:element name="deliveryDate" type="xs:date"/>
      <xs:element name="status" type="xs:string"/>
      <xs:element name="customer" type="CustomerType"/>
      <xs:element name="lineItems" type="LineItemsType" maxOccurs="unbounded"/>
      <xs:element name="paymentSummary" type="PaymentSummaryType"/>
    </xs:sequence>
    <xs:attribute name="orderNumber" type="xs:string" use="required"/>
    <xs:attribute name="currency" type="xs:string" use="required"/>
    <xs:attribute name="version" type="xs:string" use="required"/>
  </xs:complexType>

  <xs:complexType name="CustomerType">
    <xs:sequence>
      <xs:element name="id" type="xs:string"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="email" type="xs:string"/>
      <xs:element name="vatNumber" type="xs:string"/>
      <xs:element name="isTaxExempt" type="xs:boolean"/>
      <xs:element name="addresses" type="AddressesType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="LineItemsType">
    <xs:sequence>
      <xs:element name="sku" type="xs:string"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="quantity" type="xs:int"/>
      <xs:element name="unitPrice" type="xs:decimal"/>
      <xs:element name="taxRate" type="xs:decimal"/>
      <xs:element name="inStock" type="xs:boolean"/>
      <xs:element name="tags" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PaymentSummaryType">
    <xs:sequence>
      <xs:element name="subtotal" type="xs:int"/>
      <xs:element name="taxTotal" type="xs:decimal"/>
      <xs:element name="shippingFee" type="xs:int"/>
      <xs:element name="grandTotal" type="xs:decimal"/>
      <xs:element name="paymentMethod" type="xs:string"/>
      <xs:element name="paid" type="xs:boolean"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AddressesType">
    <xs:sequence>
      <xs:element name="type" type="xs:string"/>
      <xs:element name="street" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="state" type="xs:string"/>
      <xs:element name="postalCode" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
Elementos do Esquema
27 Elements (3 Unbounded)
Tipos Complexos e Simples
5 Complex, 3 Attributes
Padrão W3C XSD
W3C XML Schema 1.0 (Strict AST)
100% Privacidade no Cliente

Processamento e inferência de esquemas XSD executados inteiramente no navegador local sem qualquer envio a servidores.

Padrões Arquiteturais XSD

Alterne instantaneamente entre Venetian Blind (tipos nomeados globais), Russian Doll (anônimos aninhados) e Salami Slice.

Inferência Precisa de Tipos W3C

Reconhecimento avançado de xs:dateTime, xs:date, xs:anyURI, decimais e detecção de atributos XML prefixados com @.

Referência técnica e guia de arquitetura

Guia do Desenvolvedor: Gerador de Definições JSON para XML Schema (XSD) — Guia de referência

Infira esquemas XML (XSD), estruturas de tipos complexos, atributos e regras de ocorrência minOccurs/maxOccurs a partir de dados JSON.

Parâmetros principais e controles

designPatternstring

Padrão de modelagem estrutural W3C XSD: 'venetian-blind' (tipos nomeados reutilizáveis), 'russian-doll' (tipos anônimos aninhados) ou 'salami-slice' (todos os elementos globais).

Padrão: venetian-blind
rootElementNamestring

Nome do elemento raiz XML de nível superior na declaração do esquema gerado.

Padrão: purchaseOrder
targetNamespacestring

URI do namespace de destino (atributo targetNamespace em xs:schema).

Padrão: https://schema.toolsaa.com/v1
cardinalityRulestring

Estratégia de cardinalidade: 'auto' (deduz minOccurs/maxOccurs de arrays e nulos), 'strict' (força minOccurs=1) ou 'flexible' (define minOccurs=0).

Padrão: auto
detectAttributesboolean

Converte automaticamente chaves JSON com prefixo '@' ou '_' em declarações xs:attribute em vez de elementos filhos.

Padrão: true
detectDateUriboolean

Detecta e infere tipos semânticos W3C como xs:dateTime, xs:date e xs:anyURI a partir de strings compatíveis.

Padrão: true

Dicas profissionais e melhores práticas

Padrão Venetian Blind para geração eficiente de código

O modelo Venetian Blind é o padrão da indústria para JAXB (xjc) em Java e xsd.exe no .NET. Ele produz classes e structs nomeadas e reutilizáveis para cada complexType, evitando classes anônimas aninhadas de difícil manutenção.

Atributos XML vs. Elementos com o prefixo @

Prefixe campos de metadados como identificadores, versões e moedas com '@' (ex.: '@id', '@versao'). Isso gera declarações <xs:attribute> limpas, preservando dados de negócio como nós <xs:element> estruturados.

População de arrays de amostra para cardinalidade exata

Certifique-se de que seus arrays de exemplo contenham ao menos um objeto preenchido com todos os campos possíveis. O motor atribuirá automaticamente maxOccurs="unbounded" e minOccurs="0", aceitando coleções vazias ou com múltiplos registros.

Evitando conflitos com elementFormDefault="qualified"

Manter elementFormDefault em 'qualified' garante que elementos filhos herdem o namespace de destino, prevenindo erros de validação em barramentos corporativos ESB e web services SOAP.

Problemas comuns e solução de problemas

Falha de validação XML devido à ordem dos elementos filhos

A estrutura W3C xs:sequence exige rigorosamente a ordem sequencial dos elementos declarados no esquema. Certifique-se de que a serialização XML respeite essa ordem ou avalie o uso de xs:all quando a ordem for indeterminada.

Datas no formato ISO são inferidas como xs:string em vez de xs:dateTime

Verifique se as strings de data seguem com precisão a norma ISO 8601 (por exemplo, '2026-10-16T14:30:00Z' ou '2026-10-16'). Padrões não conformes retornam ao tipo genérico xs:string.

Arrays vazios [] ou propriedades nulas resultam em tipos indefinidos

Arrays sem elementos não fornecem dados para determinar a estrutura dos tipos internos. Preencha os arrays no JSON de entrada com ao menos um registro de amostra completo.

Perguntas frequentes (FAQ)

Qual a diferença entre os padrões Venetian Blind, Russian Doll e Salami Slice?▼

O Venetian Blind define um único elemento raiz e tipos globais nomeados (xs:complexType), sendo ideal para POJOs e código OOP. O Russian Doll aninha tipos anônimos diretamente nos elementos, impedindo reutilização. O Salami Slice declara todos os elementos globalmente com 'ref', o que permite que qualquer tag seja o elemento raiz do documento.

Como o gerador distingue atributos de elementos XML?▼

Quando 'detectAttributes' está ativado, qualquer chave JSON iniciada por '@' (ex.: '@pedidoId') ou '_' (ex.: '_status') é mapeada para uma definição <xs:attribute> no complexType. As demais chaves tornam-se elementos filhos <xs:element>.

O esquema XSD gerado pode ser compilado com Java JAXB ou .NET xsd.exe?▼

Sim. O esquema gerado atende 100% à recomendação W3C XML Schema 1.0 e pode ser consumido diretamente por utilitários como 'xjc -d src schema.xsd' ou 'xsd.exe schema.xsd /classes'.

Como os tipos de dados do JSON são convertidos para tipos simples do W3C XSD?▼

Números inteiros mapeiam para xs:integer (ou xs:long), decimais para xs:decimal, booleanos para xs:boolean e strings no formato ISO ou URLs para xs:dateTime, xs:date ou xs:anyURI. Os demais textos tornam-se xs:string.

Meus dados JSON são enviados para servidores externos ou processados por IA?▼

Não. Toda a análise sintática de AST, inferência de tipos e geração XSD ocorrem 100% no lado do cliente, no navegador web, sem transmissão de rede.

Ferramentas e utilitários relacionados

Todas as ferramentas →