2010-03-22 38 views
2

请考虑以下三种.NET类型:我有一个接口,一个抽象类和一个具体类。我的问题是如何编写XML模式以包含来自接口和抽象类的属性。继承和实现.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> 

回答

1

我真的不明白你怎么可能实际上是在XML模式做到这一点。 XML模式确实有继承 - 但只有单一的继承,并且它不知道接口等。

当前的XML模式没有办法让一个类(复杂类型)基于基类和at同时“从第二个”接口“类继承” - XML模式没有这些概念,对不起。

您可能可以重新设计您的继承 - IStartable > Vehicle > Car - 然后您可以使用XML架构对其进行建模。使用当前的XML模式标准,当前的设置可能无法实现。