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 就很简单了。
我有这个 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 就很简单了。