Возможно ли это?
Это зависит от того, насколько конкретными должны быть ваши ограничения. Если достаточно, чтобы все атрибуты name
имели уникальные значения, то этого можно достичь с помощью <xs:unique>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="parentElement">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="2" maxOccurs="unbounded" name="someElement">
<xs:complexType>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniqueName">
<xs:selector xpath="someElement" />
<xs:field xpath="@name" />
</xs:unique>
</xs:element>
</xs:schema>
Вы также можете ограничить значения атрибутов, например, некоторым перечислимым набором допустимых значений вместо простого использования type="xs:string"
. Однако невозможно ограничить уникальность только первых двух атрибутов имени, поскольку атрибут xpath
не может содержать предикаты.
Если вам нужно, чтобы первый атрибут имени имел какое-то конкретное значение, второй - какое-то другое конкретное значение, а остальные должны иметь какое-либо значение, то я бы сказал, что это либо нарушает ограничение компонента схемы Согласованные объявления элементов или потребовалось бы какое-то ограничение совместного вхождения, более конкретное, чем <xs:unique>
, поэтому в общем случае это было бы невозможно. Возможно, вы сможете сделать это, используя атрибут xsi:type
в документе экземпляра, чтобы явно объявить тип элемента.