Home | History | Annotate | Download | only in serializer
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one
      3  * or more contributor license agreements. See the NOTICE file
      4  * distributed with this work for additional information
      5  * regarding copyright ownership. The ASF licenses this file
      6  * to you under the Apache License, Version 2.0 (the  "License");
      7  * you may not use this file except in compliance with the License.
      8  * You may obtain a copy of the License at
      9  *
     10  *     http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software
     13  * distributed under the License is distributed on an "AS IS" BASIS,
     14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  * See the License for the specific language governing permissions and
     16  * limitations under the License.
     17  */
     18 /*
     19  * $Id: ExtendedContentHandler.java 468654 2006-10-28 07:09:23Z minchau $
     20  */
     21 package org.apache.xml.serializer;
     22 
     23 import javax.xml.transform.SourceLocator;
     24 
     25 import org.xml.sax.SAXException;
     26 
     27 /**
     28  * This interface describes extensions to the SAX ContentHandler interface.
     29  * It is intended to be used by a serializer. The methods on this interface will
     30  * implement SAX- like behavior. This allows the gradual collection of
     31  * information rather than having it all up front. For example the call
     32  * <pre>
     33  * startElement(namespaceURI,localName,qName,atts)
     34  * </pre>
     35  * could be replaced with the calls
     36  * <pre>
     37  * startElement(namespaceURI,localName,qName)
     38  * addAttributes(atts)
     39  * </pre>
     40  * If there are no attributes the second call can be dropped. If attributes are
     41  * to be added one at a time with calls to
     42  * <pre>
     43  * addAttribute(namespaceURI, localName, qName, type, value)
     44  * </pre>
     45  * @xsl.usage internal
     46  */
     47 public interface ExtendedContentHandler extends org.xml.sax.ContentHandler
     48 {
     49     /**
     50      * Add at attribute to the current element
     51      * @param uri the namespace URI of the attribute name
     52      * @param localName the local name of the attribute (without prefix)
     53      * @param rawName the qualified name of the attribute
     54      * @param type the attribute type typically character data (CDATA)
     55      * @param value the value of the attribute
     56      * @param XSLAttribute true if the added attribute is coming from an xsl:attribute element
     57      * @throws SAXException
     58      */
     59     public void addAttribute(
     60         String uri,
     61         String localName,
     62         String rawName,
     63         String type,
     64         String value,
     65         boolean XSLAttribute)
     66         throws SAXException;
     67     /**
     68      * Add attributes to the current element
     69      * @param atts the attributes to add.
     70      * @throws SAXException
     71      */
     72     public void addAttributes(org.xml.sax.Attributes atts)
     73         throws org.xml.sax.SAXException;
     74     /**
     75      * Add an attribute to the current element. The namespace URI of the
     76      * attribute will be calculated from the prefix of qName. The local name
     77      * will be derived from qName and the type will be assumed to be "CDATA".
     78      * @param qName
     79      * @param value
     80      */
     81     public void addAttribute(String qName, String value);
     82 
     83     /**
     84      * This method is used to notify of a character event, but passing the data
     85      * as a character String rather than the standard character array.
     86      * @param chars the character data
     87      * @throws SAXException
     88      */
     89     public void characters(String chars) throws SAXException;
     90 
     91     /**
     92      * This method is used to notify of a character event, but passing the data
     93      * as a DOM Node rather than the standard character array.
     94      * @param node a DOM Node containing text.
     95      * @throws SAXException
     96      */
     97     public void characters(org.w3c.dom.Node node) throws org.xml.sax.SAXException;
     98     /**
     99      * This method is used to notify that an element has ended. Unlike the
    100      * standard SAX method
    101      * <pre>
    102      * endElement(namespaceURI,localName,qName)
    103      * </pre>
    104      * only the last parameter is passed. If needed the serializer can derive
    105      * the localName from the qualified name and derive the namespaceURI from
    106      * its implementation.
    107      * @param elemName the fully qualified element name.
    108      * @throws SAXException
    109      */
    110     public void endElement(String elemName) throws SAXException;
    111 
    112     /**
    113      * This method is used to notify that an element is starting.
    114      * This method is just like the standard SAX method
    115      * <pre>
    116      * startElement(uri,localName,qname,atts)
    117      * </pre>
    118      * but without the attributes.
    119      * @param uri the namespace URI of the element
    120      * @param localName the local name (without prefix) of the element
    121      * @param qName the qualified name of the element
    122      *
    123      * @throws SAXException
    124      */
    125     public void startElement(String uri, String localName, String qName)
    126         throws org.xml.sax.SAXException;
    127 
    128     /**
    129      * This method is used to notify of the start of an element
    130      * @param qName the fully qualified name of the element
    131      * @throws SAXException
    132      */
    133     public void startElement(String qName) throws SAXException;
    134     /**
    135      * This method is used to notify that a prefix mapping is to start, but
    136      * after an element is started. The SAX method call
    137      * <pre>
    138      * startPrefixMapping(prefix,uri)
    139      * </pre>
    140      * is used just before an element starts and applies to the element to come,
    141      * not to the current element.  This method applies to the current element.
    142      * For example one could make the calls in this order:
    143      * <pre>
    144      * startElement("prfx8:elem9")
    145      * namespaceAfterStartElement("http://namespace8","prfx8")
    146      * </pre>
    147      *
    148      * @param uri the namespace URI being declared
    149      * @param prefix the prefix that maps to the given namespace
    150      * @throws SAXException
    151      */
    152     public void namespaceAfterStartElement(String uri, String prefix)
    153         throws SAXException;
    154 
    155     /**
    156      * This method is used to notify that a prefix maping is to start, which can
    157      * be for the current element, or for the one to come.
    158      * @param prefix the prefix that maps to the given URI
    159      * @param uri the namespace URI of the given prefix
    160      * @param shouldFlush if true this call is like the SAX
    161      * startPrefixMapping(prefix,uri) call and the mapping applies to the
    162      * element to come.  If false the mapping applies to the current element.
    163      * @return boolean false if the prefix mapping was already in effect (in
    164      * other words we are just re-declaring), true if this is a new, never
    165      * before seen mapping for the element.
    166      * @throws SAXException
    167      */
    168     public boolean startPrefixMapping(
    169         String prefix,
    170         String uri,
    171         boolean shouldFlush)
    172         throws SAXException;
    173     /**
    174      * Notify of an entity reference.
    175      * @param entityName the name of the entity
    176      * @throws SAXException
    177      */
    178     public void entityReference(String entityName) throws SAXException;
    179 
    180     /**
    181      * This method returns an object that has the current namespace mappings in
    182      * effect.
    183      *
    184      * @return NamespaceMappings an object that has the current namespace
    185      * mappings in effect.
    186      */
    187     public NamespaceMappings getNamespaceMappings();
    188     /**
    189      * This method returns the prefix that currently maps to the given namespace
    190      * URI.
    191      * @param uri the namespace URI
    192      * @return String the prefix that currently maps to the given URI.
    193      */
    194     public String getPrefix(String uri);
    195     /**
    196      * This method gets the prefix associated with a current element or
    197      * attribute name.
    198      * @param name the qualified name of an element, or attribute
    199      * @param isElement true if it is an element name, false if it is an
    200      * atttribute name
    201      * @return String the namespace URI associated with the element or
    202      * attribute.
    203      */
    204     public String getNamespaceURI(String name, boolean isElement);
    205     /**
    206      * This method returns the namespace URI currently associated with the
    207      * prefix.
    208      * @param prefix a prefix of an element or attribute.
    209      * @return String the namespace URI currently associated with the prefix.
    210      */
    211     public String getNamespaceURIFromPrefix(String prefix);
    212 
    213     /**
    214      * This method is used to set the source locator, which might be used to
    215      * generated an error message.
    216      * @param locator the source locator
    217      */
    218     public void setSourceLocator(SourceLocator locator);
    219 
    220     // Bit constants for addUniqueAttribute().
    221 
    222     // The attribute value contains no bad characters. A "bad" character is one which
    223     // is greater than 126 or it is one of '<', '>', '&' or '"'.
    224     public static final int NO_BAD_CHARS = 0x1;
    225 
    226     // An HTML empty attribute (e.g. <OPTION selected>).
    227     public static final int HTML_ATTREMPTY = 0x2;
    228 
    229     // An HTML URL attribute
    230     public static final int HTML_ATTRURL = 0x4;
    231 
    232     /**
    233      * Add a unique attribute to the current element.
    234      * The attribute is guaranteed to be unique here. The serializer can write
    235      * it out immediately without saving it in a table first. The integer
    236      * flag contains information about the attribute, which helps the serializer
    237      * to decide whether a particular processing is needed.
    238      *
    239      * @param qName the fully qualified attribute name.
    240      * @param value the attribute value
    241      * @param flags a bitwise flag
    242      */
    243     public void addUniqueAttribute(String qName, String value, int flags)
    244         throws SAXException;
    245 
    246     /**
    247      * Add an attribute from an xsl:attribute element.
    248      * @param qName the qualified attribute name (prefix:localName)
    249      * @param value the attributes value
    250      * @param uri the uri that the prefix of the qName is mapped to.
    251      */
    252     public void addXSLAttribute(String qName, final String value, final String uri);
    253 
    254     /**
    255      * Add at attribute to the current element, not from an xsl:attribute
    256      * element.
    257      * @param uri the namespace URI of the attribute name
    258      * @param localName the local name of the attribute (without prefix)
    259      * @param rawName the qualified name of the attribute
    260      * @param type the attribute type typically character data (CDATA)
    261      * @param value the value of the attribute
    262      * @throws SAXException
    263      */
    264     public void addAttribute(
    265         String uri,
    266         String localName,
    267         String rawName,
    268         String type,
    269         String value)
    270         throws SAXException;
    271 }
    272