Here are a number of differences. Some are not important, some are real
important and easy to understand, some are real important and hard to
understand. This list is not exhaustive.
DTD's are not namespace
DTD's have #define, #include, and #ifdef -- or, less
C-oriented, the ability to define shorthand abbreviations, external
content, and some conditional parsing.
A DTD describes the entire
XML document (even if it leaves "holes"); a schema can define portions.
has a type system.
XSD has a much richer language for describing
what element or attribute content "looks like." This is related to the
You can put a DTD inline into an XML document, you
cannot do this with XSD. This means DTD's are more secure (you only
have to protect one bytestream -- the xml/dtd -- and not multiple).
official definition of "valid XML" requires a DTD. Since this may be
impractical, if not impossible, you often have to settle for
schema-valid, which is not quite the same.
Both DTD (Document Type Definition) and XSD (Xml Schema Definition) intends to do the same thing: define the structure of an XML document.
DTD was introduced in 1999 along with the XML specification. It addresses the following:
1. Define elements, attributes and entities
2. The content model (what is between open tag and closing tag) for each element.
3. The possible attributes for an element
4. The content data type for elements and attributes
5. Entities that can be referenced by an XML
and so on.
As XML became more and more popular, in 2001 W3C standardized XSD to define the structure of an XML with more features:
1. XSD is follows XML syntax
2. Introduced over 40 datatypes
3. constraints on the data (of elements/ attributes)
4. precise no.of occurences of elements
and so on.
The biggest advantage of using an XSD over DTD is that you can specify all your validation rules in an XSD and the parser can check the same for you before the actual application that needs the data gets it.