The Notation Interface





The Notation Interface

The Notation interface represents a notation declared in the DTD; it is not part of the tree. A Notation object has no parent and no children. The only way to access a document's notations is through the getNotations() method of the DocumentType object.

Note

Notations are very uncommon in practice. You may want to skip this section unless you discover a specific need for it.


Figure summarizes the Notation interface. This interface has methods to get the system ID and public ID for the notation, either of which may be null. As usual, Notation objects also have all the methods of the Node superinterface such as getNodeName() and getNodeValue().

24 The Notation Interface
package org.w3c.dom;

public interface Notation extends Node {

  public String getPublicId();
  public String getSystemId();

}

Figure is a simple program that lists all of the notations declared in a document's DTD. To determine whether these were actually used anywhere in the document, you would need to compare them to all of the processing instruction targets, notation type attributes, and unparsed entities to see if they matched up anywhere.

25 Listing the Notations Declared in a DTD
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.IOException;

public class NotationLister {

  // No recursion for a change. We don't need to walk the tree.
  public static void listNotations(Document doc) {

    DocumentType doctype   = doc.getDoctype();
    NamedNodeMap notations = doctype.getNotations();
    for (int i = 0; i < notations.getLength(); i++) {

      Notation notation = (Notation) notations.item(i);

      String name       = notation.getNodeName();
      String publicID   = notation.getPublicId();
      String systemID   = notation.getSystemId();

      System.out.print(name + ": ");
      if (publicID != null) System.out.print(publicID + " ");
      if (systemID != null) System.out.print(systemID + " ");
      System.out.println();

    }

  }

  public static void main(String[] args) {

    if (args.length <= 0) {
      System.out.println("Usage: java NotationLister URL");
      return;
    }
    String url = args[0];

    try {
      DocumentBuilderFactory factory
       = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = factory.newDocumentBuilder();

      // Read the document
      Document document = parser.parse(url);

      // Process the document
      listNotations(document);

    }
    catch (SAXException e) {
      System.out.println(url + " is not well-formed.");
    }
    catch (IOException e) {
      System.out.println(
       "Due to an IOException, the parser could not check " + url
      );
    }
    catch (FactoryConfigurationError e) {
      System.out.println("Could not locate a factory class");
    }
    catch (ParserConfigurationException e) {
      System.out.println("Could not locate a JAXP parser");
    }

  } // end main

}

DocBook is the only XML application I'm aware of that even declares any notations (and that's really only because of legacy compatibility issues with DocBook's earlier SGML incarnation). This book is written in DocBook, and so I ran NotationLister across one of its chapters. Here's the output:

D:\books\XMLJAVA>java NotationLister masterbook.xml 
BMP: +//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft
 Windows bitmap//EN
CGM-BINARY: ISO 8632/3//NOTATION Binary encoding//EN
CGM-CHAR: ISO 8632/2//NOTATION Character encoding//EN
CGM-CLEAR: ISO 8632/4//NOTATION Clear text encoding//EN
DITROFF: DITROFF
DVI: DVI
EPS: +//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language
 Ref. Manual//EN
EQN: EQN
FAX: -//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1
 Untiled Raster//EN
GIF: GIF
GIF87a: -//CompuServe//NOTATION Graphics Interchange Format
 87a//EN
GIF89a: -//CompuServe//NOTATION Graphics Interchange Format
 89a//EN
IGES: -//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial
 Graphics Exchange Specification//EN
JPEG: JPG
JPG: JPG
PCX: +//ISBN 0-7923-9432-1::Graphic Notation//NOTATION ZSoft PCX
 bitmap//EN
PIC: PIC
PNG: http://www.w3.org/TR/REC-png
PS: PS
SGML: ISO 8879:1986//NOTATION Standard Generalized Markup
 Language//EN
TBL: TBL
TEX: +//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN
TIFF: TIFF
WMF: +//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft
Windows Metafile//EN
WPG: WPG
linespecific: linespecific

I had to add a few line breaks to fit the output on the page, but otherwise the result would be the same given any DocBook document because the notations come from the DTD, not the instance document.


     Python   SQL   Java   php   Perl 
     game development   web development   internet   *nix   graphics   hardware 
     telecommunications   C++ 
     Flash   Active Directory   Windows