1 /* 2 * Summary: implementation of the Relax-NG validation 3 * Description: implementation of the Relax-NG validation 4 * 5 * Copy: See Copyright for the status of this software. 6 * 7 * Author: Daniel Veillard 8 */ 9 10 #ifndef __XML_RELAX_NG__ 11 #define __XML_RELAX_NG__ 12 13 #include <libxml/xmlversion.h> 14 #include <libxml/hash.h> 15 #include <libxml/xmlstring.h> 16 17 #ifdef LIBXML_SCHEMAS_ENABLED 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 typedef struct _xmlRelaxNG xmlRelaxNG; 24 typedef xmlRelaxNG *xmlRelaxNGPtr; 25 26 27 /** 28 * xmlRelaxNGValidityErrorFunc: 29 * @ctx: the validation context 30 * @msg: the message 31 * @...: extra arguments 32 * 33 * Signature of an error callback from a Relax-NG validation 34 */ 35 typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, 36 const char *msg, 37 ...) LIBXML_ATTR_FORMAT(2,3); 38 39 /** 40 * xmlRelaxNGValidityWarningFunc: 41 * @ctx: the validation context 42 * @msg: the message 43 * @...: extra arguments 44 * 45 * Signature of a warning callback from a Relax-NG validation 46 */ 47 typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, 48 const char *msg, 49 ...) LIBXML_ATTR_FORMAT(2,3); 50 51 /** 52 * A schemas validation context 53 */ 54 typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt; 55 typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr; 56 57 typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt; 58 typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr; 59 60 /* 61 * xmlRelaxNGValidErr: 62 * 63 * List of possible Relax NG validation errors 64 */ 65 typedef enum { 66 XML_RELAXNG_OK = 0, 67 XML_RELAXNG_ERR_MEMORY, 68 XML_RELAXNG_ERR_TYPE, 69 XML_RELAXNG_ERR_TYPEVAL, 70 XML_RELAXNG_ERR_DUPID, 71 XML_RELAXNG_ERR_TYPECMP, 72 XML_RELAXNG_ERR_NOSTATE, 73 XML_RELAXNG_ERR_NODEFINE, 74 XML_RELAXNG_ERR_LISTEXTRA, 75 XML_RELAXNG_ERR_LISTEMPTY, 76 XML_RELAXNG_ERR_INTERNODATA, 77 XML_RELAXNG_ERR_INTERSEQ, 78 XML_RELAXNG_ERR_INTEREXTRA, 79 XML_RELAXNG_ERR_ELEMNAME, 80 XML_RELAXNG_ERR_ATTRNAME, 81 XML_RELAXNG_ERR_ELEMNONS, 82 XML_RELAXNG_ERR_ATTRNONS, 83 XML_RELAXNG_ERR_ELEMWRONGNS, 84 XML_RELAXNG_ERR_ATTRWRONGNS, 85 XML_RELAXNG_ERR_ELEMEXTRANS, 86 XML_RELAXNG_ERR_ATTREXTRANS, 87 XML_RELAXNG_ERR_ELEMNOTEMPTY, 88 XML_RELAXNG_ERR_NOELEM, 89 XML_RELAXNG_ERR_NOTELEM, 90 XML_RELAXNG_ERR_ATTRVALID, 91 XML_RELAXNG_ERR_CONTENTVALID, 92 XML_RELAXNG_ERR_EXTRACONTENT, 93 XML_RELAXNG_ERR_INVALIDATTR, 94 XML_RELAXNG_ERR_DATAELEM, 95 XML_RELAXNG_ERR_VALELEM, 96 XML_RELAXNG_ERR_LISTELEM, 97 XML_RELAXNG_ERR_DATATYPE, 98 XML_RELAXNG_ERR_VALUE, 99 XML_RELAXNG_ERR_LIST, 100 XML_RELAXNG_ERR_NOGRAMMAR, 101 XML_RELAXNG_ERR_EXTRADATA, 102 XML_RELAXNG_ERR_LACKDATA, 103 XML_RELAXNG_ERR_INTERNAL, 104 XML_RELAXNG_ERR_ELEMWRONG, 105 XML_RELAXNG_ERR_TEXTWRONG 106 } xmlRelaxNGValidErr; 107 108 /* 109 * xmlRelaxNGParserFlags: 110 * 111 * List of possible Relax NG Parser flags 112 */ 113 typedef enum { 114 XML_RELAXNGP_NONE = 0, 115 XML_RELAXNGP_FREE_DOC = 1, 116 XML_RELAXNGP_CRNG = 2 117 } xmlRelaxNGParserFlag; 118 119 XMLPUBFUN int XMLCALL 120 xmlRelaxNGInitTypes (void); 121 XML_DEPRECATED 122 XMLPUBFUN void XMLCALL 123 xmlRelaxNGCleanupTypes (void); 124 125 /* 126 * Interfaces for parsing. 127 */ 128 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL 129 xmlRelaxNGNewParserCtxt (const char *URL); 130 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL 131 xmlRelaxNGNewMemParserCtxt (const char *buffer, 132 int size); 133 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL 134 xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc); 135 136 XMLPUBFUN int XMLCALL 137 xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt, 138 int flag); 139 140 XMLPUBFUN void XMLCALL 141 xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt); 142 XMLPUBFUN void XMLCALL 143 xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, 144 xmlRelaxNGValidityErrorFunc err, 145 xmlRelaxNGValidityWarningFunc warn, 146 void *ctx); 147 XMLPUBFUN int XMLCALL 148 xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt, 149 xmlRelaxNGValidityErrorFunc *err, 150 xmlRelaxNGValidityWarningFunc *warn, 151 void **ctx); 152 XMLPUBFUN void XMLCALL 153 xmlRelaxNGSetParserStructuredErrors( 154 xmlRelaxNGParserCtxtPtr ctxt, 155 xmlStructuredErrorFunc serror, 156 void *ctx); 157 XMLPUBFUN xmlRelaxNGPtr XMLCALL 158 xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt); 159 XMLPUBFUN void XMLCALL 160 xmlRelaxNGFree (xmlRelaxNGPtr schema); 161 #ifdef LIBXML_OUTPUT_ENABLED 162 XMLPUBFUN void XMLCALL 163 xmlRelaxNGDump (FILE *output, 164 xmlRelaxNGPtr schema); 165 XMLPUBFUN void XMLCALL 166 xmlRelaxNGDumpTree (FILE * output, 167 xmlRelaxNGPtr schema); 168 #endif /* LIBXML_OUTPUT_ENABLED */ 169 /* 170 * Interfaces for validating 171 */ 172 XMLPUBFUN void XMLCALL 173 xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, 174 xmlRelaxNGValidityErrorFunc err, 175 xmlRelaxNGValidityWarningFunc warn, 176 void *ctx); 177 XMLPUBFUN int XMLCALL 178 xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt, 179 xmlRelaxNGValidityErrorFunc *err, 180 xmlRelaxNGValidityWarningFunc *warn, 181 void **ctx); 182 XMLPUBFUN void XMLCALL 183 xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt, 184 xmlStructuredErrorFunc serror, void *ctx); 185 XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL 186 xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema); 187 XMLPUBFUN void XMLCALL 188 xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt); 189 XMLPUBFUN int XMLCALL 190 xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt, 191 xmlDocPtr doc); 192 /* 193 * Interfaces for progressive validation when possible 194 */ 195 XMLPUBFUN int XMLCALL 196 xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt, 197 xmlDocPtr doc, 198 xmlNodePtr elem); 199 XMLPUBFUN int XMLCALL 200 xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt, 201 const xmlChar *data, 202 int len); 203 XMLPUBFUN int XMLCALL 204 xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt, 205 xmlDocPtr doc, 206 xmlNodePtr elem); 207 XMLPUBFUN int XMLCALL 208 xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt, 209 xmlDocPtr doc, 210 xmlNodePtr elem); 211 212 #ifdef __cplusplus 213 } 214 #endif 215 216 #endif /* LIBXML_SCHEMAS_ENABLED */ 217 218 #endif /* __XML_RELAX_NG__ */ 219