我正在尝试将以下情况建模为XSD架构,但有点卡住并且不确定XSD是否支持我想要实现的目标。
我有两个复杂的元素,它们都应该是抽象的:
他们的关系:一个Session可以包含零个或多个SessionResults
然后我有其他复杂类型(非抽象):
我想要实现的是,当Session是RaceSession类型时,只允许RaceSessionResult元素作为SessionResult。随后,当Session被定义为TimedSession时,其SessionResult元素应为TimedSessionResult。
现在我无法在XSD中实现这一点。现在作为一种解决方法,我没有将SessionResult定义为Session的子元素列表。 Session作为TimedSession和RaceSession的基础,后两者分别只有TimeSessionResult或RaceSessionResult元素。
有没有办法实现我在XSD中所描述的内容?然后,目的是从中生成c#类。
这是C#相当于我正在尝试做的事情。
public class Event
{
public List<Session> Sessions { get; set; }
}
public abstract class Session
{
public string Weather { get; set; }
public List<SessionResult> SessionResults { get; set; }
}
public abstract class SessionResult
{
public int Position { get; set; }
}
public class RaceSession : Session
{
public new List<RaceSessionResult> SessionResults { get; set; }
}
public class TimedSession : Session
{
public new List<TimedSessionResult> SessionResults { get; set; }
}
public class RaceSessionResult : SessionResult
{
public int StartPosition { get; set; }
}
public class TimedSessionResult : SessionResult
{
public decimal BestLapTime { get; set; }
}
非常感谢任何投入!