blob: bdb0a7d376941d35e46925eb64746de6934319f8 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
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__ */