XSD架构:重写基complexType的继承元素
本文关键字:继承 元素 complexType 架构 重写 XSD | 更新日期: 2023-09-27 17:59:20
我们已经开始使用模式为我们生成C#类,我基本上是在尝试复制一个覆盖了从基类继承的成员的类。我已经做了很多搜索,对XSD还很陌生,所以我不知道我是做错了还是不可能。下面是一个我正在努力实现的简单例子。
<xs:complexType name="ClientBase" abstract="true">
<xs:sequence>
<xs:element name="Company" type="CompanyBase" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="CompanyBase" abstract="true">
<xs:attribute name="Id" type="xs:int" use="required" />
</xs:complexType>
<xs:complexType name="Company">
<xs:complexContent>
<xs:extension base="CompanyBase">
<xs:attribute name="PartnerId" type="xs:int" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Client">
<xs:complexContent>
<xs:extension base="ClientBase">
<xs:sequence>
<!-- error occurs here -->
<xs:element name="Company" type="Company" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
这显然不起作用,因为它在我的客户端类型上爆炸了,给了我一个错误,即"元素‘Company’的多重定义导致内容模型变得模糊"。
我的目标是最终得到代表这一点的东西。
public abstract class CompanyBase
{
public int Id { get; set; }
}
public class Company : CompanyBase
{
public int PartnerId { get; set; }
}
public abstract class ClientBase
{
public CompanyBase[] Company { get; set; }
}
public class Client : ClientBase
{
new public Company[] Company { get; set; }
}
如有任何帮助,我们将不胜感激。
名为Client的复杂类型,您将其指定为具有名为Company元素,它扩展了ClientBase,后者已经包含名为Company[/strong>的元素(类型为CompanyBase)。因此,元素名称中存在冗余。
另外:对于您的复杂类型,我建议在模式中遵循命名约定,明确它们是类型,而不是全局元素。也就是说,将复杂类型命名为[Typename]Type,而不是[Typename]。从长远来看,它使事情不那么令人困惑,并且还可以避免与全局元素的名称冲突。