blob: 5a51ae3512c0cabf129b25cdadbf0129f33efa9a [file] [log] [blame]
// Attributes.java - attribute list with Namespace support
// http://www.saxproject.org
// Written by David Megginson
// NO WARRANTY! This class is in the public domain.
// $Id: Attributes.java,v 1.13 2004/03/18 12:28:05 dmegginson Exp $
namespace Sax
{
/// <summary>
/// Interface for a list of XML attributes.
/// </summary>
/// <remarks>
/// <em>This module, both source code and documentation, is in the
/// Public Domain, and comes with<strong> NO WARRANTY</strong>.</em>
/// See<a href='http://www.saxproject.org'>http://www.saxproject.org</a>
/// for further information.
/// <para/>
/// This interface allows access to a list of attributes in
/// three different ways:
/// <list type="number">
/// <item><description>by attribute index;</description></item>
/// <item><description>by Namespace-qualified name; or</description></item>
/// <item><description>by qualified (prefixed) name.</description></item>
/// </list>
/// <para/>
/// The list will not contain attributes that were declared
/// #IMPLIED but not specified in the start tag. It will also not
/// contain attributes used as Namespace declarations(xmlns*) unless
/// the <a href="http://xml.org/sax/features/namespace-prefixes">http://xml.org/sax/features/namespace-prefixes</a>
/// feature is set to <var>true</var> (it is <var>false</var> by
/// default).
/// Because SAX2 conforms to the original "Namespaces in XML"
/// recommendation, it normally does not
/// give namespace declaration attributes a namespace URI.
/// <para/>
/// Some SAX2 parsers may support using an optional feature flag
/// (<a href="http://xml.org/sax/features/xmlns-uris">http://xml.org/sax/features/xmlns-uris</a>) to request
/// that those attributes be given URIs, conforming to a later
/// backwards-incompatible revision of that recommendation. (The
/// attribute's "local name" will be the prefix, or "xmlns" when
/// defining a default element namespace.) For portability, handler
/// code should always resolve that conflict, rather than requiring
/// parsers that can change the setting of that feature flag.
/// If the namespace-prefixes feature (see above) is
/// <var>false</var>, access by qualified name may not be available; if
/// the<code>http://xml.org/sax/features/namespaces</code> feature is
/// <var>false</var>, access by Namespace-qualified names may not be
/// available.
/// <para/>This interface replaces the now-deprecated SAX1 { @link
/// org.xml.sax.AttributeList AttributeList } interface, which does not
/// contain Namespace support.In addition to Namespace support, it
/// adds the<var> getIndex</var> methods (below).
/// <para/>The order of attributes in the list is unspecified, and will
/// vary from implementation to implementation.
/// </remarks>
/// <since>SAX 2.0</since>
/// <author>David Megginson</author>
/// <version>2.0.1 (sax2r2)</version>
/// <seealso cref="Helpers.Attributes"/>
/// <seealso cref="Ext.IDeclHandler"/>
public interface IAttributes
{
////////////////////////////////////////////////////////////////////
// Indexed access.
////////////////////////////////////////////////////////////////////
/// <summary>
/// Return the number of attributes in the list.
/// <para/>
/// Once you know the number of attributes, you can iterate
/// through the list.
/// </summary>
/// <returns>The number of attributes in the list.</returns>
/// <seealso cref="GetURI(int)"/>
/// <seealso cref="GetLocalName(int)"/>
/// <seealso cref="GetQName(int)"/>
/// <seealso cref="GetType(int)"/>
/// <seealso cref="GetValue(int)"/>
int Length { get; }
/// <summary>
/// Look up an attribute's Namespace URI by index.
/// </summary>
/// <param name="index">The attribute index (zero-based).</param>
/// <returns>The Namespace URI, or the empty string if none
/// is available, or null if the index is out of
/// range.</returns>
/// <seealso cref="GetURI(int)"/>
string GetURI(int index);
/// <summary>
/// Look up an attribute's local name by index.
/// </summary>
/// <param name="index">The attribute index (zero-based).</param>
/// <returns>The local name, or the empty string if Namespace
/// processing is not being performed, or null
/// if the index is out of range.</returns>
/// <seealso cref="Length"/>
string GetLocalName(int index);
/// <summary>
/// Look up an attribute's XML qualified (prefixed) name by index.
/// </summary>
/// <param name="index">The attribute index (zero-based).</param>
/// <returns>The XML qualified name, or the empty string
/// if none is available, or null if the index
/// is out of range.</returns>
/// <seealso cref="Length"/>
string GetQName(int index);
/// <summary>
/// Look up an attribute's type by index.
/// </summary>
/// <remarks>
/// The attribute type is one of the strings "CDATA", "ID",
/// "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
/// or "NOTATION" (always in upper case).
/// <para/>
/// If the parser has not read a declaration for the attribute,
/// or if the parser does not report attribute types, then it must
/// return the value "CDATA" as stated in the XML 1.0 Recommendation
/// (clause 3.3.3, "Attribute-Value Normalization").
/// <para/>
/// For an enumerated attribute that is not a notation, the
/// parser will report the type as "NMTOKEN".
/// </remarks>
/// <param name="index">The attribute index (zero-based).</param>
/// <returns>The attribute's type as a string, or null if the
/// index is out of range.</returns>
/// <seealso cref="Length"/>
string GetType(int index);
/// <summary>
/// Look up an attribute's value by index.
/// </summary>
/// <remarks>
/// If the attribute value is a list of tokens (IDREFS,
/// ENTITIES, or NMTOKENS), the tokens will be concatenated
/// into a single string with each token separated by a
/// single space.
/// </remarks>
/// <param name="index">The attribute index (zero-based).</param>
/// <returns>The attribute's value as a string, or null if the
/// index is out of range.</returns>
/// <seealso cref="Length"/>
string GetValue(int index);
////////////////////////////////////////////////////////////////////
// Name-based query.
////////////////////////////////////////////////////////////////////
/// <summary>
/// Look up the index of an attribute by Namespace name.
/// </summary>
/// <param name="uri">The Namespace URI, or the empty string if
/// the name has no Namespace URI.</param>
/// <param name="localName">The attribute's local name.</param>
/// <returns>The index of the attribute, or -1 if it does not
/// appear in the list.</returns>
int GetIndex(string uri, string localName);
/// <summary>
/// Look up the index of an attribute by XML qualified (prefixed) name.
/// </summary>
/// <param name="qName">The qualified (prefixed) name.</param>
/// <returns>The index of the attribute, or -1 if it does not
/// appear in the list.</returns>
int GetIndex(string qName);
/// <summary>
/// Look up an attribute's type by Namespace name.
/// <para/>
/// See <see cref="GetType(int)"/> for a description
/// of the possible types.
/// </summary>
/// <param name="uri">The Namespace URI, or the empty String if the
/// name has no Namespace URI.</param>
/// <param name="localName">The local name of the attribute.</param>
/// <returns>The attribute type as a string, or null if the
/// attribute is not in the list or if Namespace
/// processing is not being performed.</returns>
string GetType(string uri, string localName);
/// <summary>
/// Look up an attribute's type by XML qualified (prefixed) name.
/// <para/>
/// See <see cref="GetType(int)"/> for a description
/// of the possible types.
/// </summary>
/// <param name="qName">The XML qualified name.</param>
/// <returns>The attribute type as a string, or null if the
/// attribute is not in the list or if qualified names
/// are not available.</returns>
string GetType(string qName);
/// <summary>
/// Look up an attribute's value by Namespace name.
/// <para/>
/// See <see cref="GetValue(int)"/> for a description
/// of the possible values.
/// </summary>
/// <param name="uri">The Namespace URI, or the empty String if the
/// name has no Namespace URI.</param>
/// <param name="localName">The local name of the attribute.</param>
/// <returns>The attribute value as a string, or null if the
/// attribute is not in the list.</returns>
string GetValue(string uri, string localName);
/// <summary>
/// Look up an attribute's value by XML qualified (prefixed) name.
/// <para/>
/// See <see cref="GetValue(int)"/> for a description
/// of the possible values.
/// </summary>
/// <param name="qName"></param>
/// <returns></returns>
string GetValue(string qName);
}
}