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