Am trying to validate a XML document against a schema. The document validates
100% if I use XML Spy. However if I use the MSXML2.DOMDocument40 and MSXML2.XMLSchemaCache40
objects the following happens.

PLease help I can't find anything on the microsoft sites...

VB Code Example:
Private Sub Command1_Click()
Dim oXML As New MSXML2.DOMDocument40
Dim oSchema As New MSXML2.XMLSchemaCache40

oXML.async = False
oXML.validateOnParse = True

If oXML.Load("c:\person.xml") Then

oSchema.Add "uri:NessiScreen", "c:\webprojects\bfa\newnessi\NessiScreenSchema1.xsd"

!!!!!!!!!!!!!!!!!!!!!!
Exception (Error):
-2147467259
Incorrect definition for the root element in schema.
!!!!!!!!!!!!!!!!!!!!!!

Set oXML.schemas = oSchema

oXML.Validate

Else
MsgBox "Fail!" & vbCrLf & oXML.parseError.reason
End If
Stop

End Sub

Schema Example:
<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XML Spy v3.5 NT (http://www.xmlspy.com)-->
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified">
<xsd:element name="changed" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object was changed [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="checkedvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object checked value for radio button display [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="datatype">
<xsd:annotation>
<xsd:documentation>Object datatype [byte enum]</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:byte">
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
<xsd:enumeration value="3"/>
<xsd:enumeration value="4"/>
<xsd:enumeration value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="defaultvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object default value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="displaysequence" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Object display order [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="displaysize" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Object screen display size [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="field">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="mandatory"/>
<xsd:element ref="datatype"/>
<xsd:element ref="size"/>
<xsd:element ref="visible"/>
<xsd:element ref="lookupid"/>
<xsd:element ref="mode"/>
<xsd:element ref="indexed"/>
<xsd:element ref="fieldname"/>
<xsd:element ref="fielddesc"/>
<xsd:element ref="validate"/>
<xsd:element ref="mask"/>
<xsd:element ref="originalvalue"/>
<xsd:element ref="defaultvalue"/>
<xsd:element ref="newvalue"/>
<xsd:element ref="previousvalue"/>
<xsd:element ref="minvalue"/>
<xsd:element ref="maxvalue"/>
<xsd:element ref="displaysequence"/>
<xsd:element ref="validationscript"/>
<xsd:element ref="displaysize"/>
<xsd:element ref="validchars"/>
<xsd:element ref="checkedvalue"/>
<xsd:element ref="uncheckedvalue"/>
<xsd:element ref="changed"/>
<xsd:element ref="summaryscreen"/>
<xsd:element ref="x1"/>
<xsd:element ref="x2"/>
<xsd:element ref="y1"/>
<xsd:element ref="y2"/>
</xsd:sequence>
<xsd:attribute name="code" type="xsd:integer" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="fielddesc" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Field display description [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="fieldname" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Field internal reference [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="fields">
<xsd:annotation>
<xsd:documentation>Collection of fields for the selected screen</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="field" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="http_reference" type="xsd:string">
<xsd:annotation>
<xsd:documentation>URL of relevant object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="indexed" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object key [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="lookupid" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object lookup list id [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mandatory" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object required [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mask" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object display mask [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="maxvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object maximum value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="minvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object minimum value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="mode">
<xsd:annotation>
<xsd:documentation>Edit mode of the object [byte enum]</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:byte">
<xsd:enumeration value="0"/>
<xsd:enumeration value="1"/>
<xsd:enumeration value="2"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="newvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object new value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="originalvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object original value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="x1" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Left coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="x2" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Left + Width coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="y1" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Top coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="y2" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Top + Height coord of object</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="previousvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object previous value [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="processid" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Workflow process that the screen must follow</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screen">
<xsd:annotation>
<xsd:documentation>Root of data screen</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="screenname"/>
<xsd:element ref="screendesc"/>
<xsd:element ref="processid"/>
<xsd:element ref="workitemtypeid"/>
<xsd:element ref="mode"/>
<xsd:element ref="fields"/>
<xsd:element ref="screenpic"/>
</xsd:sequence>
<xsd:attribute name="code" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="screendesc" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Screen display description</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screenname" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Internal screen reference</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="screenpic">
<xsd:annotation>
<xsd:documentation>Screen picture structure</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="x1"/>
<xsd:element ref="x2"/>
<xsd:element ref="y1"/>
<xsd:element ref="y2"/>
<xsd:element ref="http_reference"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="size" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>object data length [integer]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="summaryscreen" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object is part of summary screen [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="uncheckedvalue" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object unchecked value for radio button display [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validate" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object Validation required [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validationscript" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object custom validation script [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="validchars" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Object valid characters allowed [string]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="visible" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Object visible [boolean]</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="workitemtypeid" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>WorkItemType that the screen data maps to</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>