Порядок следования дочерних элементов может также быть определен по DTD. Парадоксально, но, хотя дочерние элементы должны всегда появляться в том порядке, в каком они появляются в DTD, DTD может быть написано так, чтобы дочерние элементы появлялись в любом порядке.
Коротко говоря, требуемый порядок не изменяется, но может выбираться. Например, это DTD задает, что элемент location может иметь либо place, либо description:
<!ELEMENT location (place|description) >
Если этот вариант может быть повторено, как в:
<!ELEMENT location (place|description)* >
то location может содержать place и description в любом порядке. То же самое может быть применено к элементу memory:
<!ELEMENT memory (media | subdate | donor?| subject+| location)* >
В этом случае элементы могут появляться в любом порядке, поскольку DTD разрешает неограниченное число вариантов. Сначала может быть выбран subdate, затем location, затем donor и т.д. Заметьте, однако, что если применен этот прием, то некоторые предыдущие ограничения становятся бесполезными. Поскольку варианты могут быть применены более одного раза, любой из заданных элементов может быть выбран любое число раз или вообще не выбран.
Это серьезное ограничение DTD, и оно преодолено при помощи схем XML, которые обеспечивают гораздо большие возможности управления. Схемы также полезны при определении смешанного содержимого.