Мне дали задание создать файл XSD, который проверяет данные о промысле, поступающие в файлы XML.Используемые данные перечисляют всю рыбу, которая была поймана во время поездки на рыбалку (со всеми подробностями) во время поездки на рыбалку, такой как код вида, длина, пол и т. Д. Первая часть проверки состоит в том, чтобы проверить, что код вида является действительными я сделал эту проверку, перечислив весь действительный sp_code в перечислении и проверив sp_code по этому списку.Ниже приведен улов из файла xml
<CATCH>
<CATCH_ID>1</CATCH_ID>
<CATCH_DATE>2017-06-02T05:27:49Z</CATCH_DATE>
<SP_CODE>ALB</SP_CODE>
<LEN>103</LEN>
<SEX_CODE>U</SEX_CODE>
<LAT>-2033.126</LAT>
<LON>+17602.598</LON>
<CATCH>
Первая часть, которую мне удалось сделать, это проверить, является ли введенный SP_CODE действительным:
<xs:element name="CATCH" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="SP_CODE" minOccurs="0">
<xs:simpleType>
<xs:restriction base="SP_ENUM">
<xs:assertion/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LEN" type="xs:integer" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="SP_ENUM">
<xs:restriction base="xs:string">
<xs:enumeration value="ALB"/>
<xs:enumeration value="ALO"/>
<xs:enumeration value="ALX"/>
<xs:enumeration value="BAR"/>
<xs:enumeration value="BET"/>
</xs:restriction>
</xs:simpleType>
Однако есть вторая частьэто немного испортило мою голову (новичок в этой проверке xsd. Проблема в том, что в зависимости от разновидности_кода есть диапазон длины, например, если sp_code - BET - для большого глаза у тунца длина LENGTH должна быть в диапазоне 50-200 см,иначе, если SP_CODE - ALB - для albacore, тогда длина должна быть в диапазоне 50-140 см и т. д. Это простое бизнес-правило, которое я хотел бы проверить в своем xsd. Я выполняю поиск и показываю, что xsd 1.1Утверждения - один из способов, но просто неясно, как их можно использовать для решения этой проблемы. Любой совет?