Может ли 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 ответ
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>
Затем написать XSD 1.0 для этого XML-проекта просто.