Make attributes of libxml2's DTD object visible to lxml.
Make the DTD classes private.
Check that _c_node is not NULL in each access method. Fix indentation.
Rename _gc_dtd to _dtd and change the type to DTD (instead of object).
Expose list of allowed attribute values to Python.
Add a C type to the iteration variable in _DTDAttributeDecl.tree.
Change DTD.declarations and _DTDElementDecl.attributes into methods.

Having a generator method as a property is a bit to magical.

Rename them to iter*() and add methods that materialize the list.
Add __repr__ methods to _DTDElementContentDecl, _DTDAttributeDecl and  _DTDElementDecl.
Fix node iteration in _DTDElementDecl.iterattributes().
Add additional properties:

Add prefix property to _DTDElementDecl and _DTDAttributeDecl and elemname
to _DTDAttributeDecl.
Cahnge _DTDAttributeDecl.tree into a method and rename it to itervalues().

Add a method values() that materializes the list.
Expose entities to Python. Rename iterdeclarations() to iterelements().
Add tests for DTD attributes.
Add tests for the DTD attributes name, systemID and externalID.
Update comments.
Document new attributes of DTD objects.
Remove bogus statement from source in documentation.
Rename various DTD attributes for PEP 8 compatibility and consistency.

   externalID -> external_id
   systemID -> system_url
   defaultValue -> default_value
Update source code in validation.txt so that doctests work.
fix crash when building nsmap for empty namespace URI

--HG--
extra : transplant_source : %CB%F2sD%8F%E81%16%B4%06%1E%A50%80%80qi%CD%BC.