2 * Summary: The DTD validation
3 * Description: API for the DTD handling and the validity checking
5 * Copy: See Copyright for the status of this software.
7 * Author: Daniel Veillard
11 #ifndef __XML_VALID_H__
12 #define __XML_VALID_H__
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>
26 * Validation state added for non-determinist content model.
28 typedef struct _xmlValidState xmlValidState;
29 typedef xmlValidState *xmlValidStatePtr;
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
39 * Callback called when a validity error is found. This is a message
40 * oriented function similar to an *printf function.
42 typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
44 ...) LIBXML_ATTR_FORMAT(2,3);
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
54 * Callback called when a validity warning is found. This is a message
55 * oriented function similar to an *printf function.
57 typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
59 ...) LIBXML_ATTR_FORMAT(2,3);
63 * XML_CTXT_FINISH_DTD_0:
65 * Special value for finishDtd field when embedded in an xmlParserCtxt
67 #define XML_CTXT_FINISH_DTD_0 0xabcd1234
69 * XML_CTXT_FINISH_DTD_1:
71 * Special value for finishDtd field when embedded in an xmlParserCtxt
73 #define XML_CTXT_FINISH_DTD_1 0xabcd1235
78 * An xmlValidCtxt is used for error reporting when validating.
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 */
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 */
93 unsigned int finishDtd; /* finished validating the Dtd ? */
94 xmlDocPtr doc; /* the document */
95 int valid; /* temporary validity check result */
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 */
103 #ifdef LIBXML_REGEXP_ENABLED
104 xmlAutomataPtr am; /* the automata */
105 xmlAutomataStatePtr state; /* used to build the automata */
113 * ALL notation declarations are stored in a table.
114 * There is one table per DTD.
117 typedef struct _xmlHashTable xmlNotationTable;
118 typedef xmlNotationTable *xmlNotationTablePtr;
121 * ALL element declarations are stored in a table.
122 * There is one table per DTD.
125 typedef struct _xmlHashTable xmlElementTable;
126 typedef xmlElementTable *xmlElementTablePtr;
129 * ALL attribute declarations are stored in a table.
130 * There is one table per DTD.
133 typedef struct _xmlHashTable xmlAttributeTable;
134 typedef xmlAttributeTable *xmlAttributeTablePtr;
137 * ALL IDs attributes are stored in a table.
138 * There is one table per document.
141 typedef struct _xmlHashTable xmlIDTable;
142 typedef xmlIDTable *xmlIDTablePtr;
145 * ALL Refs attributes are stored in a table.
146 * There is one table per document.
149 typedef struct _xmlHashTable xmlRefTable;
150 typedef xmlRefTable *xmlRefTablePtr;
153 XMLPUBFUN xmlNotationPtr XMLCALL
154 xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
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 */
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,
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,
197 xmlElementContentPtr content,
199 #ifdef LIBXML_OUTPUT_ENABLED
201 XMLPUBFUN void XMLCALL
202 xmlSprintfElementContent(char *buf,
203 xmlElementContentPtr content,
205 #endif /* LIBXML_OUTPUT_ENABLED */
209 XMLPUBFUN xmlElementPtr XMLCALL
210 xmlAddElementDecl (xmlValidCtxtPtr ctxt,
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,
228 #endif /* LIBXML_OUTPUT_ENABLED */
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 */
241 XMLPUBFUN xmlAttributePtr XMLCALL
242 xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
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 */
267 XMLPUBFUN xmlIDPtr XMLCALL
268 xmlAddID (xmlValidCtxtPtr ctxt,
270 const xmlChar *value,
272 XMLPUBFUN void XMLCALL
273 xmlFreeIDTable (xmlIDTablePtr table);
274 XMLPUBFUN xmlAttrPtr XMLCALL
275 xmlGetID (xmlDocPtr doc,
277 XMLPUBFUN int XMLCALL
278 xmlIsID (xmlDocPtr doc,
281 XMLPUBFUN int XMLCALL
282 xmlRemoveID (xmlDocPtr doc,
286 XMLPUBFUN xmlRefPtr XMLCALL
287 xmlAddRef (xmlValidCtxtPtr ctxt,
289 const xmlChar *value,
291 XMLPUBFUN void XMLCALL
292 xmlFreeRefTable (xmlRefTablePtr table);
293 XMLPUBFUN int XMLCALL
294 xmlIsRef (xmlDocPtr doc,
297 XMLPUBFUN int XMLCALL
298 xmlRemoveRef (xmlDocPtr doc,
300 XMLPUBFUN xmlListPtr XMLCALL
301 xmlGetRefs (xmlDocPtr doc,
305 * The public function calls related to validity checking.
307 #ifdef LIBXML_VALID_ENABLED
308 /* Allocate/Release Validation Contexts */
309 XMLPUBFUN xmlValidCtxtPtr XMLCALL
310 xmlNewValidCtxt(void);
311 XMLPUBFUN void XMLCALL
312 xmlFreeValidCtxt(xmlValidCtxtPtr);
314 XMLPUBFUN int XMLCALL
315 xmlValidateRoot (xmlValidCtxtPtr ctxt,
317 XMLPUBFUN int XMLCALL
318 xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
321 XMLPUBFUN xmlChar * XMLCALL
322 xmlValidNormalizeAttributeValue(xmlDocPtr doc,
325 const xmlChar *value);
326 XMLPUBFUN xmlChar * XMLCALL
327 xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
331 const xmlChar *value);
332 XMLPUBFUN int XMLCALL
333 xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
335 xmlAttributePtr attr);
336 XMLPUBFUN int XMLCALL
337 xmlValidateAttributeValue(xmlAttributeType type,
338 const xmlChar *value);
339 XMLPUBFUN int XMLCALL
340 xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
342 xmlNotationPtr nota);
343 XMLPUBFUN int XMLCALL
344 xmlValidateDtd (xmlValidCtxtPtr ctxt,
347 XMLPUBFUN int XMLCALL
348 xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
350 XMLPUBFUN int XMLCALL
351 xmlValidateDocument (xmlValidCtxtPtr ctxt,
353 XMLPUBFUN int XMLCALL
354 xmlValidateElement (xmlValidCtxtPtr ctxt,
357 XMLPUBFUN int XMLCALL
358 xmlValidateOneElement (xmlValidCtxtPtr ctxt,
361 XMLPUBFUN int XMLCALL
362 xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
366 const xmlChar *value);
367 XMLPUBFUN int XMLCALL
368 xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
371 const xmlChar *prefix,
373 const xmlChar *value);
374 XMLPUBFUN int XMLCALL
375 xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
377 #endif /* LIBXML_VALID_ENABLED */
379 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
380 XMLPUBFUN int XMLCALL
381 xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
383 const xmlChar *notationName);
384 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
386 XMLPUBFUN int XMLCALL
387 xmlIsMixedElement (xmlDocPtr doc,
388 const xmlChar *name);
389 XMLPUBFUN xmlAttributePtr XMLCALL
390 xmlGetDtdAttrDesc (xmlDtdPtr dtd,
392 const xmlChar *name);
393 XMLPUBFUN xmlAttributePtr XMLCALL
394 xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
397 const xmlChar *prefix);
398 XMLPUBFUN xmlNotationPtr XMLCALL
399 xmlGetDtdNotationDesc (xmlDtdPtr dtd,
400 const xmlChar *name);
401 XMLPUBFUN xmlElementPtr XMLCALL
402 xmlGetDtdQElementDesc (xmlDtdPtr dtd,
404 const xmlChar *prefix);
405 XMLPUBFUN xmlElementPtr XMLCALL
406 xmlGetDtdElementDesc (xmlDtdPtr dtd,
407 const xmlChar *name);
409 #ifdef LIBXML_VALID_ENABLED
411 XMLPUBFUN int XMLCALL
412 xmlValidGetPotentialChildren(xmlElementContent *ctree,
413 const xmlChar **names,
417 XMLPUBFUN int XMLCALL
418 xmlValidGetValidElements(xmlNode *prev,
420 const xmlChar **names,
422 XMLPUBFUN int XMLCALL
423 xmlValidateNameValue (const xmlChar *value);
424 XMLPUBFUN int XMLCALL
425 xmlValidateNamesValue (const xmlChar *value);
426 XMLPUBFUN int XMLCALL
427 xmlValidateNmtokenValue (const xmlChar *value);
428 XMLPUBFUN int XMLCALL
429 xmlValidateNmtokensValue(const xmlChar *value);
431 #ifdef LIBXML_REGEXP_ENABLED
433 * Validation based on the regexp support
435 XMLPUBFUN int XMLCALL
436 xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
439 XMLPUBFUN int XMLCALL
440 xmlValidatePushElement (xmlValidCtxtPtr ctxt,
443 const xmlChar *qname);
444 XMLPUBFUN int XMLCALL
445 xmlValidatePushCData (xmlValidCtxtPtr ctxt,
448 XMLPUBFUN int XMLCALL
449 xmlValidatePopElement (xmlValidCtxtPtr ctxt,
452 const xmlChar *qname);
453 #endif /* LIBXML_REGEXP_ENABLED */
454 #endif /* LIBXML_VALID_ENABLED */
458 #endif /* __XML_VALID_H__ */