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.
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.