XSD 1.0可以根据元素的类型要求属性吗?

时间:2016-05-21 23:39:12

标签: xml xsd xsd-1.0

我有这个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,其中我使用枚举来限制车辆类型(汽车,自行车和船)并定义规则,如果类型是“汽车”那么我需要有两个属性:注册和年份。

我应该如何做到这一点?

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

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

1 个答案:

答案 0 :(得分:1)

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

但是,如果你修复了你的XML设计,那么你真的不需要XSD 1.1。不需要通过vehicle元素进行进一步规范的通用type,只需将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非常简单。