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