我有这个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)。
答案 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非常简单。