Использование XSD с включениями
Вот 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>
Вот второй XSD, который включает в себя приведенный выше:
<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>
Мне нужно прочитать (второй) XSD в C # и:
check that it is a valid XSD, and validate documents against it.Вот некоторые C # для чтения в схемах:
<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>
.Compile () завершается ошибкой, потому что "Type" a: TheSimpleType & apos; не объявлен или не является простым типом. & quot;
Тем не менее, это работает, если либо:
the namespace is removed from the schema, or the namespace is added to the include.Вопрос в том, как заставить C # принять его без редактирования схем?
Я подозреваю, что проблема в том, что, хотя я поместил обе схемы в XmlSchemaSet, мне все еще нужно сказать C #, что одна включена в другую, то есть она не сработала сама для себя. Действительно, если я расскажу XmlSchemaSet только об основном XSD (а не о включаемом) (оба без (или с) пространствами имен), тогда «Тип» TheSimpleType ». не объявлен или не является простым типом. & quot;
Таким образом, кажется, что вопрос о разрешении включает в себя: как ?!