いくつかのサブクラスが実装する基本クラスがある状況があります。基本クラスは、システムが必要とする特定のプロパティをサブクラスに含めるように強制するために使用されます。
とにかく、プログラムでサブクラスのXSDを生成したいのですが、基本クラスは内部的な理由で使用され、クライアントにとって実際には意味がないため、基本クラスのプロパティをサブクラスXSDに表示したいと思います。 。
たとえば、現在私が持っている場合:
class Foo {
public string Id { get; set; }
}
class Bar : Foo {
public string Name { get; set; }
}
そして、私はそれを次のコードで実行します:
private string ExtractXsdFromType()
{
Type type = typeof(Bar);
XmlReflectionImporter importer = new XmlReflectionImporter();
XmlTypeMapping mapping = importer.ImportTypeMapping(type);
XmlSchemas xmlSchemas = new XmlSchemas();
XmlSchemaExporter xmlSchemaExporter = new XmlSchemaExporter(xmlSchemas);
using (var writer = new StringWriter())
{
xmlSchemaExporter.ExportTypeMapping(mapping);
xmlSchemas[0].Write(writer);
return XElement.Parse(writer.ToString()).ToString();
}
}
次に、次のようなXSDを生成します。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Bar" nillable="true" type="Bar" />
<xs:complexType name="Bar">
<xs:complexContent mixed="false">
<xs:extension base="Foo">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Foo" abstract="true">
<xs:attribute name="Id" type="xs:int" use="required" />
</xs:complexType>
</xs:schema>
しかし、私は次のようなXSDを作成したいと思います。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Bar" nillable="true" type="Bar" />
<xs:complexType name="Bar">
<xs:complexContent mixed="false">
<xs:sequence>
<xs:attribute name="Id" type="xs:int" use="required" />
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
</xs:sequence>
</xs:complexContent>
</xs:complexType>
</xs:schema>
これが可能かどうか誰かが知っていますか?