Verwendung von XSDs mit Includes

Hier ist eine XSD:

<code><?xml version="1.0"?>
<xsd:schema 
elementFormDefault='unqualified' 
attributeFormDefault='unqualified' 
xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
>

  <xsd:simpleType name='TheSimpleType'>
    <xsd:restriction base='xsd:string' />
  </xsd:simpleType>
</xsd:schema>
</code>

Hier ist eine zweite XSD, die die obige enthält:

<code><?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema 
elementFormDefault='unqualified' 
attributeFormDefault='unqualified' 
xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
targetNamespace='a'
xmlns='a'
>

  <xsd:include schemaLocation='Include.xsd' />

  <xsd:element name = "TheElement" >
  <xsd:complexType>
  <xsd:attribute name="Code" type="TheSimpleType" use="required"/>
  </xsd:complexType>
  </xsd:element>
</xsd:schema>
</code>

Ich muss die (zweite) XSD in C # einlesen und:

Überprüfen Sie, ob es sich um eine gültige XSD handeltDokumente dagegen validieren.

Hier ist ein C # zum Einlesen der Schemata:

<code>    XmlSchemaSet schemaSet = new XmlSchemaSet();
    foreach (string sd in Schemas)
    {
        using (XmlReader r = XmlReader.Create(new FileStream(sd, FileMode.Open)))
        {
            schemaSet.Add(XmlSchema.Read(r, null));
        }
    }
    schemaSet.CompilationSettings = new XmlSchemaCompilationSettings();
    schemaSet.Compile();
</code>

Die .Compile () schlägt fehl, weil "Typ 'a: TheSimpleType' nicht deklariert ist oder kein einfacher Typ ist."

Es funktioniert jedoch, wenn entweder:

Der Namespace wird aus dem Schema entferntDer Namespace wird dem Include hinzugefügt.

Die Frage ist: Wie kann ich C # dazu bringen, es zu akzeptieren, ohne die Schemata zu bearbeiten?

Ich vermute, dass das Problem darin besteht, dass ich, obwohl ich beide Schemata in das XmlSchemaSet eingefügt habe, C # immer noch mitteilen muss, dass eines in dem anderen enthalten ist, d. H., Es hat sich nicht für sich selbst bewährt. In der Tat, wenn ich dem XmlSchemaSet nur das Haupt-XSD (und nicht das Include) mitteile (beide ohne (oder mit) Namespaces), dann ist "Type 'TheSimpleType' nicht deklariert oder kein einfacher Typ."

Das scheint also eine Frage zu sein, die das Auflösen einschließt: Wie ?!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage