请考虑以下三种.NET类型:我有一个接口,一个抽象类和一个具体的类。我的问题是如何编写XML Schema以包含接口和抽象类的属性。
public interface IStartable
{
bool RequiresKey { get; set; }
void Start(object key);
}
public abstract class Vehicle
{
uint WheelCount { get; set; }
}
public class Car : Vehicle, IStartable
{
public bool RequiresKey { get; set; }
public string Make { get; set; }
publilc string Model { get; set; }
public Car() {}
public void Start(object key)
{
// start car with key
}
}
我不知道如何完成这个架构:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="cars"
xmlns="cars"
xmlns:c="cars">
<!-- How do I get car to have vehicle's wheelcount
AND IStartable's RequiresKey? -->
<xs:element name="Car" type="c:Car" />
<xs:complexType name="Car">
<xs:complexContent>
<xs:extension base="c:Vehicle">
<xs:group ref=c:CarGroup" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:group name="CarGroup">
<xs:sequence>
<xs:element name="Make" type="xs:token" />
<xs:element name="Model" type="xs:token" />
</xs:sequence>
</xs:group>
<xs:complexType name="Vehicle">
<xs:sequence>
<xs:element name="WheelCount" type="xs:unsignedInt" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="IStartable">
<xs:sequence>
<xs:element name="RequiresKey" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 0 :(得分:1)
我真的不知道如何在XML模式中实际执行此操作。 XML模式确实具有继承 - 但只有单继承,并且它不了解接口等。
当前的XML模式中没有办法让类(复杂类型)基于基类,同时“继承”来自第二个“接口”类 - XML模式只是没有那些概念,抱歉。
您可以稍微重新设计一下继承 - IStartable > Vehicle > Car
- 然后您可以在XML模式中对其进行建模。使用当前的XML模式标准可能无法实现当前设置。