• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, 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  */
45 typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
46 
47 /**
48  * A schemas validation context
49  */
50 typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
51 typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
52 
53 typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
54 typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
55 
56 /*
57  * xmlRelaxNGValidErr:
58  *
59  * List of possible Relax NG validation errors
60  */
61 typedef 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  */
109 typedef enum {
110     XML_RELAXNGP_NONE = 0,
111     XML_RELAXNGP_FREE_DOC = 1,
112     XML_RELAXNGP_CRNG = 2
113 } xmlRelaxNGParserFlag;
114 
115 XMLPUBFUN int XMLCALL
116 		    xmlRelaxNGInitTypes		(void);
117 XMLPUBFUN void XMLCALL
118 		    xmlRelaxNGCleanupTypes	(void);
119 
120 /*
121  * Interfaces for parsing.
122  */
123 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
124 		    xmlRelaxNGNewParserCtxt	(const char *URL);
125 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
126 		    xmlRelaxNGNewMemParserCtxt	(const char *buffer,
127 						 int size);
128 XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
129 		    xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
130 
131 XMLPUBFUN int XMLCALL
132 		    xmlRelaxParserSetFlag	(xmlRelaxNGParserCtxtPtr ctxt,
133 						 int flag);
134 
135 XMLPUBFUN void XMLCALL
136 		    xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt);
137 XMLPUBFUN void XMLCALL
138 		    xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
139 					 xmlRelaxNGValidityErrorFunc err,
140 					 xmlRelaxNGValidityWarningFunc warn,
141 					 void *ctx);
142 XMLPUBFUN int XMLCALL
143 		    xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
144 					 xmlRelaxNGValidityErrorFunc *err,
145 					 xmlRelaxNGValidityWarningFunc *warn,
146 					 void **ctx);
147 XMLPUBFUN void XMLCALL
148 		    xmlRelaxNGSetParserStructuredErrors(
149 					 xmlRelaxNGParserCtxtPtr ctxt,
150 					 xmlStructuredErrorFunc serror,
151 					 void *ctx);
152 XMLPUBFUN xmlRelaxNGPtr XMLCALL
153 		    xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt);
154 XMLPUBFUN void XMLCALL
155 		    xmlRelaxNGFree		(xmlRelaxNGPtr schema);
156 #ifdef LIBXML_OUTPUT_ENABLED
157 XMLPUBFUN void XMLCALL
158 		    xmlRelaxNGDump		(FILE *output,
159 					 xmlRelaxNGPtr schema);
160 XMLPUBFUN void XMLCALL
161 		    xmlRelaxNGDumpTree	(FILE * output,
162 					 xmlRelaxNGPtr schema);
163 #endif /* LIBXML_OUTPUT_ENABLED */
164 /*
165  * Interfaces for validating
166  */
167 XMLPUBFUN void XMLCALL
168 		    xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
169 					 xmlRelaxNGValidityErrorFunc err,
170 					 xmlRelaxNGValidityWarningFunc warn,
171 					 void *ctx);
172 XMLPUBFUN int XMLCALL
173 		    xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
174 					 xmlRelaxNGValidityErrorFunc *err,
175 					 xmlRelaxNGValidityWarningFunc *warn,
176 					 void **ctx);
177 XMLPUBFUN void XMLCALL
178 			xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
179 					  xmlStructuredErrorFunc serror, void *ctx);
180 XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
181 		    xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema);
182 XMLPUBFUN void XMLCALL
183 		    xmlRelaxNGFreeValidCtxt	(xmlRelaxNGValidCtxtPtr ctxt);
184 XMLPUBFUN int XMLCALL
185 		    xmlRelaxNGValidateDoc	(xmlRelaxNGValidCtxtPtr ctxt,
186 						 xmlDocPtr doc);
187 /*
188  * Interfaces for progressive validation when possible
189  */
190 XMLPUBFUN int XMLCALL
191 		    xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
192 					 xmlDocPtr doc,
193 					 xmlNodePtr elem);
194 XMLPUBFUN int XMLCALL
195 		    xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
196 					 const xmlChar *data,
197 					 int len);
198 XMLPUBFUN int XMLCALL
199 		    xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
200 					 xmlDocPtr doc,
201 					 xmlNodePtr elem);
202 XMLPUBFUN 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