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