Ferramenta de Definição de Esquema XML (Xsd.exe)

A Ferramenta de Definição de Esquema XML (Xsd.exe) gera um esquema XML ou classes de common language runtime de arquivos XDR, XML e XSD files, ou de classes em um assembly de tempo de execução.

A ferramenta de Definição de Esquema XML (Xsd.exe) geralmente pode ser encontrada no seguinte caminho:
C:\Program Files (x86)\Microsoft SDKs\Windows\{version}\bin\NETFX {version} Tools\

Syntax

Execute a ferramenta na linha de comando.

xsd file.xdr [-outputdir:directory][/parameters:file.xml]
xsd file.xml [-outputdir:directory] [/parameters:file.xml]
xsd file.xsd {/classes | /dataset} [/element:element]
             [/enableLinqDataSet] [/language:language]
                          [/namespace:namespace] [-outputdir:directory] [URI:uri]
                          [/parameters:file.xml]
xsd {file.dll | file.exe} [-outputdir:directory] [/type:typename [...]][/parameters:file.xml]

Dica

Para as ferramentas do .NET Framework funcionarem corretamente, você deverá configurar corretamente suas variáveis de ambiente Path, Include e Lib. Defina essas variáveis de ambiente executando SDKVars.bat, que está localizado no diretório <SDK>\<versão>\Bin. SDKVars.bat deve ser executado em todo shell de comando.

Argumento

Argument Descrição
file.extension Especifica o arquivo de entrada para ser convertido. Você deve especificar a extensão como uma das seguintes: .xdr, .xml, .xsd, .dll ou .exe.

Se você especificar um arquivo de esquema XDR (extensão .xdr), o Xsd.exe converterá o esquema XDR em um esquema XSD. O arquivo de saída tem o mesmo nome que o esquema XDR, mas com a extensão .xsd.

Se você especificar um arquivo XML (extensão .xml), o Xsd.exe deduzirá um esquema dos dados no arquivo e produzirá um esquema XSD. O arquivo de saída tem o mesmo nome que o arquivo XML, mas com a extensão .xsd.

Se você especificar um arquivo de esquema XML (extensão .xsd), o Xsd.exe gerará o código de origem para objetos em runtime que correspondem ao esquema XML.

Se você especificar um arquivo de assembly de runtime (extensão .exe ou .dll), o Xsd.exe gerará esquemas para um ou mais tipos nesse assembly. Você pode usar a opção /type para especificar os tipos para os quais gerar esquemas. Os esquemas de saída são nomeados schema0.xsd, schema1.xsd e assim por diante. O Xsd.exe produzirá vários esquemas somente se os determinados tipos especificarem um namespace usando o atributo personalizado XMLRoot.

Opções gerais

Opção Descrição
/h[elp] Exibe sintaxe de comando e opções para a ferramenta.
/o[utputdir]:diretório Especifica o diretório para arquivos de saída. Esse argumento pode aparecer somente uma vez. O padrão é o diretório atual.
/? Exibe sintaxe de comando e opções para a ferramenta.
/p[arameters]:arquivo.xml As opções de leitura para vários modos de operação do arquivo .xml especificado. A forma curta é /p:. Para obter mais informações, consulte a seção Comentários.

Opções de arquivo XSD

Você deve especificar somente uma das seguintes opções para arquivos .xsd.

Opção Descrição
/c[lasses] Gera classes que correspondem ao esquema especificado. Para ler dados XML em um objeto, use o método XmlSerializer.Deserialize.
/d[ataset] Gera uma classe derivada de DataSet que corresponde ao esquema especificado. Para ler dados XML na classe derivada, use o método DataSet.ReadXml.

Você também pode especificar qualquer uma das seguintes opções para arquivos .xsd.

Opção Descrição
/e[lement]:elemento Especifica o elemento no esquema para o qual gerar código. Por padrão, todos os elementos são tipados. Você pode especificar esse argumento mais de uma vez.
/enableDataBinding Implementa a interface INotifyPropertyChanged em todos os tipos gerados para habilitar a associação de dados. A forma curta é /edb.
/enableLinqDataSet (Forma abreviada: /eld.) Especifica que o DataSet gerado pode ser consultado usando LINQ to DataSet. Essa opção é usada quando a opção /dataset também está especificada. Para obter mais informações, consulte Visão geral do LINQ to DataSet e Consultando DataSets tipados. Para obter mais informações sobre o uso do LINQ, confira LINQ (consulta integrada à linguagem) – C# ou LINQ (consulta integrada à linguagem) – Visual Basic.
/f[ields] Gera apenas campos. Por padrão, propriedades com campos de suporte são geradas.
/l[anguage]:linguagem Especifica a linguagem de programação a ser usada. Escolha CS (C#, que é o padrão), VB (Visual Basic), JS (JScript), ou VJS (Visual J#). Você também pode especificar um nome totalmente qualificado para uma classe implementando System.CodeDom.Compiler.CodeDomProvider
/n[amespace]:namespace Especifica o namespace de runtime para os tipos gerados. O namespace padrão é Schemas.
/nologo Suprime o banner.
/order Gera identificadores de pedido explícito em todos os membros de partícula.
/o[ut]:directoryName Especifica o diretório de saída no qual colocar os arquivos. O padrão é o diretório atual.
/u[ri]:uri Especifica o URI para os elementos no esquema para o qual gerar código. Esse URI, se houver, aplica-se a todos os elementos especificados com a opção /element.

Opções de arquivo DLL e EXE

Opção Descrição
/t[ype]:nomedotipo Especifica o nome do tipo para o qual criar um esquema. Você pode especificar vários argumentos de tipo. Se typename não especificar um namespace, o Xsd.exe corresponderá todos os tipos no assembly com o tipo especificado. Se typename especificar um namespace, somente esse tipo terá uma correspondência. Se typename terminar com um caractere de asterisco (*), a ferramenta corresponderá todos os tipos que começam com a cadeia de caracteres antes do *. Se você omitir a opção /type, o Xsd.exe gera esquemas para todos os tipos no assembly.

Comentários

A tabela a seguir mostra as operações que o Xsd.exe realiza.

Operação Descrição
XDR to XSD Gera um esquema XML de um arquivo de esquema de dados XML reduzidos. XDR é um formato anterior do esquema baseado em XML.
XML to XSD Gera um esquema XML de um arquivo XML.
XSD to DataSet Gera classes DataSet de common language runtime de um arquivo de esquema XSD. As classes geradas fornecem um modelo de objeto ideal para os dados XML regulares.
XSD para classes Gera classes de runtime de um arquivo de esquema XSD. As classes geradas podem ser usadas em conjunto com System.Xml.Serialization.XmlSerializer para ler e escrever código XML que segue o esquema.
Classes para XSD Gera um esquema XML de um tipo ou tipos em um arquivo de assembly de runtime. O esquema gerado define o formato XML usado pelo XmlSerializer.

O Xsd.exe somente permite que você manipule esquemas de XML que seguem a linguagem XSD (linguagem de definição de esquema XML) proposta pelo World Wide Web Consortium (W3C). Para obter mais informações sobre a proposta de definição do Esquema XML ou o padrão XML, consulte https://w3.org.

Configurando opções com um arquivo XML

Ao usar a opção /parameters, você pode especificar um único arquivo XML que define várias opções. As opções que você define dependem de como você está usando a ferramenta XSD.exe. As escolhas incluem gerar esquemas, arquivos de código ou arquivos de código que incluem recursos de DataSet. Por exemplo, você pode definir o elemento <assembly> para o nome de um executável (.exe) ou arquivo de biblioteca de tipos (.dll) ao gerar um esquema, mas não ao gerar um arquivo de código. O XML a seguir mostra como usar o elemento <generateSchemas> com um executável especificado:

<!-- This is in a file named GenerateSchemas.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
   <assembly>ConsoleApplication1.exe</assembly>
</generateSchemas>
</xsd>

Se o XML anterior estiver contido em um arquivo chamado GenerateSchemas.xml, use a opção /parameters digitando o seguinte no prompt de comando e pressionando Enter:

 xsd /p:GenerateSchemas.xml

Por outro lado, se você estiver gerando um esquema para um único tipo localizado no assembly, poderá usar o seguinte XML:

<!-- This is in a file named GenerateSchemaFromType.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
   <type>IDItems</type>
</generateSchemas>
</xsd>

Mas para usar o código precedente, você também deverá fornecer o nome do assembly no prompt de comando. Insira o seguinte em um prompt de comando (supondo que o arquivo XML se chame GenerateSchemaFromType.xml):

xsd /p:GenerateSchemaFromType.xml ConsoleApplication1.exe

Você deve especificar somente uma das seguintes opções para o elemento <generateSchemas>.

Elemento Descrição
<assembly> Especifica um assembly do qual gerar o esquema.
<tipo> Especifica um tipo encontrado em um assembly para o qual gerar um esquema.
<xml> Especifica um arquivo XML para o qual gerar um esquema.
<xdr> Especifica um arquivo XDR para o qual gerar um esquema.

Para gerar um arquivo de código, use o elemento <generateClasses>. O exemplo a seguir gera um arquivo de código. Observe que dois atributos também são mostrados e permitem definir a linguagem de programação e o namespace do arquivo gerado.

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateClasses language='VB' namespace='Microsoft.Serialization.Examples'/>
</xsd>
<!-- You must supply an .xsd file when typing in the command line.-->
<!-- For example: xsd /p:genClasses mySchema.xsd -->

As opções que você pode definir para o elemento <generateClasses> incluem o seguinte.

Elemento Descrição
<element> Especifica um elemento no arquivo .xsd para o qual gerar código.
<schemaImporterExtensions> Especifica um tipo derivado de uma classe SchemaImporterExtension.
<schema> Especifica um arquivo de esquema XML para o qual gerar um código. Vários arquivos do Esquema XML podem ser especificados usando vários elementos <schema>.

A tabela a seguir mostra os atributos que também podem ser usados com o elemento <generateClasses>.

Atributo Descrição
Linguagem Especifica a linguagem de programação a ser usada. Escolha CS (C#, o padrão), VB (Visual Basic), JS (JScript), ou VJS (Visual J#). Você também pode especificar um nome totalmente qualificado para uma classe que implementa CodeDomProvider
namespace Especifica o namespace para o código gerado. O namespace deve estar em conformidade com os padrões CLR (por exemplo, sem caracteres de espaço ou barra invertida).
opções Um dos seguintes valores: none, properties (gera propriedades em vez de campos públicos), order ou enableDataBinding (consulte as opções /order e /enableDataBinding na seção anterior Opções de arquivo XSD).

Você também pode controlar como o código do DataSet é gerado usando o elemento <generateDataSet>. O XML a seguir especifica que o código gerado usa estruturas DataSet (como a classe DataTable) para criar um código do Visual Basic para um elemento especificado. As estruturas de DataSet geradas darão suporte a consultas LINQ.

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
    <generateDataSet language='VB' namespace='Microsoft.Serialization.Examples' enableLinqDataSet='true'>
    </generateDataSet>
</xsd>

As opções que você pode definir para o elemento <generateDataSet> incluem o seguinte.

Elemento Descrição
<schema> Especifica um arquivo de esquema XML para o qual gerar um código. Vários arquivos do Esquema XML podem ser especificados usando vários elementos <schema>.

A tabela a seguir mostra os atributos que podem ser usados com o elemento <generateDataSet>.

Atributo Descrição
enableLinqDataSet Especifica que o DataSet gerado pode ser consultado usando LINQ to DataSet. O valor padrão é false.
Linguagem Especifica a linguagem de programação a ser usada. Escolha CS (C#, o padrão), VB (Visual Basic), JS (JScript), ou VJS (Visual J#). Você também pode especificar um nome totalmente qualificado para uma classe que implementa CodeDomProvider
namespace Especifica o namespace para o código gerado. O namespace deve estar em conformidade com os padrões CLR (por exemplo, sem caracteres de espaço ou barra invertida).

Há atributos que você pode definir no elemento <xsd> de nível superior. Essas opções podem ser usadas com qualquer um dos elementos filho (<generateSchemas>, <generateClasses> ou <generateDataSet>). O código XML a seguir gera código para um elemento denominado "IDItems" no diretório de saída denominado "MyOutputDirectory".

<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/' output='MyOutputDirectory'>
<generateClasses>
    <element>IDItems</element>
</generateClasses>
</xsd>

A tabela a seguir mostra os atributos que também podem ser usados com o elemento <xsd>.

Atributo Descrição
output O nome de um diretório onde o esquema ou arquivo de código gerado será colocado.
nologo Suprime o banner. Definir como true ou false.
ajuda Exibe sintaxe de comando e opções para a ferramenta. Definir como true ou false.

Exemplos

O comando a seguir gera um esquema XML de myFile.xdr e salva-o no diretório atual.

xsd myFile.xdr

O comando a seguir gera um esquema XML de myFile.xml e salva-o no diretório especificado.

xsd myFile.xml /outputdir:myOutputDir

O comando a seguir gera um conjunto de dados que corresponde ao esquema especificado na linguagem C# e salva-o como XSDSchemaFile.cs no diretório atual.

xsd /dataset /language:CS XSDSchemaFile.xsd

O comando a seguir gera esquemas XML para todos os tipos no assembly myAssembly.dll e salva-os como schema0.xsd no diretório atual.

xsd myAssembly.dll

Confira também