blob: f269c9ec0db27aa5ede24cb7009568c6edb03ebb [file] [log] [blame]
Daniel Veillard6eadf632003-01-23 18:29:16 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: implementation of the Relax-NG validation
3 * Description: implementation of the Relax-NG validation
Daniel Veillard6eadf632003-01-23 18:29:16 +00004 *
Daniel Veillardbe586972003-11-18 20:56:51 +00005 * Copy: See Copyright for the status of this software.
Daniel Veillard6eadf632003-01-23 18:29:16 +00006 *
Daniel Veillardbe586972003-11-18 20:56:51 +00007 * Author: Daniel Veillard
Daniel Veillard6eadf632003-01-23 18:29:16 +00008 */
9
10#ifndef __XML_RELAX_NG__
11#define __XML_RELAX_NG__
12
Igor Zlatkovic76874e42003-08-25 09:05:12 +000013#include <libxml/xmlversion.h>
Daniel Veillard6eadf632003-01-23 18:29:16 +000014#include <libxml/hash.h>
William M. Bracka2e844a2004-01-06 11:52:13 +000015#include <libxml/xmlstring.h>
Daniel Veillard6eadf632003-01-23 18:29:16 +000016
Daniel Veillarda2351322004-06-27 12:08:10 +000017#ifdef LIBXML_SCHEMAS_ENABLED
18
Daniel Veillard94394cd2003-10-29 17:07:51 +000019#ifdef __cplusplus
20extern "C" {
21#endif
22
Daniel Veillard6eadf632003-01-23 18:29:16 +000023typedef struct _xmlRelaxNG xmlRelaxNG;
24typedef xmlRelaxNG *xmlRelaxNGPtr;
25
26
27/**
Daniel Veillarddee23482008-04-11 12:58:43 +000028 * 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
Daniel Veillard6eadf632003-01-23 18:29:16 +000034 */
Patrick Monnerat44313c02013-12-12 14:59:18 +080035typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx,
36 const char *msg,
37 ...) LIBXML_ATTR_FORMAT(2,3);
Daniel Veillarddee23482008-04-11 12:58:43 +000038
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 */
Patrick Monnerat44313c02013-12-12 14:59:18 +080047typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx,
48 const char *msg,
49 ...) LIBXML_ATTR_FORMAT(2,3);
Daniel Veillard6eadf632003-01-23 18:29:16 +000050
Daniel Veillarddee23482008-04-11 12:58:43 +000051/**
52 * A schemas validation context
53 */
Daniel Veillard6eadf632003-01-23 18:29:16 +000054typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
55typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
56
57typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
58typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
59
60/*
Daniel Veillard42f12e92003-03-07 18:32:59 +000061 * xmlRelaxNGValidErr:
62 *
63 * List of possible Relax NG validation errors
64 */
65typedef enum {
66 XML_RELAXNG_OK = 0,
67 XML_RELAXNG_ERR_MEMORY,
68 XML_RELAXNG_ERR_TYPE,
69 XML_RELAXNG_ERR_TYPEVAL,
Daniel Veillardc3da18a2003-03-18 00:31:04 +000070 XML_RELAXNG_ERR_DUPID,
Daniel Veillard42f12e92003-03-07 18:32:59 +000071 XML_RELAXNG_ERR_TYPECMP,
72 XML_RELAXNG_ERR_NOSTATE,
73 XML_RELAXNG_ERR_NODEFINE,
74 XML_RELAXNG_ERR_LISTEXTRA,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000075 XML_RELAXNG_ERR_LISTEMPTY,
Daniel Veillard42f12e92003-03-07 18:32:59 +000076 XML_RELAXNG_ERR_INTERNODATA,
77 XML_RELAXNG_ERR_INTERSEQ,
78 XML_RELAXNG_ERR_INTEREXTRA,
79 XML_RELAXNG_ERR_ELEMNAME,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000080 XML_RELAXNG_ERR_ATTRNAME,
Daniel Veillard42f12e92003-03-07 18:32:59 +000081 XML_RELAXNG_ERR_ELEMNONS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000082 XML_RELAXNG_ERR_ATTRNONS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000083 XML_RELAXNG_ERR_ELEMWRONGNS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000084 XML_RELAXNG_ERR_ATTRWRONGNS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000085 XML_RELAXNG_ERR_ELEMEXTRANS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000086 XML_RELAXNG_ERR_ATTREXTRANS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000087 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,
Daniel Veillardfd573f12003-03-16 17:52:32 +0000101 XML_RELAXNG_ERR_EXTRADATA,
Daniel Veillard952379b2003-03-17 15:37:12 +0000102 XML_RELAXNG_ERR_LACKDATA,
Daniel Veillardc58f4ef2003-04-14 16:11:26 +0000103 XML_RELAXNG_ERR_INTERNAL,
104 XML_RELAXNG_ERR_ELEMWRONG,
105 XML_RELAXNG_ERR_TEXTWRONG
Daniel Veillard42f12e92003-03-07 18:32:59 +0000106} xmlRelaxNGValidErr;
107
108/*
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000109 * xmlRelaxNGParserFlags:
110 *
111 * List of possible Relax NG Parser flags
112 */
113typedef enum {
114 XML_RELAXNGP_NONE = 0,
115 XML_RELAXNGP_FREE_DOC = 1,
116 XML_RELAXNGP_CRNG = 2
117} xmlRelaxNGParserFlag;
Daniel Veillarddd6d3002004-11-03 14:20:29 +0000118
119XMLPUBFUN int XMLCALL
120 xmlRelaxNGInitTypes (void);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000121XMLPUBFUN void XMLCALL
Daniel Veillarddd6d3002004-11-03 14:20:29 +0000122 xmlRelaxNGCleanupTypes (void);
123
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000124/*
Daniel Veillard6eadf632003-01-23 18:29:16 +0000125 * Interfaces for parsing.
126 */
Daniel Veillardf63085d2009-01-18 20:53:59 +0000127XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000128 xmlRelaxNGNewParserCtxt (const char *URL);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000129XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000130 xmlRelaxNGNewMemParserCtxt (const char *buffer,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000131 int size);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000132XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000133 xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
Daniel Veillard33300b42003-04-17 09:09:19 +0000134
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000135XMLPUBFUN int XMLCALL
136 xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
Daniel Veillardf63085d2009-01-18 20:53:59 +0000137 int flag);
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000138
Daniel Veillardf63085d2009-01-18 20:53:59 +0000139XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000140 xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000141XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000142 xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000143 xmlRelaxNGValidityErrorFunc err,
144 xmlRelaxNGValidityWarningFunc warn,
145 void *ctx);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000146XMLPUBFUN int XMLCALL
147 xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
Daniel Veillard409a8142003-07-18 15:16:57 +0000148 xmlRelaxNGValidityErrorFunc *err,
149 xmlRelaxNGValidityWarningFunc *warn,
150 void **ctx);
Kasimier T. Buchcika930fbe2006-01-09 16:28:20 +0000151XMLPUBFUN void XMLCALL
152 xmlRelaxNGSetParserStructuredErrors(
153 xmlRelaxNGParserCtxtPtr ctxt,
154 xmlStructuredErrorFunc serror,
155 void *ctx);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000156XMLPUBFUN xmlRelaxNGPtr XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000157 xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000158XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000159 xmlRelaxNGFree (xmlRelaxNGPtr schema);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000160#ifdef LIBXML_OUTPUT_ENABLED
Daniel Veillardf63085d2009-01-18 20:53:59 +0000161XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000162 xmlRelaxNGDump (FILE *output,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000163 xmlRelaxNGPtr schema);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000164XMLPUBFUN void XMLCALL
165 xmlRelaxNGDumpTree (FILE * output,
Daniel Veillardfebcca42003-02-16 15:44:18 +0000166 xmlRelaxNGPtr schema);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000167#endif /* LIBXML_OUTPUT_ENABLED */
Daniel Veillard6eadf632003-01-23 18:29:16 +0000168/*
169 * Interfaces for validating
170 */
Daniel Veillardf63085d2009-01-18 20:53:59 +0000171XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000172 xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000173 xmlRelaxNGValidityErrorFunc err,
174 xmlRelaxNGValidityWarningFunc warn,
175 void *ctx);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000176XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000177 xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillard409a8142003-07-18 15:16:57 +0000178 xmlRelaxNGValidityErrorFunc *err,
179 xmlRelaxNGValidityWarningFunc *warn,
180 void **ctx);
Daniel Veillardda0aa4c2005-07-13 23:07:49 +0000181XMLPUBFUN void XMLCALL
182 xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
183 xmlStructuredErrorFunc serror, void *ctx);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000184XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000185 xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000186XMLPUBFUN void XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000187 xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000188XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000189 xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf63085d2009-01-18 20:53:59 +0000190 xmlDocPtr doc);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000191/*
192 * Interfaces for progressive validation when possible
193 */
Daniel Veillardf63085d2009-01-18 20:53:59 +0000194XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000195 xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000196 xmlDocPtr doc,
197 xmlNodePtr elem);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000198XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000199 xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000200 const xmlChar *data,
201 int len);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000202XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000203 xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000204 xmlDocPtr doc,
205 xmlNodePtr elem);
Daniel Veillardf63085d2009-01-18 20:53:59 +0000206XMLPUBFUN int XMLCALL
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000207 xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000208 xmlDocPtr doc,
209 xmlNodePtr elem);
Daniel Veillard94394cd2003-10-29 17:07:51 +0000210
211#ifdef __cplusplus
212}
213#endif
Daniel Veillarda2351322004-06-27 12:08:10 +0000214
215#endif /* LIBXML_SCHEMAS_ENABLED */
216
Daniel Veillard6eadf632003-01-23 18:29:16 +0000217#endif /* __XML_RELAX_NG__ */