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