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