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>