【问题标题】:XML Schema for a .NET type that inherits and implements用于继承和实现的 .NET 类型的 XML 架构
【发布时间】:2011-01-30 11:18:06
【问题描述】:

请考虑以下三种 .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>

【问题讨论】:

    标签: .net inheritance interface xsd abstract-class


    【解决方案1】:

    我真的不明白你是如何在 XML 模式中实际做到这一点的。 XML 模式确实有继承——但只有单继承,而且它不知道接口等。

    在当前的 XML 模式中,没有办法让一个类(复杂类型)既基于基类,又从第二个“接口”类“继承”——XML 模式只是没有这些概念,对不起。

    您可以稍微重新设计您的继承 - IStartable &gt; Vehicle &gt; Car - 然后您可以在 XML 模式中对其进行建模。当前的设置可能无法使用当前的 XML 模式标准。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2016-06-02
      • 2010-10-08
      相关资源
      最近更新 更多