The DTD doesn't represent data typing; that's the job of
some component that interprets information encoded in XML.
Your overloading of a "flat" namespace makes that hard.
You could have chosen other validatable ways to do this:
<NAME>
<NAME.FIRST>Sam</NAME.FIRST>
...</NAME>
<ROUTE>
<ROUTE.FIRST>99.409</ROUTE.FIRST>
...</ROUTE>
Or with namespaces (the "xmlns:" decarations go best in
the DTD, IMHO):
<NAME xmlns:NAME=".../name-rules">
<NAME:FIRST>Sam</NAME:FIRST>
... </NAME>
<ROUTE xmlns:ROUTE=".../route-rules">
<ROUTE:FIRST>99.409</ROUTE:FIRST>
...</ROUTE>
Or even just have the rules that applications must follow
implicitly, based on context (and probably making validation
hard/impossible over time). I'd use an explicit approach,
since context is so easily lost.
- Dave