是否可以使用以下行为创建XML架构?我有一个XML文件,如下所示。我想根据Type的值公开或限制Object的属性。例如,如果Type =“Bike”,我可能想要公开仅与Bike相关的属性(即踏板,框架等)。如果Type =“Car”,我可能想要公开仅与Car相关的属性(即Make,Model,Miles等)。
<Objects>
<Object Type="Bike" Pedals="XXX" Frame="XXX" />
<Object Type="Car" Make="XXX" Model="XXX" Miles="XXX" />
</Objects>
提前感谢您的帮助。如果您有任何问题,请告诉我。
答案 0 :(得分:4)
我的理解是,这超出了使用xsd所能做的。此外,它使查询成为一场噩梦。首选方法(如果可能)是使用:
<vehicles>
<bike pedals="XXX" frame="XXX" />
<car make="XXX" model="XXX" miles="XXX" />
</vehicles>
car
和bike
可能在xsd中有一个共同的根vehicle
,但是它们自己的特定属性(在继承的属性之上)。
答案 1 :(得分:2)
我认为你在属性中填充了太多东西。像踏板和框架这样的东西应该是元素。
答案 2 :(得分:0)
我同意Marc您正在尝试做的事情超出了W3C XML-Schema的功能。我也同意你的数据模型只是有点过载/模糊而无用。但是,如果您在此问题上别无选择,那么Schematron或Relax-NG可能会提供可行的解决方案。
答案 3 :(得分:0)
是的,您只需使用xsi:type
而不是Type
来获取XSD多态性(并且在模式中,从常见类型派生类型):
<Objects>
<Object xsi:type="Bike" Pedals="XXX" Frame="XXX" />
<Object xsi:type="Car" Make="XXX" Model="XXX" Miles="XXX" />
</Objects>
有关详细信息,请参阅XML Schema Part 0: Primer。它有example schema,其中 USAddress 和 UKAddress 类型来自地址。使用xsi:type
进一步向下example instance。