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