OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: How to parse/expose the DTD

[ Lists Home | Date Index | Thread Index ]
  • From: lisa@exinet.co.za (Lisa Retief)
  • To: <xml-dev@xml.org>
  • Date: Thu, 29 Jun 2000 08:08:50 +0200

There is a roundabout way of doing this with SAX. You need to parse a
Document that uses the particular DTD, but before doing so set the SAXParser
to use your own implementation of "org.xml.sax.ext.DeclHandler".

I use Xerces-J to do this and the parsing code looks something like:

SAXParser parser = new SAXParser();
DeclHandler handler = new CustomDeclHandler();
parser.setProperty("http://xml.org/sax/properties/declaration-handler",
handler);
parser.parse(document.getAbsolutePath());

The CustomDeclHandler looks a bit like the code below, except you'll
probably do something more useful than just print things out. I load the
information into another class which I can then interrogate...

class CustomDeclHandler
   implements org.xml.sax.ext.DeclHandler
{
   public void attributeDecl(java.lang.String elementName,
                             java.lang.String attributeName,
                             java.lang.String type,
                             java.lang.String valueDefault,
                             java.lang.String value)
   {

      System.out.println("ATTRIBUTE: ");
      System.out.println("Element Name: " + elementName);
      System.out.println("Attribute Name: " + attributeName);
      System.out.println("Type: " + type);
      System.out.println("Default Value: " + valueDefault);
      System.out.println("Value: " + value);
      System.out.println();
   }

   public void elementDecl(java.lang.String name,
                           java.lang.String model)
   {

      System.out.println("ELEMENT: ");
      System.out.println("Name: " + name);
      System.out.println("Model: " + model);
      System.out.println();
   }

   public void externalEntityDecl(java.lang.String name,
                                  java.lang.String publicId,
                                  java.lang.String systemId)
  {
     System.out.println("EXTERNAL ENTITY: " + name + publicId + systemId);
  }

  public void internalEntityDecl(java.lang.String name,
                                 java.lang.String value)
  {
     System.out.println("INTERNAL ENTITY: " + name + value);
  }
}

Regards, Lisa

Dylan Walsh  wrote:

> In Java, how can you inspect a DTD, without writing your own code to parse
> it? Does DOM or SAX expose the DTD in terms of what elements, attributes
> etc. are allowed?
>
> If not, is there any software out there to do it?
>



***************************************************************************
This is xml-dev, the mailing list for XML developers.
To unsubscribe, mailto:majordomo@xml.org&BODY=unsubscribe%20xml-dev
List archives are available at http://xml.org/archives/xml-dev/
***************************************************************************




 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS