/ libxml2 / include / libxml / c14n.h
c14n.h
  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@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