У меня есть xs: уникальное объявление в схеме. Это хорошо работает. Но когда я заменяю элемент, который является ключом, он больше не работает.
Есть ли что-то, что гарантирует сохранение уникального ключа при замене?
Например, у меня есть этот xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<el id="1"/>
<el id="2"/>
</root>
и эта схема:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="typeel">
<xs:attribute name="id"/>
</xs:complexType>
<xs:element name="el" type="typeel"/>
<xs:element name="root">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="el"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="idgoooood">
<xs:selector xpath="el"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:schema>
Это очень хорошая работа.
Но, если я добавлю в схему:
<xs:element name="el-bis" type="typeel" substitutionGroup="el"/>
Я могу написать свой xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<el id="1"/>
<el id="2"/>
<el-bis id="3"/>
</root>
Очень хорошо. Но, к сожалению, я могу написать также:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<el id="1"/>
<el id="2"/>
<el-bis id="2"/>
</root>
Я не хочу этого. Я хотел бы, чтобы уникальный ключ сохранялся при замене ... Возможно ли это? Если нет, какие обходные пути?
Спасибо.