Мое чтение стандарта XML-схемы говорит о том, что вы, вероятно, в безопасности. Вы просто определяете непоследовательные элементы с одинаковыми именами в своей схеме, чтобы отразить XML, каким он будет (или может быть) сгенерирован. Пока все "ошибки" экземпляров всегда разделены другими элементами и не являются последовательными, это не должно быть проблемой. Например, что-то вроде:
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="summary" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element ref="error" minOccurs="1" maxOccurs="1" />
<xs:element name="details" minOccurs="1" maxOccurs="1" type="detailsType" />
<xs:element ref="error" minOccurs="1" maxOccurs="1" />
<xs:element name="z" minOccurs="0" maxOccurs="1" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="error" type="xs:string"/>
<xs:complexType name="detailsType">
....
</xs:complexType>
Если детали имеют minOccurs = "0", а первая вышеупомянутая "ошибка" имеет maxOccurs> 1, то вы не выполняете правило уникального атрибута частиц, поскольку проверка не может проверить, если у вас есть два элемента ошибки в строке, какой экземпляр «ошибки» в схеме, к которой они принадлежат. Однако до тех пор, пока каждый экземпляр «ошибки» может быть однозначно идентифицирован в схеме, благодаря хорошему использованию «minOccurs» и «maxOccurs» для элементов ошибок и промежуточных элементов, вы хороши.
Вы можете даже иметь последовательные экземпляры «ошибки», если валидатор схемы всегда может однозначно определить, на какой экземпляр ссылаются, например, с помощью minOccurs и maxOccurs.
Подумайте о xhtml, в котором элементы могут встречаться в любом порядке с произвольным повторением.
РЕДАКТИРОВАТЬ: Обновлено, чтобы отразить правки в исходном вопросе.