Usando XSDs com inclui

Aqui está um 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>

Aqui está um segundo XSD que inclui o anterior:

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

Eu preciso ler o (segundo) XSD em C # e:

verifique se é um XSD válido evalidar documentos contra ele.

Aqui está algum C # para ler nos esquemas:

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

O .Compile () falha porque "Tipo 'a: TheSimpleType' não está declarado ou não é um tipo simples."

No entanto, funciona se:

o namespace é removido do esquema ouo namespace é adicionado ao include.

A pergunta é: como faço para que o C # aceite isso sem editar os esquemas?

Eu suspeito que o problema é que, embora eu tenha colocado os dois esquemas no XmlSchemaSet, eu ainda preciso dizer ao C # que um está incluído no outro, ou seja, ele não resolveu por si mesmo. De fato, se eu disser apenas o XmlSchemaSet sobre o XSD principal (e não o include) (ambos sem (ou com) namespaces), então "Type 'TheSimpleType' não é declarado ou não é um tipo simples."

Assim, esta parece ser uma questão sobre a resolução inclui: como ?!

questionAnswers(4)

yourAnswerToTheQuestion