Хотя и возможно создать структуру XML, которая не содержит ничего, кроме элементов, более общей ситуацией является ситуация элементов с атрибутами. Атрибуты должны также быть определены, если они появляются в элементах правильного документа.
Вы можете определить атрибуты несколькими способами. Первый - просто определить их как символьные данные или CDATA:
<!ATTLIST memory tapeid CDATA #REQUIRED >
В этом случае DTD назначает элементу memory атрибут tapeid. Атрибут tapeid состоит из символьных данных и является обязательным. Элемент может также быть определен как #IMPLIED или #FIXED, в этом случае должно быть также задано значение по умолчанию.
Некоторые атрибуты перечисляемые, это значит, что значение должно выбираться из предопределенного списка. Например:
<!ATTLIST media type (8mm | vhsc | vhs | audio) '8mm' #IMPLIED >
В этом случае документ должен выбрать значение из списка, если же значение не обеспечено, парсер использует значение по умолчанию 8mm. Это случай для любого документа, для которого существует DTD, даже, если парсер непроверяющий. В одном определении ATTLIST может быть определено много атрибутов:
<!ATTLIST media type (8mm | vhsc | vhs | audio) '8mm' #IMPLIED length CDATA >
Второй способ определения атрибутов включает в себя ID и IDREF.