Моделирование неупорядоченных вложенных элементов
Для того, чтобы XML-документ, представленный в Листинге 2, был допустимым, в DTD следует добавить следующее определение:
DTD, которое очень гибко определяет вложенные элементы, содержащие контактную информацию
<!ELEMENT contact (name?,age?,telephone?)+>
Однако, приведенное выше DTD предусматривает слишком большую гибкость. В этом случае у элементов contact могут отсутствовать элементы name, а также быть несколько элементов age, что нарушает семантические требования. Для того, чтобы решать поставленную задачу, потребовалось бы чрезвычайно громоздкое определение, приведенное ниже:
Громоздкое, но точное DTD для элементов, несущих контактную информацию
<!ELEMENT contact ((name,age,telephone)| (name,telephone,age)| (age,name,telephone)| (age,telephone,name)| (telephone,name,age)| (telephone,age,name))>
Это DTD безобразно, и при добавлении новых вложенных элементов ее размер увеличивается по факториальной зависимости. Более того, DTD строже, чем семантически необходимо, что также нежелательно для авторов данных (например, задание DTD для первого вложенного элемента).