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.

Example 11.24 summarizes the Notation interface. This interface has methods to get the system and public ID for the notation. Either of these IDs may be null. As usual, Notation objects also have all the methods of the Node super-interface such as getNodeName() and getNodeValue().

Example 11.24. The Notation interface

package org.w3c.dom;

public interface Notation extends Node {

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

}

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

Example 11.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, 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.


Copyright 2001, 2002 Elliotte Rusty Haroldelharo@metalab.unc.eduLast Modified January 04, 2002
Up To Cafe con Leche