Warum schlägt meine XML-Validierung anhand des Schemas fehl?

Ich muss eine XML-Datei anhand eines Schemas validieren. Die XML-Datei wird in Code generiert, und bevor ich sie speichere, muss sie überprüft werden, um korrekt zu sein.

Ich habe das Problem auf das Wesentliche reduziert, habe aber ein 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>

Schema:

<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: (Dieser Code stammt aus einer einfachen App, die ich zum Testen der Validierungslogik geschrieben habe. Die XML- und XSD-Dateien werden auf der Festplatte gespeichert und von dort gelesen. In der eigentlichen App befindet sich die XML-Datei bereits als XmlDocument im Speicher Objekt und die XSD würden von einem internen Webserver gelesen.)

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

Beim Ausführen des obigen Codes mit den oben definierten XML- und XSD-Dateien erhalte ich folgende Ausgabe:

Validating ... Error: Das Element 'MRIDSupportingData' im Namespace 'urn: GenericLabData' enthält ein ungültiges untergeordnetes Element 'MRIDNumber' im Namespace 'urn: GenericLabData'. Liste möglicher Elemente erwartet: 'MRIDNumber'. Validierung beendet

Was vermisse ich? Soweit ich das beurteilen kann, ist MRIDNumber MRIDNumber. Warum also der Fehler?

Die eigentliche XML-Datei ist viel größer als die XSD-Datei, aber sie schlägt am Anfang fehl, sodass ich das Problem auf fast nichts reduziert habe.

Jede Hilfe dazu wäre großartig.

Vielen Dank,
Keith

BTW, diese Dateien funktionieren:

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>

Schema:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage