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