SAX2DTM2 is an optimized version of SAX2DTM which is used in non-incremental situation.
It is used as the super class of the XSLTC SAXImpl. Many of the interfaces in SAX2DTM
and DTMDefaultBase are overridden in SAX2DTM2 in order to allow fast, efficient
access to the DTM model. Some nested iterators in DTMDefaultBaseIterators
are also overridden in SAX2DTM2 for performance reasons.
Performance is the biggest consideration in the design of SAX2DTM2. To make the code most
efficient, the incremental support is dropped in SAX2DTM2, which means that you should not
use it in incremental situation. To reduce the overhead of pulling data from the DTM model,
a few core interfaces in SAX2DTM2 have direct access to the internal arrays of the
SuballocatedIntVectors.
The design of SAX2DTM2 may limit its extensibilty. If you have a reason to extend the
SAX2DTM model, please extend from SAX2DTM instead of this class.
TODO: This class is currently only used by XSLTC. We need to investigate the possibility
of also using it in Xalan-J Interpretive. Xalan's performance is likely to get an instant
boost if we use SAX2DTM2 instead of SAX2DTM in non-incremental case.
%MK% The code in this class is critical to the XSLTC_DTM performance. Be very careful
when making changes here!
SAX2DTM2
public SAX2DTM2(DTMManager mgr,
Source source,
int dtmIdentity,
DTMWSFilter whiteSpaceFilter,
XMLStringFactory xstringfactory,
boolean doIndexing,
int blocksize,
boolean usePrevsib,
boolean buildIdIndex,
boolean newNameTable)
Construct a SAX2DTM2 object using the given block size.
_exptype
public final int _exptype(int identity)
Override DTMDefaultBase._exptype() by dropping the incremental code.
This one is less efficient than _exptype2. It is only used during
DTM building. _exptype2 is used after the document is fully built.
_exptype2
public final int _exptype2(int identity)
The optimized version of DTMDefaultBase._exptype().
identity
- A node identity, which must not be equal to
DTM.NULL
_exptype2Type
public final int _exptype2Type(int exptype)
Return the node type from the expanded type
_firstch2
public final int _firstch2(int identity)
The optimized version of DTMDefaultBase._firstch().
identity
- A node identity, which must not be equal to
DTM.NULL
_nextsib2
public final int _nextsib2(int identity)
The optimized version of DTMDefaultBase._nextsib().
identity
- A node identity, which must not be equal to
DTM.NULL
_parent2
public final int _parent2(int identity)
The optimized version of DTMDefaultBase._parent().
identity
- A node identity, which must not be equal to
DTM.NULL
_type2
public final int _type2(int identity)
The optimized version of DTMDefaultBase._type().
identity
- A node identity, which must not be equal to
DTM.NULL
comment
public void comment(ch[] ,
int start,
int length)
throws SAXException
Report an XML comment anywhere in the document.
This callback will be used for comments inside or outside the
document element, including comments in the external DTD
subset (if read).
- comment in interface LexicalHandler
- comment in interface SAX2DTM
start
- The starting position in the array.length
- The number of characters to use from the array.
SAXException
- The application may raise an exception.
dispatchCharactersEvents
public final void dispatchCharactersEvents(int nodeHandle,
ContentHandler ch,
boolean normalize)
throws SAXException
The optimized version of SAX2DTM.dispatchCharactersEvents(int, ContentHandler, boolean).
Directly call the
characters method on the passed ContentHandler for the
string-value of the given node (see http://www.w3.org/TR/xpath#data-model
for the definition of a node's string-value). Multiple calls to the
ContentHandler's characters methods may well occur for a single call to
this method.
- dispatchCharactersEvents in interface DTM
- dispatchCharactersEvents in interface SAX2DTM
nodeHandle
- The node ID.ch
- A non-null reference to a ContentHandler.normalize
- true if the content should be normalized according to
the rules for the XPath
normalize-space
function.
SAXException
-
endElement
public void endElement(String uri,
String localName,
String qName)
throws SAXException
Receive notification of the end of an element.
By default, do nothing. Application writers may override this
method in a subclass to take specific actions at the end of
each element (such as finalising a tree node or writing
output to a file).
- endElement in interface ContentHandler
- endElement in interface SAX2DTM
uri
- The Namespace URI, or the empty string if the
element has no Namespace URI or if Namespace
processing is not being performed.localName
- The local name (without prefix), or the
empty string if Namespace processing is not being
performed.qName
- The qualified XML 1.0 name (with prefix), or the
empty string if qualified names are not available.
SAXException
- Any SAX exception, possibly
wrapping another exception.
ContentHandler.endElement(String,String,String)
getExpandedTypeID2
public final int getExpandedTypeID2(int nodeHandle)
The optimized version of DTMDefaultBase.getExpandedTypeID(int).
This one is only used by DOMAdapter.getExpandedTypeID(int), which
is mostly called from the compiled translets.
getFirstAttribute
public final int getFirstAttribute(int nodeHandle)
The optimized version of DTMDefaultBase.getFirstAttribute().
Given a node handle, get the index of the node's first attribute.
- getFirstAttribute in interface DTM
- getFirstAttribute in interface DTMDefaultBase
nodeHandle
- int Handle of the node.
- Handle of first attribute, or DTM.NULL to indicate none exists.
getIdForNamespace
public int getIdForNamespace(String uri)
Get a prefix either from the uri mapping, or just make
one up!
- getIdForNamespace in interface SAX2DTM
uri
- The namespace URI, which may be null.
- The prefix if there is one, or null.
getLocalName
public String getLocalName(int nodeHandle)
Override SAX2DTM.getLocalName() in SAX2DTM2.
Processing for PIs is different.
Given a node handle, return its XPath- style localname. (As defined in
Namespaces, this is the portion of the name after any colon character).
- getLocalName in interface DTM
- getLocalName in interface SAX2DTM
nodeHandle
- the id of the node.
- String Local name of this node.
getNodeName
public String getNodeName(int nodeHandle)
The optimized version of SAX2DTM.getNodeName().
Given a node handle, return its DOM-style node name. This will include
names such as #text or #document.
- getNodeName in interface DTM
- getNodeName in interface SAX2DTM
nodeHandle
- the id of the node.
- String Name of this node, which may be an empty string.
%REVIEW% Document when empty string is possible...
%REVIEW-COMMENT% It should never be empty, should it?
getNodeNameX
public final String getNodeNameX(int nodeHandle)
The optimized version of SAX2DTM.getNodeNameX().
Given a node handle, return the XPath node name. This should be the name
as described by the XPath data model, NOT the DOM- style name.
- getNodeNameX in interface DTM
- getNodeNameX in interface SAX2DTM
nodeHandle
- the id of the node.
- String Name of this node, which may be an empty string.
getNodeValue
public String getNodeValue(int nodeHandle)
Given a node handle, return its node value. This is mostly
as defined by the DOM, but may ignore some conveniences.
- getNodeValue in interface DTM
- getNodeValue in interface SAX2DTM
nodeHandle
- The node id.
- String Value of this node, or null if not
meaningful for this node type.
getStringValue
public String getStringValue()
Returns the string value of the entire tree
getStringValue
public XMLString getStringValue(int nodeHandle)
Override SAX2DTM.getStringValue(int)
This method is only used by Xalan-J Interpretive. It is not used by XSLTC.
If the caller supplies an XMLStringFactory, the getStringValue() interface
in SAX2DTM will be called. Otherwise just calls getStringValueX() and
wraps the returned String in an XMLString.
Get the string-value of a node as a String object
(see http://www.w3.org/TR/xpath#data-model
for the definition of a node's string-value).
- getStringValue in interface DTM
- getStringValue in interface SAX2DTM
nodeHandle
- The node ID.
- A string object that represents the string-value of the given node.
getStringValueX
public final String getStringValueX(int nodeHandle)
The optimized version of SAX2DTM.getStringValue(int).
%OPT% This is one of the most often used interfaces. Performance is
critical here. This one is different from SAX2DTM.getStringValue(int) in
that it returns a String instead of a XMLString.
Get the string- value of a node as a String object (see http: //www. w3.
org/TR/xpath#data- model for the definition of a node's string- value).
nodeHandle
- The node ID.
- A string object that represents the string-value of the given node.
processingInstruction
public void processingInstruction(String target,
String data)
throws SAXException
Override the processingInstruction() interface in SAX2DTM2.
%OPT% This one is different from SAX2DTM.processingInstruction()
in that we do not use extended types for PI nodes. The name of
the PI is saved in the DTMStringPool.
Receive notification of a processing instruction.
- processingInstruction in interface ContentHandler
- processingInstruction in interface SAX2DTM
target
- The processing instruction target.data
- The processing instruction data, or null if
none is supplied.
SAXException
- Any SAX exception, possibly
wrapping another exception.
ContentHandler.processingInstruction(String,String)
startElement
public void startElement(String uri,
String localName,
String qName,
Attributes attributes)
throws SAXException
Override SAX2DTM.startElement()
Receive notification of the start of an element.
By default, do nothing. Application writers may override this
method in a subclass to take specific actions at the start of
each element (such as allocating a new tree node or writing
output to a file).
- startElement in interface ContentHandler
- startElement in interface SAX2DTM
uri
- The Namespace URI, or the empty string if the
element has no Namespace URI or if Namespace
processing is not being performed.localName
- The local name (without prefix), or the
empty string if Namespace processing is not being
performed.qName
- The qualified name (with prefix), or the
empty string if qualified names are not available.attributes
- The specified or defaulted attributes.
SAXException
- Any SAX exception, possibly
wrapping another exception.
ContentHandler.startElement(String,String,String,Attributes)