Używanie XSD z dołączeniami
Oto 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>
Oto drugi XSD, który zawiera powyższy:
<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>
Muszę odczytać (drugi) XSD do C # i:
sprawdź, czy jest prawidłowym XSD iwaliduj dokumenty przeciwko niemu.Oto kilka C # do odczytania na schematach:
<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 () nie powiedzie się, ponieważ „Typ„ a: TheSimpleType ”nie jest zadeklarowany lub nie jest typem prostym.”
Jednak działa, jeśli:
przestrzeń nazw jest usuwana ze schematu lubprzestrzeń nazw zostanie dodana do włączenia.Pytanie brzmi: jak uzyskać C #, aby go zaakceptować bez edycji schematów?
Podejrzewam, że problem polega na tym, że chociaż umieściłem oba schematy w XmlSchemaSet, wciąż muszę powiedzieć C #, że jeden jest dołączony do drugiego, to znaczy, że sam go nie przepracował. Rzeczywiście, jeśli powiem XmlSchemaSet tylko o głównym XSD (a nie o włączeniu) (zarówno bez (lub z) przestrzeniami nazw), to „Typ„ TheSimpleType ”nie jest zadeklarowany lub nie jest typem prostym.”
Zatem wydaje się, że jest to pytanie o rozwiązanie, które obejmuje: jak ?!