relaxng.h 5.9 KB

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