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