up

<..SAXdtd.java..>
 import javax.xml.parsers.*;
 import org.xml.sax.XMLReader;
 import java.io.File;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.ext.DeclHandler;
 import org.xml.sax.DTDHandler;
 class SAXdtd {
   static public void main(String[] args)
                          throws Exception {
     SAXParserFactory factory =
                SAXParserFactory.newInstance();
     factory.setValidating(true);
     SAXParser saxParser =
                factory.newSAXParser();
     XMLReader xmlReader =
                saxParser.getXMLReader();
     xmlReader.setProperty(
        "http://xml.org/sax/properties/lexical-handler",
        new MyLexicalHandler() );
     xmlReader.setProperty(
        "http://xml.org/sax/properties/declaration-handler",
        new MyDeclHandler() );
     xmlReader.setDTDHandler( new MyDTDHandler() );
     xmlReader.parse
       ( new File(args[0]).toURL().toString() );
 } }
 <.SAX DTD LexicalHandler.>
 <.SAX DTD DeclHandler.>
 <.SAX DTD DTDHandler.>
-_-_-

<..SAX DTD LexicalHandler..>
 class MyLexicalHandler implements LexicalHandler {
   public void startDTD(String name,
                        String publicId,
                        String systemId){
      System.out.println( "startDTD: \t" + name
                        + ", " + publicId
                        + ", " + systemId   );
   }
   public void endDTD(){}
   <.other SAX LexicalHandler methods.>
 }
-_-_-

<..SAX DTD DeclHandler..>
 class MyDeclHandler implements DeclHandler{
   public void attributeDecl(String eName, String aName,
          String type, String valueDefault, String value){
      System.out.println(
        "attributeDecl: \t" + eName +
        ", " + aName +
        ", " + type +
        ", " + valueDefault +
        ", " + value );
   }
   public void elementDecl(String name, String model){
      System.out.println(
        "elementDecl: \t" + name +
        ", " + model );
   }
   public void externalEntityDecl(String name, String publicId,
                                                  String systemId){
      System.out.println(
        "externalEntityDecl: \t" + name +
        ", " + publicId +
        ", " + systemId );
   }
   public void internalEntityDecl(String name, String value){
      System.out.println(
        "internalEntityDecl: \t" + name +
        ", " + value );
   }
 }
-_-_-

<..SAX DTD DTDHandler..>
 class MyDTDHandler implements DTDHandler{
   public void notationDecl(String name, String publicId,
                                                  String systemId){
      System.out.println(
        "notationDecl: \t" + name +
        ", " + publicId +
        ", " + systemId );
   }
   public void unparsedEntityDecl(String name, String publicId,
                             String systemId, String notationName){
      System.out.println(
        "unparsedEntityDecl: \t" + name +
        ", " + publicId +
        ", " + systemId +
        ", " + notationName );
   }
 }
-_-_-

<..other SAX LexicalHandler methods..>
 public void comment (char[] x, int y, int z){}
 public void startEntity(String x){}
 public void endEntity(String x){}
 public void startCDATA(){}
 public void endCDATA(){}
-_-_-