Я пытался установить ограничение UNIQUE
на некоторые атрибуты, которые у меня есть, в довольно простой схеме XSD. Я использую XMLSpy и хочу наложить уникальные ограничения на TEMPLATE.ID для моих узлов (т. Е. Важно, чтобы они оставались уникальными).
Я поставил нижеследующее на место и попробовал следующее:
Сценарий 1
<xs:unique name="uniqueviewid">
<xs:selector xpath="./views"/>
<xs:field xpath="@id"/>
</xs:unique>
Результат:
XSD: проверяет нормально XML проверяет, но не поддерживает уникальное ограничение (т. Е. Два или более элемента с одинаковым идентификатором не обнаруживаются
Сценарий 2
<xs:unique name="uniqueviewid">
<xs:selector xpath="views"/>
<xs:field xpath="@id"/>
</xs:unique>
** Результаты * То же, что и в сценарии 1. XSD проверяет, XML проверяет, но игнорирует дубликат @id
в элементе представления
Сценарий 3
<xs:unique name="uniqueviewid">
<xs:selector xpath="*"/>
<xs:field xpath="@id"/>
</xs:unique>
Результаты: XSD Validates и XML Validats и он учитывает УНИКАЛЬНОЕ ограничение (т. Е. Если дублирующиеся представления с @id
, то это вызывает отклонение в соответствии с проектом).
Проблема в том, что подстановочный знак равен "*", что означает, что все подузлы в VIEWPODS будут проверены, а это не то, что я хочу. Вместо этого я хочу сфокусировать противопоказание на точном пути VIEWPOS / VIEWS / @ ID.
Я думаю, что у меня XPATH - все не так, но я не могу вспомнить, что я делаю именно неправильно?
Пример XML.
Это пример XML.
<config xmlns="http://tempuri.org/RIAGenicConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tempuri.org/RIAGenicConfig.xsd RIAGenicConfig.xsd">
<view>
<viewpods>
<views id="view1"/>
<views id="view1"/>
</viewpods>
</view>
</config>
XSD в вопросе.
<xs:schema xmlns="http://tempuri.org/RIAGenicConfig.xsd" xmlns:mstns="http://tempuri.org/RIAGenicConfig.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://tempuri.org/RIAGenicConfig.xsd" elementFormDefault="qualified" id="RIAGenicConfig">
<xs:element name="config">
<xs:complexType>
<xs:sequence>
<xs:element name="view">
<xs:complexType>
<xs:choice>
<xs:element name="viewpods">
<xs:complexType>
<xs:choice>
<xs:element name="views" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id"/>
</xs:complexType>
</xs:element>
<xs:element name="blah"/>
</xs:choice>
</xs:complexType>
<xs:unique name="uniqueviewid">
<xs:selector xpath="*"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>