Home | History | Annotate | Download | only in libxml
      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 XMLPUBFUN void XMLCALL
    122 		    xmlRelaxNGCleanupTypes	(void);
    123 
    124 /*
    125  * Interfaces for parsing.
    126  */
    127 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
    128 		    xmlRelaxNGNewParserCtxt	(const char *URL);
    129 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
    130 		    xmlRelaxNGNewMemParserCtxt	(const char *buffer,
    131 						 int size);
    132 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
    133 		    xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
    134 
    135 XMLPUBFUN int XMLCALL
    136 		    xmlRelaxParserSetFlag	(xmlRelaxNGParserCtxtPtr ctxt,
    137 						 int flag);
    138 
    139 XMLPUBFUN void XMLCALL
    140 		    xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt);
    141 XMLPUBFUN void XMLCALL
    142 		    xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
    143 					 xmlRelaxNGValidityErrorFunc err,
    144 					 xmlRelaxNGValidityWarningFunc warn,
    145 					 void *ctx);
    146 XMLPUBFUN int XMLCALL
    147 		    xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
    148 					 xmlRelaxNGValidityErrorFunc *err,
    149 					 xmlRelaxNGValidityWarningFunc *warn,
    150 					 void **ctx);
    151 XMLPUBFUN void XMLCALL
    152 		    xmlRelaxNGSetParserStructuredErrors(
    153 					 xmlRelaxNGParserCtxtPtr ctxt,
    154 					 xmlStructuredErrorFunc serror,
    155 					 void *ctx);
    156 XMLPUBFUN xmlRelaxNGPtr XMLCALL
    157 		    xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt);
    158 XMLPUBFUN void XMLCALL
    159 		    xmlRelaxNGFree		(xmlRelaxNGPtr schema);
    160 #ifdef LIBXML_OUTPUT_ENABLED
    161 XMLPUBFUN void XMLCALL
    162 		    xmlRelaxNGDump		(FILE *output,
    163 					 xmlRelaxNGPtr schema);
    164 XMLPUBFUN void XMLCALL
    165 		    xmlRelaxNGDumpTree	(FILE * output,
    166 					 xmlRelaxNGPtr schema);
    167 #endif /* LIBXML_OUTPUT_ENABLED */
    168 /*
    169  * Interfaces for validating
    170  */
    171 XMLPUBFUN void XMLCALL
    172 		    xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
    173 					 xmlRelaxNGValidityErrorFunc err,
    174 					 xmlRelaxNGValidityWarningFunc warn,
    175 					 void *ctx);
    176 XMLPUBFUN int XMLCALL
    177 		    xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
    178 					 xmlRelaxNGValidityErrorFunc *err,
    179 					 xmlRelaxNGValidityWarningFunc *warn,
    180 					 void **ctx);
    181 XMLPUBFUN void XMLCALL
    182 			xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
    183 					  xmlStructuredErrorFunc serror, void *ctx);
    184 XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
    185 		    xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema);
    186 XMLPUBFUN void XMLCALL
    187 		    xmlRelaxNGFreeValidCtxt	(xmlRelaxNGValidCtxtPtr ctxt);
    188 XMLPUBFUN int XMLCALL
    189 		    xmlRelaxNGValidateDoc	(xmlRelaxNGValidCtxtPtr ctxt,
    190 						 xmlDocPtr doc);
    191 /*
    192  * Interfaces for progressive validation when possible
    193  */
    194 XMLPUBFUN int XMLCALL
    195 		    xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
    196 					 xmlDocPtr doc,
    197 					 xmlNodePtr elem);
    198 XMLPUBFUN int XMLCALL
    199 		    xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
    200 					 const xmlChar *data,
    201 					 int len);
    202 XMLPUBFUN int XMLCALL
    203 		    xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
    204 					 xmlDocPtr doc,
    205 					 xmlNodePtr elem);
    206 XMLPUBFUN int XMLCALL
    207 		    xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt,
    208 					 xmlDocPtr doc,
    209 					 xmlNodePtr elem);
    210 
    211 #ifdef __cplusplus
    212 }
    213 #endif
    214 
    215 #endif /* LIBXML_SCHEMAS_ENABLED */
    216 
    217 #endif /* __XML_RELAX_NG__ */
    218