Using the XsdInference Namespace

Like XmlDiffPatch, XsdInference can be added to your Global Assembly Cache for your convenience, and you can add it as a reference in your Visual Studio .NET project or Makefile.

The XsdInference namespace contains one class, Infer. Infer has a single overloaded method, InferSchema( ), which returns an XmlSchemaCollection. One overload takes just an XmlReader, and the other one takes an XmlReader and an XmlSchemaCollection.

Given an XmlReader for a particular XML document, you can create an XML Schema definition and write it to the console using the code in Example 14-1.

Example 14-1. Using the XsdInference assembly
using System;
using System.Xml;
using System.Xml.Schema;

using Microsoft.XsdInference;

public class XsdInfer {
  public static void Main(string [ ] args) {
    try {
      XmlSchemaCollection schemas = null;
      Infer infer = new Infer( );
      XmlTextReader reader = new XmlTextReader(args[0]);
      schemas = infer.InferSchema(reader);
      foreach (XmlSchema schema in schemas) {
        schema.Write(Console.Out);
      }
    } catch (Exception e) {
      Console.Error.WriteLine(e);
    }
  }
}

The usage of the Infer class is fairly straightforward. In Example 14-1, you can see that an instance of Infer is created, and its Infer( ) method is called. Infer( ) returns an XmlSchemaCollection.

Example 14-2 shows another pattern of usage for the Infer class, in which several XML documents are used to progressively refine an XML Schema. The changed lines are highlighted.

Example 14-2. Using Infer to ...

Get .NET & XML now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.