Моим первым предположением будет то, что код, использующий DOM, рассматривает элементы, которые помечены как необязательные в DTD, как обязательные.
Отредактировано, чтобы добавить:
Я имею в виду, что если вы не проверяете по DTD, вы не можете ожидать, что что-то вроде следующего (пример с использованием dom4j) вернет что-либо, кроме null.
doc.selectSingleNode("//some/element/in/a/structure");
То же самое, конечно, верно, если вы объединяете вызовы навигации по элементам вместе или обычно не проверяете возвращаемые значения перед их использованием.