SAX: towards a solution

James Clark jjc at jclark.com
Sun Jan 4 06:22:17 GMT 1998


David Megginson wrote:
> 
> James Clark writes:
> 
>  > I don't think using java.util.Dictionary is a good idea:
>  >
>  > 1. JDK 1.2 provides a new Map interface which replaces Dictionary.
>  >
>  > 2. java.util.Dictionary is an abstract base class not an interface.
>  >
>  > 3. java.util.dictionary is weakly typed: it doesn't enforce the
>  > requirement that keys be strings, and it requires values to be cast to
>  > strings.
>  >
>  > I think it would be much better to have an Attributes interface and also
>  > a convenience adapter class that provides a Dictionary implementation in
>  > terms of that interface.
> 
> I would like to avoid java.util.Map to keep SAX applet-friendly (it
> will be years before most browsers deployed support even 1.1).

I agree.  We should have an interface specifically for Attributes and
implementations of Map and Dictonary on top of that.

>  I
> agree that Dictionary is far less than ideal -- what do you imagine
> the attributes interface looking like?

/**
 * An XmlAttributeSet is a set of named attributes each
 * with a string value.
 * Both specified and defaulted values are included
 * and are not distinguished.
 * Implied attributes are not included.
 * The XML processor is free to modify the AttributeSet after the
 * application returns from startElement.
 * The application can use clone to make a copy of the AttributeSet
 * which will not be modified by the XML processor.
 */

public interface XmlAttributeSet extends Cloneable {
  /**
   * Return the value of the attribute with this name, or null is the
   * set does not include an attribute.
   */
  String get(String name);

  /**
   * Return the number of attributes in the set.
   */
  int getSize();

  /**
   * Get the name of the i-th attribute, where i is greater than or
   * equal to 0 and less than the number of attributes in the set.
   * The order of the attributes is not defined.
   */
  String getName(int i);

  /**
   * Get the value of the i-th attribute, where i is greater than or
   * equal to 0 and less than the number of attributes in the set.
   */
  String getValue(int i);
}

You could use an Iterator or Enumeration instead of
getSize/getName/getValue, but I think it would probably be more
complicated and less efficient.

James

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)




More information about the Xml-dev mailing list