Есть ли способ достичь этого, используя только DTD?
Нет.
Вы можете сделать только:
season_price
(ровно один) season_price?
(ноль или единица) season_price+
(один или несколько) season_price*
(ноль или более)
См. https://www.w3.org/TR/xml11/#sec -element-content для получения дополнительной информации.
----- Редактировать -----
Как вы упомянули в другой вопрос , вы могли бы сделать это, используя ?
вроде:
<!ELEMENT seasonal_prices (season_price?, season_price?, season_price?)>
но прямого пути нет, как в XML Схема (minOccurs / maxOccurs).