XSD 1.0 可以要求基于元素类型的属性吗?

Can XSD 1.0 require attributes based upon the type of an element?

我有这个 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<vehicle_list>
    <vehicle id="v001">
        <type registration="ABC-XYZ" year="2010">car</type>
        <spent_fuel>8</spent_fuel>
        <constructor>XPTO</constructor>
    </vehicle>  
    <vehicle id="v002">
        <type>bike</type>
        <spent_fuel>0</spent_fuel>
        <constructor>XIMA</constructor>
    </vehicle>
    <vehicle id="v003">
        <type>boat</type>
        <spent_fuel>40</spent_fuel>
        <constructor>AnyBoat</constructor>
    </vehicle>
</vehicle_list>

现在我需要(出于研究目的)制作一个 XSD,其中我使用枚举来限制车辆类型(汽车、自行车和船)并定义规则,如果type 是 "car" 那么我需要有两个属性:registration 和 year.

我应该怎么做?

我一直在阅读,但找不到任何可以帮助我找到解决方案的内容。

我仅限于 XSD 1.0(不是 XSD 1.1)。

XSD 1.0 无法表达基于元素值的约束。为此,您需要 XSD 1.1 断言,并且您在评论中声明您只能使用 XSD 1.0.

但是,实际上,如果您修复了 XML 设计,则不需要 XSD 1.1。与其拥有需要通过 type 元素进一步规范的通用 vehicle,不如将 type 元素值提升为适当的元素本身。

也就是说:

<?xml version="1.0" encoding="UTF-8"?>
<vehicle_list>
    <car id="v001" registration="ABC-XYZ" year="2010">
        <spent_fuel>8</spent_fuel>
        <constructor>XPTO</constructor>
    </car>  
    <bike id="v002">
        <spent_fuel>0</spent_fuel>
        <constructor>XIMA</constructor>
    </bike>
    <boat id="v003">
        <spent_fuel>40</spent_fuel>
        <constructor>AnyBoat</constructor>
    </boat>
</vehicle_list>

然后为这个 XML 设计编写一个 XSD 1.0 就很简单了。