Эквивалент XSD Assert в версии 1.0
Я был очень взволнован, когда обнаружил возможность утверждения XML/XSD, а затем заметил, что это версия 1.1, которую, к сожалению, мы не можем использовать.
Есть ли способ достижения утверждений с 1.0?
Например, мы бы хотели, чтобы ограничение XSD ограничивалось значениями, указанными в отдельном элементе в документе XML, а не в схеме XSD.
С простым ограничением это может выглядеть так:
<xs:element name="recordset">
<xs:complexType>
<xs:sequence>
<xs:element name="record" type="record" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="record">
<xs:sequence>
<xs:element name="tag" type="recordTag" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="recordTag">
<xs:restriction base="xs:string">
<xs:enumeration value="tag1" />
<xs:enumeration value="tag2" />
<xs:enumeration value="tag3" />
</xs:restriction>
</xs:simpleType>
Нам бы хотелось, чтобы ограничения тегов были указаны в XML, и эти утверждения представляли собой способ проверки этих значений. Учитывая приведенное ниже изменение, элемент xs:assert мог бы войти в тип набора записей, сравнивая содержимое тега из записи с содержимым tagDefinitions.
<xs:element name="recordset">
<xs:complexType>
<xs:sequence>
<xs:element name="tags" type="tagDefinitions" minOccurs="1" maxOccurs="1" />
<xs:element name="record" type="record" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="record">
<xs:sequence>
<xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="tagDefinitions">
<xs:sequence>
<xs:element name="tag" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
Это все еще возможно в XML 1.0?