Dlaczego sprawdzanie poprawności XML nie działa zgodnie ze schematem?

Muszę sprawdzić poprawność pliku XML na schemacie. Plik XML jest generowany w kodzie i zanim go zapiszę, muszę go zweryfikować, aby był poprawny.

Usunąłem problem do jego najprostszych elementów, ale mam problem.

XML:

<code><?xml version="1.0" encoding="utf-16"?>
<MRIDSupportingData xmlns="urn:GenericLabData">
  <MRIDNumber>MRIDDemo</MRIDNumber>
  <CrewMemberIdentifier>1234</CrewMemberIdentifier>
  <PrescribedTestDate>1/1/2005</PrescribedTestDate>
</MRIDSupportingData>
</code>

Schemat:

<code><?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="urn:GenericLabData" targetNamespace="urn:GenericLabData" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xs:element name="MRIDSupportingData">
   <xs:complexType> 
      <xs:sequence>
        <xs:element name="MRIDNumber" type="xs:string" /> 
        <xs:element minOccurs="1" name="CrewMemberIdentifier" type="xs:string" />
      </xs:sequence>
   </xs:complexType>
  </xs:element>
</xs:schema>  
</code>

ValidationCode: (Ten kod pochodzi z prostej aplikacji, którą napisałem, aby przetestować logikę walidacji. Pliki XML i XSD są przechowywane na dysku i są odczytywane stamtąd. W rzeczywistej aplikacji plik XML byłby w pamięci już jako XmlDocument obiekt i XSD będą odczytywane z wewnętrznego serwera WWW.)

<code>private void Validate()
{
  XmlReaderSettings settings = new XmlReaderSettings();
  settings.ValidationType = ValidationType.Schema;
  //settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
  //settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
  //settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
  settings.ValidationEventHandler += new ValidationEventHandler(OnValidate);

  XmlSchemaSet schemas = new XmlSchemaSet();
  settings.Schemas = schemas;
  try
  {
    schemas.Add(null, schemaPathTextBox.Text);
    using (XmlReader reader = XmlReader.Create(xmlDocumentPathTextBox.Text, settings))
    {
      validateText.AppendLine("Validating...");
      while (reader.Read()) ;
      validateText.AppendLine("Finished Validating");
      textBox1.Text = validateText.ToString();
    }
  }
  catch (Exception ex)
  {
    textBox1.Text = ex.ToString();
  }

}

StringBuilder validateText = new StringBuilder();
private void OnValidate(object sender, ValidationEventArgs e)
{
  switch (e.Severity)
  {
    case XmlSeverityType.Error:
      validateText.AppendLine(string.Format("Error: {0}", e.Message));
      break;
    case XmlSeverityType.Warning:
      validateText.AppendLine(string.Format("Warning {0}", e.Message));
      break;
  }
}
</code>

Podczas uruchamiania powyższego kodu z plikami XML i XSD zdefiniowanymi powyżej otrzymuję to wyjście:

Sprawdzanie poprawności ... Błąd: Element „MRIDSupportingData” w przestrzeni nazw „urn: GenericLabData” ma niepoprawny element podrzędny „MRIDNumber” w przestrzeni nazw „urn: GenericLabData”. Lista możliwych elementów oczekiwanych: „MRIDNumber”. Zakończono walidację

czego mi brakuje? O ile wiem, MRIDNumber ma numer MRIDNumber, więc dlaczego błąd?

Rzeczywisty plik XML jest znacznie większy, podobnie jak XSD, ale na samym początku się nie udaje, więc zmniejszyłem problem prawie do zera.

Każda pomoc w tym zakresie byłaby świetna.

Dziękuję Ci,
Keith

BTW, te pliki działają:

XML:

<code><?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
  <book genre="novel">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>
</code>

Schemat:

<code>  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">
  <xsd:element name="bookstore">
    <xsd:complexType>
      <xsd:sequence >
        <xsd:element name="book"  maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence >
              <xsd:element name="title" type="xsd:string"/>
              <xsd:element name="author">
                <xsd:complexType>
                  <xsd:sequence >
                    <xsd:element name="first-name"  type="xsd:string"/>
                    <xsd:element name="last-name" type="xsd:string"/>
                  </xsd:sequence> 
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="price"  type="xsd:decimal"/>
            </xsd:sequence> 
            <xsd:attribute name="genre" type="xsd:string"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>    
    </xsd:complexType>   
  </xsd:element>
</xsd:schema>
</code>

questionAnswers(2)

yourAnswerToTheQuestion