Вы должны указать значение атрибута уникальности, где группа атрибут используется, не там, где это определяется.
Для этого XML-документ, который будет действителен:
<?xml version="1.0" encoding="utf-8"?>
<MyRoot>
<MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement>
<MyComplexTypeElement name="xyz" value="ss" more-attr="22">Value 2asdf</MyComplexTypeElement>
<MyComplexTypeElement name="some" value="rrr" more-attr="2">Value 3asdf</MyComplexTypeElement>
<MyComplexTypeElement name="XYZ" value="rr" more-attr="23" >Value 4sdfs</MyComplexTypeElement>
</MyRoot>
Но этот XML документ недействительным из-за значения дубликата name
атрибута:
<?xml version="1.0" encoding="utf-8"?>
<MyRoot>
<MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement>
<MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement>
<MyComplexTypeElement name="xyz" value="ss" more-attr="22">Value 2asdf</MyComplexTypeElement>
<MyComplexTypeElement name="some" value="rrr" more-attr="2">Value 3asdf</MyComplexTypeElement>
<MyComplexTypeElement name="XYZ" value="rr" more-attr="23" >Value 4sdfs</MyComplexTypeElement>
</MyRoot>
Используйте этот XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attributeGroup name="myAttr">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
<xs:attribute name="more-attr" type="xs:string" use="required"/>
</xs:attributeGroup>
<xs:element name="MyRoot">
<xs:complexType>
<xs:sequence>
<xs:element name="MyComplexTypeElement" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="myAttr"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueNameAttr">
<xs:selector xpath="MyComplexTypeElement"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
</xs:schema>
Нарушение единственности ограничения будет давать ошибку, такие как:
[Error] try.xml:5:61: cvc-identity-constraint.4.1: Duplicate unique value [abc] declared for identity constraint "UniqueNameAttr" of element "MyRoot".
Обновление на комментарий OP в:
Я выше подход, но на нарушения в моей xml, я не вижу ошибку . Я пытаюсь увидеть в IntelliJ ide - user1587504
Вышеупомянутые XML и XSD были протестированы с использованием известного надежного синтаксического анализа на основе Xerces. Вы можете рассчитывать на то, что он правильный для XSD 1.0.
Вещи, чтобы проверить:
- Используйте точные примеры, как указано первого перед изменением ваших конкретных обстоятельств, чтобы исключить возможность ошибки быть введено в применении понятий.
- Убедитесь, что XSD связан с XML.Как проверка работоспособности , измените корневой элемент XML на что-то не в XSD и убедитесь, что вы видите ошибки проверки на всех.
Если вы до сих пор не получили соответствующее диагностическое сообщение после того, как с использованием точного примера выше, а доказав, что вы можете увидеть другие ошибки проверки, вы можете подозреваете, что ваш инструмент. Однако очень быстрый поиск не выявил никаких проблем с проверкой IntelliJ с использованием xs: unique. Фактически, here is some evidence that IntelliJ does support xs:unique.
Я попытался с: XSD: селектор> XSD: ограничение> xsd: simpleType> xsd: attribute> , но, похоже, не поддерживается –
user1587504