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