В IntelliJ 2015 (IJ) появляется ошибка при попытке определить XSD с элементом, имеющим два атрибута типа «xs: ID». К сожалению, я унаследовал этот код от кого-то давно ушедшего, поэтому не уверен, чего именно он пытался достичь.
Вот урезанная версия XSD:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:element name="visitor-test">
<xs:complexType>
...
<xs:attribute name="null-node" type="xs:ID" default="null-node"/>
<xs:attribute name="null-id" type="xs:ID" default="null-id"/>
</xs:complexType>
</xs:element>
</xs:schema>
А вот и начало XML с ошибкой:
<?xml version="1.0" encoding="UTF-8"?>
<visitor-test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="visitor-test-schema.xsd" null-id="f">
IJ подчеркивает красным и жалуется, что:
Атрибут 'null-id' не может появляться в элементе 'visitor-test
Что работает:
- Если я изменю атрибут XML на нуль-узел, т.е.
null-node="f">
- Если я переверну порядок атрибутов null-node и null-id в XSD (но тогда такая же проблема возникает для null-node)
- Если я изменю тип любого атрибута в XSD на
xs:String
, например. <xs:attribute name="null-node" type="xs:string" default="null-node"/>
Поскольку это не мой код, и я не уверен, для чего они используются, мне интересно, допустил ли мой предшественник определение двух атрибутов ID для одного и того же элемента? Это незаконно в соответствии с "http://www.w3.org/2001/XMLSchema"? И если да, то какой мой выбор" самый безопасный "? Кажется, # 3 ...
Кроме того, # 1 и # 2 вместе означают, что только первый атрибут, определенный в XSD, кажется действительным, последующие не допускаются. Как ни странно, оба атрибута предлагаются в IDE.