1 /* libxml2 - Library for parsing XML documents
2 * Copyright (C) 2006-2019 Free Software Foundation, Inc.
3 *
4 * This file is not part of the GNU gettext program, but is used with
5 * GNU gettext.
6 *
7 * The original copyright notice is as follows:
8 */
9
10 /*
11 * Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved.
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining a copy
14 * of this software and associated documentation files (the "Software"), to deal
15 * in the Software without restriction, including without limitation the rights
16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 * copies of the Software, and to permit persons to whom the Software is fur-
18 * nished to do so, subject to the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be included in
21 * all copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
25 * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29 * THE SOFTWARE.
30 *
31 * Author: Daniel Veillard
32 */
33
34 /*
35 * Summary: implementation of the Relax-NG validation
36 * Description: implementation of the Relax-NG validation
37 */
38
39 #ifndef __XML_RELAX_NG__
40 #define __XML_RELAX_NG__
41
42 #include <libxml/xmlversion.h>
43 #include <libxml/hash.h>
44 #include <libxml/xmlstring.h>
45
46 #ifdef LIBXML_SCHEMAS_ENABLED
47
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51
52 typedef struct _xmlRelaxNG xmlRelaxNG;
53 typedef xmlRelaxNG *xmlRelaxNGPtr;
54
55
56 /**
57 * xmlRelaxNGValidityErrorFunc:
58 * @ctx: the validation context
59 * @msg: the message
60 * @...: extra arguments
61 *
62 * Signature of an error callback from a Relax-NG validation
63 */
64 typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx,
65 const char *msg,
66 ...) LIBXML_ATTR_FORMAT(2,3);
67
68 /**
69 * xmlRelaxNGValidityWarningFunc:
70 * @ctx: the validation context
71 * @msg: the message
72 * @...: extra arguments
73 *
74 * Signature of a warning callback from a Relax-NG validation
75 */
76 typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx,
77 const char *msg,
78 ...) LIBXML_ATTR_FORMAT(2,3);
79
80 /**
81 * A schemas validation context
82 */
83 typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
84 typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
85
86 typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
87 typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
88
89 /*
90 * xmlRelaxNGValidErr:
91 *
92 * List of possible Relax NG validation errors
93 */
94 typedef enum {
95 XML_RELAXNG_OK = 0,
96 XML_RELAXNG_ERR_MEMORY,
97 XML_RELAXNG_ERR_TYPE,
98 XML_RELAXNG_ERR_TYPEVAL,
99 XML_RELAXNG_ERR_DUPID,
100 XML_RELAXNG_ERR_TYPECMP,
101 XML_RELAXNG_ERR_NOSTATE,
102 XML_RELAXNG_ERR_NODEFINE,
103 XML_RELAXNG_ERR_LISTEXTRA,
104 XML_RELAXNG_ERR_LISTEMPTY,
105 XML_RELAXNG_ERR_INTERNODATA,
106 XML_RELAXNG_ERR_INTERSEQ,
107 XML_RELAXNG_ERR_INTEREXTRA,
108 XML_RELAXNG_ERR_ELEMNAME,
109 XML_RELAXNG_ERR_ATTRNAME,
110 XML_RELAXNG_ERR_ELEMNONS,
111 XML_RELAXNG_ERR_ATTRNONS,
112 XML_RELAXNG_ERR_ELEMWRONGNS,
113 XML_RELAXNG_ERR_ATTRWRONGNS,
114 XML_RELAXNG_ERR_ELEMEXTRANS,
115 XML_RELAXNG_ERR_ATTREXTRANS,
116 XML_RELAXNG_ERR_ELEMNOTEMPTY,
117 XML_RELAXNG_ERR_NOELEM,
118 XML_RELAXNG_ERR_NOTELEM,
119 XML_RELAXNG_ERR_ATTRVALID,
120 XML_RELAXNG_ERR_CONTENTVALID,
121 XML_RELAXNG_ERR_EXTRACONTENT,
122 XML_RELAXNG_ERR_INVALIDATTR,
123 XML_RELAXNG_ERR_DATAELEM,
124 XML_RELAXNG_ERR_VALELEM,
125 XML_RELAXNG_ERR_LISTELEM,
126 XML_RELAXNG_ERR_DATATYPE,
127 XML_RELAXNG_ERR_VALUE,
128 XML_RELAXNG_ERR_LIST,
129 XML_RELAXNG_ERR_NOGRAMMAR,
130 XML_RELAXNG_ERR_EXTRADATA,
131 XML_RELAXNG_ERR_LACKDATA,
132 XML_RELAXNG_ERR_INTERNAL,
133 XML_RELAXNG_ERR_ELEMWRONG,
134 XML_RELAXNG_ERR_TEXTWRONG
135 } xmlRelaxNGValidErr;
136
137 /*
138 * xmlRelaxNGParserFlags:
139 *
140 * List of possible Relax NG Parser flags
141 */
142 typedef enum {
143 XML_RELAXNGP_NONE = 0,
144 XML_RELAXNGP_FREE_DOC = 1,
145 XML_RELAXNGP_CRNG = 2
146 } xmlRelaxNGParserFlag;
147
148 XMLPUBFUN int XMLCALL
149 xmlRelaxNGInitTypes (void);
150 XMLPUBFUN void XMLCALL
151 xmlRelaxNGCleanupTypes (void);
152
153 /*
154 * Interfaces for parsing.
155 */
156 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
157 xmlRelaxNGNewParserCtxt (const char *URL);
158 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
159 xmlRelaxNGNewMemParserCtxt (const char *buffer,
160 int size);
161 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
162 xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
163
164 XMLPUBFUN int XMLCALL
165 xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
166 int flag);
167
168 XMLPUBFUN void XMLCALL
169 xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
170 XMLPUBFUN void XMLCALL
171 xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
172 xmlRelaxNGValidityErrorFunc err,
173 xmlRelaxNGValidityWarningFunc warn,
174 void *ctx);
175 XMLPUBFUN int XMLCALL
176 xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
177 xmlRelaxNGValidityErrorFunc *err,
178 xmlRelaxNGValidityWarningFunc *warn,
179 void **ctx);
180 XMLPUBFUN void XMLCALL
181 xmlRelaxNGSetParserStructuredErrors(
182 xmlRelaxNGParserCtxtPtr ctxt,
183 xmlStructuredErrorFunc serror,
184 void *ctx);
185 XMLPUBFUN xmlRelaxNGPtr XMLCALL
186 xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
187 XMLPUBFUN void XMLCALL
188 xmlRelaxNGFree (xmlRelaxNGPtr schema);
189 #ifdef LIBXML_OUTPUT_ENABLED
190 XMLPUBFUN void XMLCALL
191 xmlRelaxNGDump (FILE *output,
192 xmlRelaxNGPtr schema);
193 XMLPUBFUN void XMLCALL
194 xmlRelaxNGDumpTree (FILE * output,
195 xmlRelaxNGPtr schema);
196 #endif /* LIBXML_OUTPUT_ENABLED */
197 /*
198 * Interfaces for validating
199 */
200 XMLPUBFUN void XMLCALL
201 xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
202 xmlRelaxNGValidityErrorFunc err,
203 xmlRelaxNGValidityWarningFunc warn,
204 void *ctx);
205 XMLPUBFUN int XMLCALL
206 xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
207 xmlRelaxNGValidityErrorFunc *err,
208 xmlRelaxNGValidityWarningFunc *warn,
209 void **ctx);
210 XMLPUBFUN void XMLCALL
211 xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
212 xmlStructuredErrorFunc serror, void *ctx);
213 XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
214 xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
215 XMLPUBFUN void XMLCALL
216 xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
217 XMLPUBFUN int XMLCALL
218 xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
219 xmlDocPtr doc);
220 /*
221 * Interfaces for progressive validation when possible
222 */
223 XMLPUBFUN int XMLCALL
224 xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
225 xmlDocPtr doc,
226 xmlNodePtr elem);
227 XMLPUBFUN int XMLCALL
228 xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
229 const xmlChar *data,
230 int len);
231 XMLPUBFUN int XMLCALL
232 xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
233 xmlDocPtr doc,
234 xmlNodePtr elem);
235 XMLPUBFUN int XMLCALL
236 xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
237 xmlDocPtr doc,
238 xmlNodePtr elem);
239
240 #ifdef __cplusplus
241 }
242 #endif
243
244 #endif /* LIBXML_SCHEMAS_ENABLED */
245
246 #endif /* __XML_RELAX_NG__ */