The problem isn't reading the DTD and understanding it. The problem is turning a given DTD into a data structure (in PHP) which I can use to parse XML into a data structure (in PHP). So things like my example where there are two different rules for how elements get nested -- something that's easy for a person to interpret -- will confuse a parser.