Home | History | Annotate | Download | only in libxml
      1 /*
      2  * Summary: Provide Canonical XML and Exclusive XML Canonicalization
      3  * Description: the c14n modules provides a
      4  *
      5  * "Canonical XML" implementation
      6  * http://www.w3.org/TR/xml-c14n
      7  *
      8  * and an
      9  *
     10  * "Exclusive XML Canonicalization" implementation
     11  * http://www.w3.org/TR/xml-exc-c14n
     12 
     13  * Copy: See Copyright for the status of this software.
     14  *
     15  * Author: Aleksey Sanin <aleksey (at) aleksey.com>
     16  */
     17 #ifndef __XML_C14N_H__
     18 #define __XML_C14N_H__
     19 #ifdef LIBXML_C14N_ENABLED
     20 #ifdef LIBXML_OUTPUT_ENABLED
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif /* __cplusplus */
     25 
     26 #include <libxml/xmlversion.h>
     27 #include <libxml/tree.h>
     28 #include <libxml/xpath.h>
     29 
     30 /*
     31  * XML Canonicazation
     32  * http://www.w3.org/TR/xml-c14n
     33  *
     34  * Exclusive XML Canonicazation
     35  * http://www.w3.org/TR/xml-exc-c14n
     36  *
     37  * Canonical form of an XML document could be created if and only if
     38  *  a) default attributes (if any) are added to all nodes
     39  *  b) all character and parsed entity references are resolved
     40  * In order to achive this in libxml2 the document MUST be loaded with
     41  * following global setings:
     42  *
     43  *    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
     44  *    xmlSubstituteEntitiesDefault(1);
     45  *
     46  * or corresponding parser context setting:
     47  *    xmlParserCtxtPtr ctxt;
     48  *
     49  *    ...
     50  *    ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
     51  *    ctxt->replaceEntities = 1;
     52  *    ...
     53  */
     54 
     55 /*
     56  * xmlC14NMode:
     57  *
     58  * Predefined values for C14N modes
     59  *
     60  */
     61 typedef enum {
     62     XML_C14N_1_0            = 0,    /* Origianal C14N 1.0 spec */
     63     XML_C14N_EXCLUSIVE_1_0  = 1,    /* Exclusive C14N 1.0 spec */
     64     XML_C14N_1_1            = 2     /* C14N 1.1 spec */
     65 } xmlC14NMode;
     66 
     67 XMLPUBFUN int XMLCALL
     68 		xmlC14NDocSaveTo	(xmlDocPtr doc,
     69 					 xmlNodeSetPtr nodes,
     70 					 int mode, /* a xmlC14NMode */
     71 					 xmlChar **inclusive_ns_prefixes,
     72 					 int with_comments,
     73 					 xmlOutputBufferPtr buf);
     74 
     75 XMLPUBFUN int XMLCALL
     76 		xmlC14NDocDumpMemory	(xmlDocPtr doc,
     77 					 xmlNodeSetPtr nodes,
     78 					 int mode, /* a xmlC14NMode */
     79 					 xmlChar **inclusive_ns_prefixes,
     80 					 int with_comments,
     81 					 xmlChar **doc_txt_ptr);
     82 
     83 XMLPUBFUN int XMLCALL
     84 		xmlC14NDocSave		(xmlDocPtr doc,
     85 					 xmlNodeSetPtr nodes,
     86 					 int mode, /* a xmlC14NMode */
     87 					 xmlChar **inclusive_ns_prefixes,
     88 					 int with_comments,
     89 					 const char* filename,
     90 					 int compression);
     91 
     92 
     93 /**
     94  * This is the core C14N function
     95  */
     96 /**
     97  * xmlC14NIsVisibleCallback:
     98  * @user_data: user data
     99  * @node: the curent node
    100  * @parent: the parent node
    101  *
    102  * Signature for a C14N callback on visible nodes
    103  *
    104  * Returns 1 if the node should be included
    105  */
    106 typedef int (*xmlC14NIsVisibleCallback)	(void* user_data,
    107 					 xmlNodePtr node,
    108 					 xmlNodePtr parent);
    109 
    110 XMLPUBFUN int XMLCALL
    111 		xmlC14NExecute		(xmlDocPtr doc,
    112 					 xmlC14NIsVisibleCallback is_visible_callback,
    113 					 void* user_data,
    114 					 int mode, /* a xmlC14NMode */
    115 					 xmlChar **inclusive_ns_prefixes,
    116 					 int with_comments,
    117 					 xmlOutputBufferPtr buf);
    118 
    119 #ifdef __cplusplus
    120 }
    121 #endif /* __cplusplus */
    122 
    123 #endif /* LIBXML_OUTPUT_ENABLED */
    124 #endif /* LIBXML_C14N_ENABLED */
    125 #endif /* __XML_C14N_H__ */
    126 
    127