xref: /reactos/sdk/include/reactos/libs/libxml/valid.h (revision 911153da)
1 /*
2  * Summary: The DTD validation
3  * Description: API for the DTD handling and the validity checking
4  *
5  * Copy: See Copyright for the status of this software.
6  *
7  * Author: Daniel Veillard
8  */
9 
10 
11 #ifndef __XML_VALID_H__
12 #define __XML_VALID_H__
13 
14 #include <libxml/xmlversion.h>
15 #include <libxml/xmlerror.h>
16 #include <libxml/tree.h>
17 #include <libxml/list.h>
18 #include <libxml/xmlautomata.h>
19 #include <libxml/xmlregexp.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /*
26  * Validation state added for non-determinist content model.
27  */
28 typedef struct _xmlValidState xmlValidState;
29 typedef xmlValidState *xmlValidStatePtr;
30 
31 /**
32  * xmlValidityErrorFunc:
33  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
34  *        but comes from ctxt->userData (which normally contains such
35  *        a pointer); ctxt->userData can be changed by the user.
36  * @msg:  the string to format *printf like vararg
37  * @...:  remaining arguments to the format
38  *
39  * Callback called when a validity error is found. This is a message
40  * oriented function similar to an *printf function.
41  */
42 typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
43 			     const char *msg,
44 			     ...) LIBXML_ATTR_FORMAT(2,3);
45 
46 /**
47  * xmlValidityWarningFunc:
48  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
49  *        but comes from ctxt->userData (which normally contains such
50  *        a pointer); ctxt->userData can be changed by the user.
51  * @msg:  the string to format *printf like vararg
52  * @...:  remaining arguments to the format
53  *
54  * Callback called when a validity warning is found. This is a message
55  * oriented function similar to an *printf function.
56  */
57 typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
58 			       const char *msg,
59 			       ...) LIBXML_ATTR_FORMAT(2,3);
60 
61 #ifdef IN_LIBXML
62 /**
63  * XML_VCTXT_DTD_VALIDATED:
64  *
65  * Set after xmlValidateDtdFinal was called.
66  */
67 #define XML_VCTXT_DTD_VALIDATED (1u << 0)
68 /**
69  * XML_VCTXT_USE_PCTXT:
70  *
71  * Set if the validation context is part of a parser context.
72  */
73 #define XML_VCTXT_USE_PCTXT (1u << 1)
74 #endif
75 
76 /*
77  * xmlValidCtxt:
78  * An xmlValidCtxt is used for error reporting when validating.
79  */
80 typedef struct _xmlValidCtxt xmlValidCtxt;
81 typedef xmlValidCtxt *xmlValidCtxtPtr;
82 struct _xmlValidCtxt {
83     void *userData;			/* user specific data block */
84     xmlValidityErrorFunc error;		/* the callback in case of errors */
85     xmlValidityWarningFunc warning;	/* the callback in case of warning */
86 
87     /* Node analysis stack used when validating within entities */
88     xmlNodePtr         node;          /* Current parsed Node */
89     int                nodeNr;        /* Depth of the parsing stack */
90     int                nodeMax;       /* Max depth of the parsing stack */
91     xmlNodePtr        *nodeTab;       /* array of nodes */
92 
93     unsigned int         flags;       /* internal flags */
94     xmlDocPtr              doc;       /* the document */
95     int                  valid;       /* temporary validity check result */
96 
97     /* state state used for non-determinist content validation */
98     xmlValidState     *vstate;        /* current state */
99     int                vstateNr;      /* Depth of the validation stack */
100     int                vstateMax;     /* Max depth of the validation stack */
101     xmlValidState     *vstateTab;     /* array of validation states */
102 
103 #ifdef LIBXML_REGEXP_ENABLED
104     xmlAutomataPtr            am;     /* the automata */
105     xmlAutomataStatePtr    state;     /* used to build the automata */
106 #else
107     void                     *am;
108     void                  *state;
109 #endif
110 };
111 
112 /*
113  * ALL notation declarations are stored in a table.
114  * There is one table per DTD.
115  */
116 
117 typedef struct _xmlHashTable xmlNotationTable;
118 typedef xmlNotationTable *xmlNotationTablePtr;
119 
120 /*
121  * ALL element declarations are stored in a table.
122  * There is one table per DTD.
123  */
124 
125 typedef struct _xmlHashTable xmlElementTable;
126 typedef xmlElementTable *xmlElementTablePtr;
127 
128 /*
129  * ALL attribute declarations are stored in a table.
130  * There is one table per DTD.
131  */
132 
133 typedef struct _xmlHashTable xmlAttributeTable;
134 typedef xmlAttributeTable *xmlAttributeTablePtr;
135 
136 /*
137  * ALL IDs attributes are stored in a table.
138  * There is one table per document.
139  */
140 
141 typedef struct _xmlHashTable xmlIDTable;
142 typedef xmlIDTable *xmlIDTablePtr;
143 
144 /*
145  * ALL Refs attributes are stored in a table.
146  * There is one table per document.
147  */
148 
149 typedef struct _xmlHashTable xmlRefTable;
150 typedef xmlRefTable *xmlRefTablePtr;
151 
152 /* Notation */
153 XMLPUBFUN xmlNotationPtr XMLCALL
154 		xmlAddNotationDecl	(xmlValidCtxtPtr ctxt,
155 					 xmlDtdPtr dtd,
156 					 const xmlChar *name,
157 					 const xmlChar *PublicID,
158 					 const xmlChar *SystemID);
159 #ifdef LIBXML_TREE_ENABLED
160 XMLPUBFUN xmlNotationTablePtr XMLCALL
161 		xmlCopyNotationTable	(xmlNotationTablePtr table);
162 #endif /* LIBXML_TREE_ENABLED */
163 XMLPUBFUN void XMLCALL
164 		xmlFreeNotationTable	(xmlNotationTablePtr table);
165 #ifdef LIBXML_OUTPUT_ENABLED
166 XMLPUBFUN void XMLCALL
167 		xmlDumpNotationDecl	(xmlBufferPtr buf,
168 					 xmlNotationPtr nota);
169 XMLPUBFUN void XMLCALL
170 		xmlDumpNotationTable	(xmlBufferPtr buf,
171 					 xmlNotationTablePtr table);
172 #endif /* LIBXML_OUTPUT_ENABLED */
173 
174 /* Element Content */
175 /* the non Doc version are being deprecated */
176 XMLPUBFUN xmlElementContentPtr XMLCALL
177 		xmlNewElementContent	(const xmlChar *name,
178 					 xmlElementContentType type);
179 XMLPUBFUN xmlElementContentPtr XMLCALL
180 		xmlCopyElementContent	(xmlElementContentPtr content);
181 XMLPUBFUN void XMLCALL
182 		xmlFreeElementContent	(xmlElementContentPtr cur);
183 /* the new versions with doc argument */
184 XMLPUBFUN xmlElementContentPtr XMLCALL
185 		xmlNewDocElementContent	(xmlDocPtr doc,
186 					 const xmlChar *name,
187 					 xmlElementContentType type);
188 XMLPUBFUN xmlElementContentPtr XMLCALL
189 		xmlCopyDocElementContent(xmlDocPtr doc,
190 					 xmlElementContentPtr content);
191 XMLPUBFUN void XMLCALL
192 		xmlFreeDocElementContent(xmlDocPtr doc,
193 					 xmlElementContentPtr cur);
194 XMLPUBFUN void XMLCALL
195 		xmlSnprintfElementContent(char *buf,
196 					 int size,
197 	                                 xmlElementContentPtr content,
198 					 int englob);
199 #ifdef LIBXML_OUTPUT_ENABLED
200 /* DEPRECATED */
201 XMLPUBFUN void XMLCALL
202 		xmlSprintfElementContent(char *buf,
203 	                                 xmlElementContentPtr content,
204 					 int englob);
205 #endif /* LIBXML_OUTPUT_ENABLED */
206 /* DEPRECATED */
207 
208 /* Element */
209 XMLPUBFUN xmlElementPtr XMLCALL
210 		xmlAddElementDecl	(xmlValidCtxtPtr ctxt,
211 					 xmlDtdPtr dtd,
212 					 const xmlChar *name,
213 					 xmlElementTypeVal type,
214 					 xmlElementContentPtr content);
215 #ifdef LIBXML_TREE_ENABLED
216 XMLPUBFUN xmlElementTablePtr XMLCALL
217 		xmlCopyElementTable	(xmlElementTablePtr table);
218 #endif /* LIBXML_TREE_ENABLED */
219 XMLPUBFUN void XMLCALL
220 		xmlFreeElementTable	(xmlElementTablePtr table);
221 #ifdef LIBXML_OUTPUT_ENABLED
222 XMLPUBFUN void XMLCALL
223 		xmlDumpElementTable	(xmlBufferPtr buf,
224 					 xmlElementTablePtr table);
225 XMLPUBFUN void XMLCALL
226 		xmlDumpElementDecl	(xmlBufferPtr buf,
227 					 xmlElementPtr elem);
228 #endif /* LIBXML_OUTPUT_ENABLED */
229 
230 /* Enumeration */
231 XMLPUBFUN xmlEnumerationPtr XMLCALL
232 		xmlCreateEnumeration	(const xmlChar *name);
233 XMLPUBFUN void XMLCALL
234 		xmlFreeEnumeration	(xmlEnumerationPtr cur);
235 #ifdef LIBXML_TREE_ENABLED
236 XMLPUBFUN xmlEnumerationPtr XMLCALL
237 		xmlCopyEnumeration	(xmlEnumerationPtr cur);
238 #endif /* LIBXML_TREE_ENABLED */
239 
240 /* Attribute */
241 XMLPUBFUN xmlAttributePtr XMLCALL
242 		xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt,
243 					 xmlDtdPtr dtd,
244 					 const xmlChar *elem,
245 					 const xmlChar *name,
246 					 const xmlChar *ns,
247 					 xmlAttributeType type,
248 					 xmlAttributeDefault def,
249 					 const xmlChar *defaultValue,
250 					 xmlEnumerationPtr tree);
251 #ifdef LIBXML_TREE_ENABLED
252 XMLPUBFUN xmlAttributeTablePtr XMLCALL
253 		xmlCopyAttributeTable  (xmlAttributeTablePtr table);
254 #endif /* LIBXML_TREE_ENABLED */
255 XMLPUBFUN void XMLCALL
256 		xmlFreeAttributeTable  (xmlAttributeTablePtr table);
257 #ifdef LIBXML_OUTPUT_ENABLED
258 XMLPUBFUN void XMLCALL
259 		xmlDumpAttributeTable  (xmlBufferPtr buf,
260 					xmlAttributeTablePtr table);
261 XMLPUBFUN void XMLCALL
262 		xmlDumpAttributeDecl   (xmlBufferPtr buf,
263 					xmlAttributePtr attr);
264 #endif /* LIBXML_OUTPUT_ENABLED */
265 
266 /* IDs */
267 XMLPUBFUN xmlIDPtr XMLCALL
268 		xmlAddID	       (xmlValidCtxtPtr ctxt,
269 					xmlDocPtr doc,
270 					const xmlChar *value,
271 					xmlAttrPtr attr);
272 XMLPUBFUN void XMLCALL
273 		xmlFreeIDTable	       (xmlIDTablePtr table);
274 XMLPUBFUN xmlAttrPtr XMLCALL
275 		xmlGetID	       (xmlDocPtr doc,
276 					const xmlChar *ID);
277 XMLPUBFUN int XMLCALL
278 		xmlIsID		       (xmlDocPtr doc,
279 					xmlNodePtr elem,
280 					xmlAttrPtr attr);
281 XMLPUBFUN int XMLCALL
282 		xmlRemoveID	       (xmlDocPtr doc,
283 					xmlAttrPtr attr);
284 
285 /* IDREFs */
286 XML_DEPRECATED
287 XMLPUBFUN xmlRefPtr XMLCALL
288 		xmlAddRef	       (xmlValidCtxtPtr ctxt,
289 					xmlDocPtr doc,
290 					const xmlChar *value,
291 					xmlAttrPtr attr);
292 XML_DEPRECATED
293 XMLPUBFUN void XMLCALL
294 		xmlFreeRefTable	       (xmlRefTablePtr table);
295 XML_DEPRECATED
296 XMLPUBFUN int XMLCALL
297 		xmlIsRef	       (xmlDocPtr doc,
298 					xmlNodePtr elem,
299 					xmlAttrPtr attr);
300 XML_DEPRECATED
301 XMLPUBFUN int XMLCALL
302 		xmlRemoveRef	       (xmlDocPtr doc,
303 					xmlAttrPtr attr);
304 XML_DEPRECATED
305 XMLPUBFUN xmlListPtr XMLCALL
306 		xmlGetRefs	       (xmlDocPtr doc,
307 					const xmlChar *ID);
308 
309 /**
310  * The public function calls related to validity checking.
311  */
312 #ifdef LIBXML_VALID_ENABLED
313 /* Allocate/Release Validation Contexts */
314 XMLPUBFUN xmlValidCtxtPtr XMLCALL
315 		xmlNewValidCtxt(void);
316 XMLPUBFUN void XMLCALL
317 		xmlFreeValidCtxt(xmlValidCtxtPtr);
318 
319 XMLPUBFUN int XMLCALL
320 		xmlValidateRoot		(xmlValidCtxtPtr ctxt,
321 					 xmlDocPtr doc);
322 XMLPUBFUN int XMLCALL
323 		xmlValidateElementDecl	(xmlValidCtxtPtr ctxt,
324 					 xmlDocPtr doc,
325 		                         xmlElementPtr elem);
326 XMLPUBFUN xmlChar * XMLCALL
327 		xmlValidNormalizeAttributeValue(xmlDocPtr doc,
328 					 xmlNodePtr elem,
329 					 const xmlChar *name,
330 					 const xmlChar *value);
331 XMLPUBFUN xmlChar * XMLCALL
332 		xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
333 					 xmlDocPtr doc,
334 					 xmlNodePtr elem,
335 					 const xmlChar *name,
336 					 const xmlChar *value);
337 XMLPUBFUN int XMLCALL
338 		xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
339 					 xmlDocPtr doc,
340 		                         xmlAttributePtr attr);
341 XMLPUBFUN int XMLCALL
342 		xmlValidateAttributeValue(xmlAttributeType type,
343 					 const xmlChar *value);
344 XMLPUBFUN int XMLCALL
345 		xmlValidateNotationDecl	(xmlValidCtxtPtr ctxt,
346 					 xmlDocPtr doc,
347 		                         xmlNotationPtr nota);
348 XMLPUBFUN int XMLCALL
349 		xmlValidateDtd		(xmlValidCtxtPtr ctxt,
350 					 xmlDocPtr doc,
351 					 xmlDtdPtr dtd);
352 XMLPUBFUN int XMLCALL
353 		xmlValidateDtdFinal	(xmlValidCtxtPtr ctxt,
354 					 xmlDocPtr doc);
355 XMLPUBFUN int XMLCALL
356 		xmlValidateDocument	(xmlValidCtxtPtr ctxt,
357 					 xmlDocPtr doc);
358 XMLPUBFUN int XMLCALL
359 		xmlValidateElement	(xmlValidCtxtPtr ctxt,
360 					 xmlDocPtr doc,
361 					 xmlNodePtr elem);
362 XMLPUBFUN int XMLCALL
363 		xmlValidateOneElement	(xmlValidCtxtPtr ctxt,
364 					 xmlDocPtr doc,
365 		                         xmlNodePtr elem);
366 XMLPUBFUN int XMLCALL
367 		xmlValidateOneAttribute	(xmlValidCtxtPtr ctxt,
368 					 xmlDocPtr doc,
369 					 xmlNodePtr	elem,
370 					 xmlAttrPtr attr,
371 					 const xmlChar *value);
372 XMLPUBFUN int XMLCALL
373 		xmlValidateOneNamespace	(xmlValidCtxtPtr ctxt,
374 					 xmlDocPtr doc,
375 					 xmlNodePtr elem,
376 					 const xmlChar *prefix,
377 					 xmlNsPtr ns,
378 					 const xmlChar *value);
379 XMLPUBFUN int XMLCALL
380 		xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
381 					 xmlDocPtr doc);
382 #endif /* LIBXML_VALID_ENABLED */
383 
384 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
385 XMLPUBFUN int XMLCALL
386 		xmlValidateNotationUse	(xmlValidCtxtPtr ctxt,
387 					 xmlDocPtr doc,
388 					 const xmlChar *notationName);
389 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
390 
391 XMLPUBFUN int XMLCALL
392 		xmlIsMixedElement	(xmlDocPtr doc,
393 					 const xmlChar *name);
394 XMLPUBFUN xmlAttributePtr XMLCALL
395 		xmlGetDtdAttrDesc	(xmlDtdPtr dtd,
396 					 const xmlChar *elem,
397 					 const xmlChar *name);
398 XMLPUBFUN xmlAttributePtr XMLCALL
399 		xmlGetDtdQAttrDesc	(xmlDtdPtr dtd,
400 					 const xmlChar *elem,
401 					 const xmlChar *name,
402 					 const xmlChar *prefix);
403 XMLPUBFUN xmlNotationPtr XMLCALL
404 		xmlGetDtdNotationDesc	(xmlDtdPtr dtd,
405 					 const xmlChar *name);
406 XMLPUBFUN xmlElementPtr XMLCALL
407 		xmlGetDtdQElementDesc	(xmlDtdPtr dtd,
408 					 const xmlChar *name,
409 					 const xmlChar *prefix);
410 XMLPUBFUN xmlElementPtr XMLCALL
411 		xmlGetDtdElementDesc	(xmlDtdPtr dtd,
412 					 const xmlChar *name);
413 
414 #ifdef LIBXML_VALID_ENABLED
415 
416 XMLPUBFUN int XMLCALL
417 		xmlValidGetPotentialChildren(xmlElementContent *ctree,
418 					 const xmlChar **names,
419 					 int *len,
420 					 int max);
421 
422 XMLPUBFUN int XMLCALL
423 		xmlValidGetValidElements(xmlNode *prev,
424 					 xmlNode *next,
425 					 const xmlChar **names,
426 					 int max);
427 XMLPUBFUN int XMLCALL
428 		xmlValidateNameValue	(const xmlChar *value);
429 XMLPUBFUN int XMLCALL
430 		xmlValidateNamesValue	(const xmlChar *value);
431 XMLPUBFUN int XMLCALL
432 		xmlValidateNmtokenValue	(const xmlChar *value);
433 XMLPUBFUN int XMLCALL
434 		xmlValidateNmtokensValue(const xmlChar *value);
435 
436 #ifdef LIBXML_REGEXP_ENABLED
437 /*
438  * Validation based on the regexp support
439  */
440 XMLPUBFUN int XMLCALL
441 		xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
442 					 xmlElementPtr elem);
443 
444 XMLPUBFUN int XMLCALL
445 		xmlValidatePushElement	(xmlValidCtxtPtr ctxt,
446 					 xmlDocPtr doc,
447 					 xmlNodePtr elem,
448 					 const xmlChar *qname);
449 XMLPUBFUN int XMLCALL
450 		xmlValidatePushCData	(xmlValidCtxtPtr ctxt,
451 					 const xmlChar *data,
452 					 int len);
453 XMLPUBFUN int XMLCALL
454 		xmlValidatePopElement	(xmlValidCtxtPtr ctxt,
455 					 xmlDocPtr doc,
456 					 xmlNodePtr elem,
457 					 const xmlChar *qname);
458 #endif /* LIBXML_REGEXP_ENABLED */
459 #endif /* LIBXML_VALID_ENABLED */
460 #ifdef __cplusplus
461 }
462 #endif
463 #endif /* __XML_VALID_H__ */
464