QNamepublic class QName extends Object implements SerializableClass 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." |
Fields Summary |
---|
static final long | serialVersionUID | protected String | _localNameThe local name. | protected String | _namespaceURIThe namespace URI. | protected String | _prefixThe namespace prefix. | public static final String | S_XMLNAMESPACEURIThe XML namespace. | private int | m_hashCodeThe 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.
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.
_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) || (!XML11Char.isXML11ValidNCName(_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.
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.
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) || (!XML11Char.isXML11ValidNCName(_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.
this(namespaceURI, localName, false);
| public QName(String namespaceURI, String localName, boolean validate)Constructs a new QName with the specified namespace URI and
local name.
// 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 (!XML11Char.isXML11ValidNCName(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.
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.
// 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 (!XML11Char.isXML11ValidNCName(localName))
{
throw new IllegalArgumentException(XMLMessages.createXMLMessage(
XMLErrorResources.ER_ARG_LOCALNAME_INVALID,null )); //"Argument 'localName' not a valid NCName");
}
if ((null != prefix) && (!XML11Char.isXML11ValidNCName(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.
this(localName, false);
| public QName(String localName, boolean validate)Construct a QName from a string, without namespace resolution. Good
for a few odd cases.
// 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 (!XML11Char.isXML11ValidNCName(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.
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.
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) || (!XML11Char.isXML11ValidNCName(_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 boolean | equals(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.
String thisnamespace = getNamespaceURI();
return getLocalName().equals(localPart)
&& (((null != thisnamespace) && (null != ns))
? thisnamespace.equals(ns)
: ((null == thisnamespace) && (null == ns)));
| public boolean | equals(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.
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.String | getLocalName()Returns the local part of the qualified name.
return _localName;
| public java.lang.String | getLocalPart()Get the local part of the qualified name.
return getLocalName();
| public static java.lang.String | getLocalPart(java.lang.String qname)Returns the local name of the given node.
int index = qname.indexOf(':");
return (index < 0) ? qname : qname.substring(index + 1);
| public java.lang.String | getNamespace()Get the namespace of the qualified name.
return getNamespaceURI();
| public java.lang.String | getNamespaceURI()Returns the namespace URI. Returns null if the namespace URI
is not known.
return _namespaceURI;
| public java.lang.String | getPrefix()Returns the namespace prefix. Returns null if the namespace
prefix is not known.
return _prefix;
| public static java.lang.String | getPrefixFromXMLNSDecl(java.lang.String attRawName)This function tells if a raw attribute name is a
xmlns attribute.
int index = attRawName.indexOf(':");
return (index >= 0) ? attRawName.substring(index + 1) : "";
| public static java.lang.String | getPrefixPart(java.lang.String qname)Returns the local name of the given node.
int index = qname.indexOf(':");
return (index >= 0) ? qname.substring(0, index) : "";
| public static com.sun.org.apache.xml.internal.utils.QName | getQNameFromString(java.lang.String name)Given a string, create and 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 int | hashCode()Return the cached hashcode of the qualified name.
return m_hashCode;
| public static boolean | isXMLNSDecl(java.lang.String attRawName)This function tells if a raw attribute name is a
xmlns attribute.
return (attRawName.startsWith("xmlns")
&& (attRawName.equals("xmlns")
|| attRawName.startsWith("xmlns:")));
| public java.lang.String | toNamespacedString()Return the string representation of the qualified name using the
the '{ns}foo' notation. Performs
string concatenation, so beware of performance issues.
return (_namespaceURI != null
? ("{"+_namespaceURI + "}" + _localName) : _localName);
| public java.lang.String | toString()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 _prefix != null
? (_prefix + ":" + _localName)
: (_namespaceURI != null
? ("{"+_namespaceURI + "}" + _localName) : _localName);
|
|