DTD чрезвычайно ограничены, если идет речь о реальных типах данных, которые могут в них включаться. Например, DTD не может ограничить данные только числовым типом или типом даты. Атрибуты могут быть ограничены уникальностью значений, как ID, но в DTD нет способа определить, какого типа данных они должны быть. (И, странно, ID не может быть числом, что противоречит общепринятой практике реляционных баз данных!)
Ограничения могут также применяться к . Кроме того, не более одного элемента может использовать определенное имя, так что вы не можете создать разные определения элемента, которые могут появляться в разных контекстах (таких, как потомки двух разных родителей).
Вы можете преодолеть эти трудности, используя схему XML.