English

minOccurs и maxOccurs: сколько элементов допускает XSD

XSDHub · 4 ноября 2026 года

Причина и контекст

Атрибут minOccurs задаёт нижнюю границу количества появлений частицы, а maxOccurs — верхнюю. Если они отсутствуют у объявления элемента внутри модели содержимого, обычно подразумевается одно появление. Поэтому поле без этих атрибутов не становится необязательным автоматически. Значение minOccurs="0" разрешает его отсутствие в соответствующей позиции.

Что проверить в документе

В схеме ниже item разрешён один или два раза. Правильный XML содержит две позиции, ошибочный — три. Все значения являются допустимыми строками, и разметка корректна; единственная причина отказа заключается в превышении maxOccurs. Удаление третьей позиции возвращает документ в допустимый диапазон.

Разбор примера

Запись maxOccurs="unbounded" снимает числовую верхнюю границу модели, но не отменяет ограничения памяти или размера файла в приложении. Нижняя граница продолжает действовать. Сочетание minOccurs="0" и maxOccurs="unbounded" допускает как отсутствие элемента, так и произвольное число повторов в пределах ресурсов обработчика.

Как найти источник ошибки

Учитывайте область действия ограничения. Повторение у sequence относится ко всей группе, тогда как повторение у item относится к конкретному элементу внутри неё. Если группа повторяется, суммарное число элементов может оказаться больше числа из локального maxOccurs. Разберите один проход группы и затем её повторения отдельно.

Особые случаи

Необязательность элемента не равна допустимости пустого значения. При minOccurs="0" элемент можно не передавать, но присутствующий элемент обязан удовлетворять своему типу. Например, пустой quantity с типом positiveInteger не станет допустимым от того, что сам quantity необязателен. Атрибут nillable описывает ещё один отдельный механизм.

Порядок исправления

При пограничной проверке создайте варианты с количеством ниже минимума, точно на границах и выше максимума. Используйте одну и ту же схему во всех запусках. Успех одного файла подтверждает только конкретное количество повторов; он не доказывает, что контракт не ограничивает другие ветви. В рабочем обмене уточняйте пределы у получателя, прежде чем менять схему.

Воспроизведите результат

Открыть инструмент для этих примеров. Сначала проверьте вариант с ошибкой, затем исправленный документ. Вставьте приведённую XSD в поле схемы.

Полная учебная схема XSD 1.0

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="list"><xs:complexType><xs:sequence><xs:element name="item" type="xs:string" minOccurs="1" maxOccurs="2"/></xs:sequence></xs:complexType></xs:element></xs:schema>

XML с ошибкой — ожидается отказ

<list><item>A</item><item>B</item><item>C</item></list>

Исправленный XML — ожидается успех

<list><item>A</item><item>B</item></list>

Спецификация

Первоисточник W3C (English)