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
20extern "C" {
21#endif
22
23typedef struct _xmlRelaxNG xmlRelaxNG;
24typedef 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 */
35typedef 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 */
47typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx,
48							const char *msg,
49							...) LIBXML_ATTR_FORMAT(2,3);
50
51/**
52 * A schemas validation context
53 */
54typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
55typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
56
57typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
58typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
59
60/*
61 * 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,
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 */
113typedef enum {
114    XML_RELAXNGP_NONE = 0,
115    XML_RELAXNGP_FREE_DOC = 1,
116    XML_RELAXNGP_CRNG = 2
117} xmlRelaxNGParserFlag;
118
119XMLPUBFUN int XMLCALL
120		    xmlRelaxNGInitTypes		(void);
121XMLPUBFUN void XMLCALL
122		    xmlRelaxNGCleanupTypes	(void);
123
124/*
125 * Interfaces for parsing.
126 */
127XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
128		    xmlRelaxNGNewParserCtxt	(const char *URL);
129XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
130		    xmlRelaxNGNewMemParserCtxt	(const char *buffer,
131						 int size);
132XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
133		    xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
134
135XMLPUBFUN int XMLCALL
136		    xmlRelaxParserSetFlag	(xmlRelaxNGParserCtxtPtr ctxt,
137						 int flag);
138
139XMLPUBFUN void XMLCALL
140		    xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt);
141XMLPUBFUN void XMLCALL
142		    xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
143					 xmlRelaxNGValidityErrorFunc err,
144					 xmlRelaxNGValidityWarningFunc warn,
145					 void *ctx);
146XMLPUBFUN int XMLCALL
147		    xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
148					 xmlRelaxNGValidityErrorFunc *err,
149					 xmlRelaxNGValidityWarningFunc *warn,
150					 void **ctx);
151XMLPUBFUN void XMLCALL
152		    xmlRelaxNGSetParserStructuredErrors(
153					 xmlRelaxNGParserCtxtPtr ctxt,
154					 xmlStructuredErrorFunc serror,
155					 void *ctx);
156XMLPUBFUN xmlRelaxNGPtr XMLCALL
157		    xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt);
158XMLPUBFUN void XMLCALL
159		    xmlRelaxNGFree		(xmlRelaxNGPtr schema);
160#ifdef LIBXML_OUTPUT_ENABLED
161XMLPUBFUN void XMLCALL
162		    xmlRelaxNGDump		(FILE *output,
163					 xmlRelaxNGPtr schema);
164XMLPUBFUN void XMLCALL
165		    xmlRelaxNGDumpTree	(FILE * output,
166					 xmlRelaxNGPtr schema);
167#endif /* LIBXML_OUTPUT_ENABLED */
168/*
169 * Interfaces for validating
170 */
171XMLPUBFUN void XMLCALL
172		    xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
173					 xmlRelaxNGValidityErrorFunc err,
174					 xmlRelaxNGValidityWarningFunc warn,
175					 void *ctx);
176XMLPUBFUN int XMLCALL
177		    xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
178					 xmlRelaxNGValidityErrorFunc *err,
179					 xmlRelaxNGValidityWarningFunc *warn,
180					 void **ctx);
181XMLPUBFUN void XMLCALL
182			xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
183					  xmlStructuredErrorFunc serror, void *ctx);
184XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
185		    xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema);
186XMLPUBFUN void XMLCALL
187		    xmlRelaxNGFreeValidCtxt	(xmlRelaxNGValidCtxtPtr ctxt);
188XMLPUBFUN int XMLCALL
189		    xmlRelaxNGValidateDoc	(xmlRelaxNGValidCtxtPtr ctxt,
190						 xmlDocPtr doc);
191/*
192 * Interfaces for progressive validation when possible
193 */
194XMLPUBFUN int XMLCALL
195		    xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
196					 xmlDocPtr doc,
197					 xmlNodePtr elem);
198XMLPUBFUN int XMLCALL
199		    xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
200					 const xmlChar *data,
201					 int len);
202XMLPUBFUN int XMLCALL
203		    xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
204					 xmlDocPtr doc,
205					 xmlNodePtr elem);
206XMLPUBFUN 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