Package net.sf.saxon.om
Class NamePool
java.lang.Object
net.sf.saxon.om.NamePool
- All Implemented Interfaces:
Serializable
An object representing a collection of XML names, each containing a Namespace URI,
a Namespace prefix, and a local name; plus a collection of namespaces, each
consisting of a prefix/URI pair.
The equivalence betweem names depends only on the URI and the local name. The prefix is retained for documentary purposes only: it is useful when reconstructing a document to use prefixes that the user is familiar with.
The NamePool eliminates duplicate names if they have the same prefix, uri, and local part. It retains duplicates if they have different prefixes
- Author:
- Michael H. Kay
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
FP_MASK is a mask used to obtain a fingerprint from a nameCode.(package private) net.sf.saxon.om.NamePool.NameEntry[]
static final int
(package private) String[]
(package private) String[][]
(package private) short
(package private) String[]
(package private) short
static final int
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
Allocate a name from the pool, or a new Name if there is not a matching one thereint
Allocate a name from the pool, or a new Name if there is not a matching one thereint
allocateClarkName
(String expandedName) Allocate a fingerprint given a Clark Nameshort
allocateCodeForURI
(String uri) Allocate the uri code for a given URI; create one if not foundint
allocateLexicalQName
(CharSequence qname, boolean useDefault, NamespaceResolver resolver, NameChecker checker) Get the nameCode for a lexical QName, given a namespace resolver.int
allocateNamespaceCode
(int namecode) Allocate a namespace code for the prefix/URI of a given namecodeint
allocateNamespaceCode
(String prefix, String uri) Allocate the namespace code for a namespace prefix/URI pair.void
Diagnostic print of the namepool contents.getClarkName
(int nameCode) Get the Clark form of a name, given its name code or fingerprintgetClientData
(Class key) Retrieve client data on behalf of a user of the namepoolshort
getCodeForPrefix
(String prefix) Get the prefix code for a given Prefixshort
getCodeForURI
(String uri) Get the uri code for a given URIstatic NamePool
Get the singular default NamePoolgetDisplayName
(int nameCode) Get the display form of a name (the QName), given its name code or fingerprintint
getFingerprint
(String uri, String localName) Get a fingerprint for the name with a given uri and local name.int
getFingerprintForExpandedName
(String expandedName) Get fingerprint for expanded name in {uri}local formatgetLocalName
(int nameCode) Get the local part of a name, given its name code or fingerprintint
getNamespaceCode
(int namecode) Allocate a namespace code for a given namecodeint
getNamespaceCode
(String prefix, String uri) Get the existing namespace code for a namespace prefix/URI pair.getPrefix
(int nameCode) Get the prefix part of a name, given its name code or fingerprintgetPrefixFromNamespaceCode
(int code) Get the namespace prefix from a namespace code.static int
getPrefixIndex
(int nameCode) Get the prefix index from a namecodegetPrefixWithIndex
(short uriCode, int index) Get a prefix among all the prefixes used with a given URI, given its indexgetURI
(int nameCode) Get the namespace-URI of a name, given its name code or fingerprintshort
getURICode
(int nameCode) Get the URI code of a name, given its name code or fingerprintgetURIFromNamespaceCode
(int code) Get the namespace URI from a namespace code.getURIFromURICode
(short code) Get the namespace URI from a URI code.static String[]
parseClarkName
(String expandedName) Parse a Clark-format expanded name, returning the URI and local namevoid
setClientData
(Class key, Object value) Save client data on behalf of a user of the namepoolstatic void
setDefaultNamePool
(NamePool pool) Set the default NamePool (used after loading a compiled stylesheet)void
Statistics summarizing the namepool contents.Suggest a prefix for a given URI.
-
Field Details
-
FP_MASK
public static final int FP_MASKFP_MASK is a mask used to obtain a fingerprint from a nameCode. Given a nameCode nc, the fingerprint isnc invalid input: '&' NamePool.FP_MASK
. (In practice, Saxon code often uses the literal constant 0xfffff.) The difference between a nameCode is that a nameCode contains information about the prefix of a name, the fingerprint depends only on the namespace URI and local name. Note that the "null" nameCode (-1) does not produce the "null" fingerprint (also -1) when this mask is applied.- See Also:
-
USER_DEFINED_MASK
public static final int USER_DEFINED_MASK- See Also:
-
MAX_PREFIXES_PER_URI
public static final int MAX_PREFIXES_PER_URI- See Also:
-
hashslots
net.sf.saxon.om.NamePool.NameEntry[] hashslots -
prefixes
String[] prefixes -
prefixesUsed
short prefixesUsed -
uris
String[] uris -
prefixesForUri
String[][] prefixesForUri -
urisUsed
short urisUsed
-
-
Constructor Details
-
NamePool
public NamePool()
-
-
Method Details
-
getDefaultNamePool
Get the singular default NamePool -
setDefaultNamePool
Set the default NamePool (used after loading a compiled stylesheet) -
allocateNamespaceCode
Allocate the namespace code for a namespace prefix/URI pair. Create it if not already present- Parameters:
prefix
- the namespace prefixuri
- the namespace URI- Returns:
- an integer code identifying the namespace. The namespace code identifies both the prefix and the URI.
-
getNamespaceCode
Get the existing namespace code for a namespace prefix/URI pair.- Returns:
- -1 if there is none present
-
getNamespaceCode
public int getNamespaceCode(int namecode) Allocate a namespace code for a given namecode- Parameters:
namecode
- a code identifying an expanded QName, e.g. of an element or attribute- Returns:
- a code identifying the namespace used in the given name. The namespace code identifies both the prefix and the URI. Return -1 if no namespace code has been allocated (in this case the caller should call allocateNamespaceCode() to get one).
-
getPrefixIndex
public static int getPrefixIndex(int nameCode) Get the prefix index from a namecode- Parameters:
nameCode
- the name code- Returns:
- the prefix index. A value of zero means the name is unprefixed (which in the case of an attribute, means that it is in the null namespace)
-
allocateCodeForURI
Allocate the uri code for a given URI; create one if not found -
getCodeForURI
Get the uri code for a given URI- Returns:
- -1 if not present in the name pool
-
getCodeForPrefix
Get the prefix code for a given Prefix- Returns:
- -1 if not found
-
suggestPrefixForURI
Suggest a prefix for a given URI. If there are several, it's undefined which one is returned. If there are no prefixes registered for this URI, return null. -
getPrefixWithIndex
Get a prefix among all the prefixes used with a given URI, given its index- Returns:
- the prefix with the given index. If the index is 0, the prefix is always "".
-
allocate
Allocate a name from the pool, or a new Name if there is not a matching one there- Parameters:
prefix
-uri
- - the namespace URI. The null URI is represented as an empty string.localName
-- Returns:
- an integer (the "namecode") identifying the name within the namepool. The Name itself may be retrieved using the getName(int) method
-
allocate
Allocate a name from the pool, or a new Name if there is not a matching one there- Parameters:
prefix
- - the namespace prefixuriCode
- - the code of the URIlocalName
- - the local part of the QName- Returns:
- an integer (the "namecode") identifying the name within the namepool.
-
allocateNamespaceCode
public int allocateNamespaceCode(int namecode) Allocate a namespace code for the prefix/URI of a given namecode- Parameters:
namecode
- a code identifying an expanded QName, e.g. of an element or attribute- Returns:
- a code identifying the namespace used in the given name. The namespace code identifies both the prefix and the URI.
-
getURI
Get the namespace-URI of a name, given its name code or fingerprint- Returns:
- the namespace URI corresponding to this name code. Returns "" for the null namespace.
- Throws:
IllegalArgumentException
- if the nameCode is not known to the NamePool.
-
getURICode
public short getURICode(int nameCode) Get the URI code of a name, given its name code or fingerprint -
getLocalName
Get the local part of a name, given its name code or fingerprint -
getPrefix
Get the prefix part of a name, given its name code or fingerprint -
getDisplayName
Get the display form of a name (the QName), given its name code or fingerprint -
getClarkName
Get the Clark form of a name, given its name code or fingerprint- Returns:
- the local name if the name is in the null namespace, or "{uri}local" otherwise. The name is always interned.
-
allocateClarkName
Allocate a fingerprint given a Clark Name -
parseClarkName
Parse a Clark-format expanded name, returning the URI and local name -
getFingerprint
Get a fingerprint for the name with a given uri and local name. These must be present in the NamePool. The fingerprint has the property that if two fingerprint are the same, the names are the same (ie. same local name and same URI).- Returns:
- -1 if not found
-
getURIFromNamespaceCode
Get the namespace URI from a namespace code. -
getURIFromURICode
Get the namespace URI from a URI code. -
getPrefixFromNamespaceCode
Get the namespace prefix from a namespace code. -
allocateLexicalQName
public int allocateLexicalQName(CharSequence qname, boolean useDefault, NamespaceResolver resolver, NameChecker checker) throws DynamicError Get the nameCode for a lexical QName, given a namespace resolver.- Parameters:
qname
- the lexical QName.useDefault
- if true, an absent prefix is resolved by the NamespaceResolver to the namespace URI assigned to the prefix "". If false, an absent prefix is interpreted as meaning the name is in no namespace.checker
- NameChecker used to check names against the XML 1.0 or 1.1 specification- Returns:
- the corresponding nameCode
- Throws:
DynamicError
- if the string is not a valid lexical QName or if the namespace prefix has not been declared*
-
getFingerprintForExpandedName
Get fingerprint for expanded name in {uri}local format -
setClientData
Save client data on behalf of a user of the namepool -
getClientData
Retrieve client data on behalf of a user of the namepool -
diagnosticDump
public void diagnosticDump()Diagnostic print of the namepool contents. -
statistics
public void statistics()Statistics summarizing the namepool contents. This method outputs summary statistical information to System.err
-