FileDocCategorySizeDatePackage
QName.javaAPI DocJava SE 5 API19751Fri Aug 26 14:56:04 BST 2005com.sun.org.apache.xml.internal.utils

QName

public class QName extends Object implements Serializable
Class to represent a qualified name: "The name of an internal XSLT object, specifically a named template (see [7 Named Templates]), a mode (see [6.7 Modes]), an attribute set (see [8.1.4 Named Attribute Sets]), a key (see [14.2 Keys]), a locale (see [14.3 Number Formatting]), a variable or a parameter (see [12 Variables and Parameters]) is specified as a QName. If it has a prefix, then the prefix is expanded into a URI reference using the namespace declarations in effect on the attribute in which the name occurs. The expanded name consisting of the local part of the name and the possibly null URI reference is used as the name of the object. The default namespace is not used for unprefixed names."
xsl.usage
general

Fields Summary
protected String
_localName
The local name.
protected String
_namespaceURI
The namespace URI.
protected String
_prefix
The namespace prefix.
public static final String
S_XMLNAMESPACEURI
The XML namespace.
private int
m_hashCode
The cached hashcode, which is calculated at construction time.
Constructors Summary
public QName()
Constructs an empty QName. 20001019: Try making this public, to support Serializable? -- JKESS


                   
   
public QName(String qname, Element namespaceContext, PrefixResolver resolver)
Construct a QName from a string, resolving the prefix using the given namespace context and prefix resolver. The default namespace is not resolved.

param
qname Qualified name to resolve
param
namespaceContext Namespace Context to use
param
resolver Prefix resolver for this context

      this(qname, namespaceContext, resolver, false);
  
public QName(String qname, Element namespaceContext, PrefixResolver resolver, boolean validate)
Construct a QName from a string, resolving the prefix using the given namespace context and prefix resolver. The default namespace is not resolved.

param
qname Qualified name to resolve
param
namespaceContext Namespace Context to use
param
resolver Prefix resolver for this context
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


    _namespaceURI = null;

    int indexOfNSSep = qname.indexOf(':");

    if (indexOfNSSep > 0)
    {
      if (null != namespaceContext)
      {
        String prefix = qname.substring(0, indexOfNSSep);

        _prefix = prefix;

        if (prefix.equals("xml"))
        {
          _namespaceURI = S_XMLNAMESPACEURI;
        }
        
        // Do we want this?
        else if (prefix.equals("xmlns"))
        {
          return;
        }
        else
        {
          _namespaceURI = resolver.getNamespaceForPrefix(prefix,
                  namespaceContext);
        }

        if (null == _namespaceURI)
        {
          throw new RuntimeException(
            XMLMessages.createXMLMessage(
              XMLErrorResources.ER_PREFIX_MUST_RESOLVE,
              new Object[]{ prefix }));  //"Prefix must resolve to a namespace: "+prefix);
        }
      }
      else
      {

        // TODO: error or warning...
      }
    }

    _localName = (indexOfNSSep < 0)
                 ? qname : qname.substring(indexOfNSSep + 1);

    if (validate)
    {
        if ((_localName == null) || (!XMLChar.isValidNCName(_localName))) 
        {
           throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }
    }                 
                 
    m_hashCode = toString().hashCode();
  
public QName(String qname, PrefixResolver resolver)
Construct a QName from a string, resolving the prefix using the given namespace stack. The default namespace is not resolved.

param
qname Qualified name to resolve
param
resolver Prefix resolver for this context

    this(qname, resolver, false);
  
public QName(String qname, PrefixResolver resolver, boolean validate)
Construct a QName from a string, resolving the prefix using the given namespace stack. The default namespace is not resolved.

param
qname Qualified name to resolve
param
resolver Prefix resolver for this context
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


	String prefix = null;
    _namespaceURI = null;

    int indexOfNSSep = qname.indexOf(':");

    if (indexOfNSSep > 0)
    {
      prefix = qname.substring(0, indexOfNSSep);

      if (prefix.equals("xml"))
      {
        _namespaceURI = S_XMLNAMESPACEURI;
      }
      else
      {
        _namespaceURI = resolver.getNamespaceForPrefix(prefix);
      }

      if (null == _namespaceURI)
      {
        throw new RuntimeException(
          XMLMessages.createXMLMessage(
            XMLErrorResources.ER_PREFIX_MUST_RESOLVE,
            new Object[]{ prefix }));  //"Prefix must resolve to a namespace: "+prefix);
      }
      _localName = qname.substring(indexOfNSSep + 1);
    }
    else if (indexOfNSSep == 0) 
    {
      throw new RuntimeException(
         XMLMessages.createXMLMessage(
           XMLErrorResources.ER_NAME_CANT_START_WITH_COLON,
           null));
    }
    else
    {
      _localName = qname;
    }   
                 
    if (validate)
    {
        if ((_localName == null) || (!XMLChar.isValidNCName(_localName))) 
        {
           throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }
    }                 

              
    m_hashCode = toString().hashCode();
    _prefix = prefix;
  
public QName(String namespaceURI, String localName)
Constructs a new QName with the specified namespace URI and local name.

param
namespaceURI The namespace URI if known, or null
param
localName The local name

    this(namespaceURI, localName, false); 
  
public QName(String namespaceURI, String localName, boolean validate)
Constructs a new QName with the specified namespace URI and local name.

param
namespaceURI The namespace URI if known, or null
param
localName The local name
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


    // This check was already here.  So, for now, I will not add it to the validation
    // that is done when the validate parameter is true.
    if (localName == null)
      throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_NULL, null)); //"Argument 'localName' is null");

    if (validate) 
    {
        if (!XMLChar.isValidNCName(localName))
        {
            throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }
    }
    
    _namespaceURI = namespaceURI;
    _localName = localName;
    m_hashCode = toString().hashCode();
  
public QName(String namespaceURI, String prefix, String localName)
Constructs a new QName with the specified namespace URI, prefix and local name.

param
namespaceURI The namespace URI if known, or null
param
prefix The namespace prefix is known, or null
param
localName The local name

     this(namespaceURI, prefix, localName, false);
  
public QName(String namespaceURI, String prefix, String localName, boolean validate)
Constructs a new QName with the specified namespace URI, prefix and local name.

param
namespaceURI The namespace URI if known, or null
param
prefix The namespace prefix is known, or null
param
localName The local name
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


    // This check was already here.  So, for now, I will not add it to the validation
    // that is done when the validate parameter is true.
    if (localName == null)
      throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_NULL, null)); //"Argument 'localName' is null");

    if (validate)
    {    
        if (!XMLChar.isValidNCName(localName))
        {
            throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }

        if ((null != prefix) && (!XMLChar.isValidNCName(prefix)))
        {
            throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_PREFIX_INVALID,null )); //"Argument 'prefix' not a valid NCName");
        }

    }
    _namespaceURI = namespaceURI;
    _prefix = prefix;
    _localName = localName;
    m_hashCode = toString().hashCode();
  
public QName(String localName)
Construct a QName from a string, without namespace resolution. Good for a few odd cases.

param
localName Local part of qualified name

    this(localName, false);
  
public QName(String localName, boolean validate)
Construct a QName from a string, without namespace resolution. Good for a few odd cases.

param
localName Local part of qualified name
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


    // This check was already here.  So, for now, I will not add it to the validation
    // that is done when the validate parameter is true.
    if (localName == null)
      throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_NULL, null)); //"Argument 'localName' is null");

    if (validate)
    {    
        if (!XMLChar.isValidNCName(localName))
        {
            throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }
    }
    _namespaceURI = null;
    _localName = localName;
    m_hashCode = toString().hashCode();
  
public QName(String qname, Stack namespaces)
Construct a QName from a string, resolving the prefix using the given namespace stack. The default namespace is not resolved.

param
qname Qualified name to resolve
param
namespaces Namespace stack to use to resolve namespace

    this(qname, namespaces, false);
  
public QName(String qname, Stack namespaces, boolean validate)
Construct a QName from a string, resolving the prefix using the given namespace stack. The default namespace is not resolved.

param
qname Qualified name to resolve
param
namespaces Namespace stack to use to resolve namespace
param
validate If true the new QName will be validated and an IllegalArgumentException will be thrown if it is invalid.


    String namespace = null;
    String prefix = null;
    int indexOfNSSep = qname.indexOf(':");

    if (indexOfNSSep > 0)
    {
      prefix = qname.substring(0, indexOfNSSep);

      if (prefix.equals("xml"))
      {
        namespace = S_XMLNAMESPACEURI;
      }
      // Do we want this?
      else if (prefix.equals("xmlns"))
      {
        return;
      }
      else
      {
        int depth = namespaces.size();

        for (int i = depth - 1; i >= 0; i--)
        {
          NameSpace ns = (NameSpace) namespaces.elementAt(i);

          while (null != ns)
          {
            if ((null != ns.m_prefix) && prefix.equals(ns.m_prefix))
            {
              namespace = ns.m_uri;
              i = -1;

              break;
            }

            ns = ns.m_next;
          }
        }
      }

      if (null == namespace)
      {
        throw new RuntimeException(
          XMLMessages.createXMLMessage(
            XMLErrorResources.ER_PREFIX_MUST_RESOLVE,
            new Object[]{ prefix }));  //"Prefix must resolve to a namespace: "+prefix);
      }
    }

    _localName = (indexOfNSSep < 0)
                 ? qname : qname.substring(indexOfNSSep + 1);
                 
    if (validate)
    {
        if ((_localName == null) || (!XMLChar.isValidNCName(_localName))) 
        {
           throw new IllegalArgumentException(XMLMessages.createXMLMessage(
            XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
        }
    }                 
    _namespaceURI = namespace;
    _prefix = prefix;
    m_hashCode = toString().hashCode();
  
Methods Summary
public booleanequals(java.lang.String ns, java.lang.String localPart)
Override equals and agree that we're equal if the passed object is a string and it matches the name of the arg.

param
ns Namespace URI to compare to
param
localPart Local part of qualified name to compare to
return
True if the local name and uri match


    String thisnamespace = getNamespaceURI();

    return getLocalName().equals(localPart)
           && (((null != thisnamespace) && (null != ns))
               ? thisnamespace.equals(ns)
               : ((null == thisnamespace) && (null == ns)));
  
public booleanequals(java.lang.Object object)
Override equals and agree that we're equal if the passed object is a QName and it matches the name of the arg.

param
qname Qualified name to compare to
return
True if the qualified names are equal


    if (object == this)
      return true;

    if (object instanceof QName) {
      QName qname = (QName) object;
      String thisnamespace = getNamespaceURI();
      String thatnamespace = qname.getNamespaceURI();

      return getLocalName().equals(qname.getLocalName())
             && (((null != thisnamespace) && (null != thatnamespace))
                 ? thisnamespace.equals(thatnamespace)
                 : ((null == thisnamespace) && (null == thatnamespace)));
    }
    else
      return false;
  
public java.lang.StringgetLocalName()
Returns the local part of the qualified name.

return
The local part of the qualified name

    return _localName;
  
public java.lang.StringgetLocalPart()
Get the local part of the qualified name.

return
the local part of the qualified name

    return getLocalName();
  
public static java.lang.StringgetLocalPart(java.lang.String qname)
Returns the local name of the given node.

param
qname Input name
return
Local part of the name if prefixed, or the given name if not


    int index = qname.indexOf(':");

    return (index < 0) ? qname : qname.substring(index + 1);
  
public java.lang.StringgetNamespace()
Get the namespace of the qualified name.

return
the namespace URI of the qualified name

    return getNamespaceURI();
  
public java.lang.StringgetNamespaceURI()
Returns the namespace URI. Returns null if the namespace URI is not known.

return
The namespace URI, or null

    return _namespaceURI;
  
public java.lang.StringgetPrefix()
Returns the namespace prefix. Returns null if the namespace prefix is not known.

return
The namespace prefix, or null

    return _prefix;
  
public static java.lang.StringgetPrefixFromXMLNSDecl(java.lang.String attRawName)
This function tells if a raw attribute name is a xmlns attribute.

param
attRawName Raw name of attribute
return
Prefix of attribute


    int index = attRawName.indexOf(':");

    return (index >= 0) ? attRawName.substring(index + 1) : "";
  
public static java.lang.StringgetPrefixPart(java.lang.String qname)
Returns the local name of the given node.

param
qname Input name
return
Prefix of name or empty string if none there


    int index = qname.indexOf(':");

    return (index >= 0) ? qname.substring(0, index) : "";
  
public static com.sun.org.apache.xml.internal.utils.QNamegetQNameFromString(java.lang.String name)
Given a string, create and return a QName object

param
name String to use to create QName
return
a QName object


    StringTokenizer tokenizer = new StringTokenizer(name, "{}", false);
    QName qname;
    String s1 = tokenizer.nextToken();
    String s2 = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null;

    if (null == s2)
      qname = new QName(null, s1);
    else
      qname = new QName(s1, s2);

    return qname;
  
public inthashCode()
Return the cached hashcode of the qualified name.

return
the cached hashcode of the qualified name

    return m_hashCode;
  
public static booleanisXMLNSDecl(java.lang.String attRawName)
This function tells if a raw attribute name is a xmlns attribute.

param
attRawName Raw name of attribute
return
True if the attribute starts with or is equal to xmlns


    return (attRawName.startsWith("xmlns")
            && (attRawName.equals("xmlns")
                || attRawName.startsWith("xmlns:")));
  
public java.lang.StringtoNamespacedString()
Return the string representation of the qualified name using the the '{ns}foo' notation. Performs string concatenation, so beware of performance issues.

return
the string representation of the namespace


    return (_namespaceURI != null
              ? ("{"+_namespaceURI + "}" + _localName) : _localName);
  
public java.lang.StringtoString()
Return the string representation of the qualified name, using the prefix if available, or the '{ns}foo' notation if not. Performs string concatenation, so beware of performance issues.

return
the string representation of the namespace


    return _prefix != null
           ? (_prefix + ":" + _localName)
           : (_namespaceURI != null
              ? ("{"+_namespaceURI + "}" + _localName) : _localName);