blob: d13e4eb17229a8c970bce36099fd58c8edce3b8b [file] [log] [blame]
Owen Taylor3473f882001-02-23 17:55:21 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: The DTD validation
3 * Description: API for the DTD handling and the validity checking
Owen Taylor3473f882001-02-23 17:55:21 +00004 *
Daniel Veillardbe586972003-11-18 20:56:51 +00005 * Copy: See Copyright for the status of this software.
Owen Taylor3473f882001-02-23 17:55:21 +00006 *
Daniel Veillardbe586972003-11-18 20:56:51 +00007 * Author: Daniel Veillard
Owen Taylor3473f882001-02-23 17:55:21 +00008 */
9
10
11#ifndef __XML_VALID_H__
12#define __XML_VALID_H__
13
Igor Zlatkovic76874e42003-08-25 09:05:12 +000014#include <libxml/xmlversion.h>
Daniel Veillard659e71e2003-10-10 14:10:40 +000015#include <libxml/xmlerror.h>
Owen Taylor3473f882001-02-23 17:55:21 +000016#include <libxml/tree.h>
Daniel Veillard56a4cb82001-03-24 17:00:36 +000017#include <libxml/list.h>
Daniel Veillardaeb258a2002-09-13 14:48:12 +000018#include <libxml/xmlautomata.h>
19#include <libxml/xmlregexp.h>
Owen Taylor3473f882001-02-23 17:55:21 +000020
21#ifdef __cplusplus
22extern "C" {
23#endif
24
Daniel Veillarddab4cb32001-04-20 13:03:48 +000025/*
Daniel Veillard61f26172002-03-12 18:46:39 +000026 * Validation state added for non-determinist content model.
Daniel Veillarddab4cb32001-04-20 13:03:48 +000027 */
28typedef struct _xmlValidState xmlValidState;
29typedef xmlValidState *xmlValidStatePtr;
30
Owen Taylor3473f882001-02-23 17:55:21 +000031/**
Daniel Veillard9d06d302002-01-22 18:15:52 +000032 * xmlValidityErrorFunc:
William M. Brack4e3a9fa2004-08-03 22:41:11 +000033 * @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.
Daniel Veillard9d06d302002-01-22 18:15:52 +000036 * @msg: the string to format *printf like vararg
37 * @...: remaining arguments to the format
38 *
Daniel Veillard61f26172002-03-12 18:46:39 +000039 * Callback called when a validity error is found. This is a message
Daniel Veillard9d06d302002-01-22 18:15:52 +000040 * oriented function similar to an *printf function.
41 */
Daniel Veillardffa3c742005-07-21 13:24:09 +000042typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
Daniel Veillard9d06d302002-01-22 18:15:52 +000043 const char *msg,
44 ...);
45
46/**
47 * xmlValidityWarningFunc:
William M. Brack4e3a9fa2004-08-03 22:41:11 +000048 * @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.
Daniel Veillard9d06d302002-01-22 18:15:52 +000051 * @msg: the string to format *printf like vararg
52 * @...: remaining arguments to the format
53 *
Daniel Veillard61f26172002-03-12 18:46:39 +000054 * Callback called when a validity warning is found. This is a message
Daniel Veillard9d06d302002-01-22 18:15:52 +000055 * oriented function similar to an *printf function.
56 */
Daniel Veillardffa3c742005-07-21 13:24:09 +000057typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
Daniel Veillard9d06d302002-01-22 18:15:52 +000058 const char *msg,
59 ...);
60
Daniel Veillardeff45a92004-10-29 12:10:55 +000061#ifdef IN_LIBXML
62/**
63 * XML_CTXT_FINISH_DTD_0:
64 *
65 * Special value for finishDtd field when embedded in an xmlParserCtxt
66 */
67#define XML_CTXT_FINISH_DTD_0 0xabcd1234
68/**
69 * XML_CTXT_FINISH_DTD_1:
70 *
71 * Special value for finishDtd field when embedded in an xmlParserCtxt
72 */
73#define XML_CTXT_FINISH_DTD_1 0xabcd1235
74#endif
75
William M. Brack60f394e2003-11-16 06:25:42 +000076/*
Daniel Veillard9d06d302002-01-22 18:15:52 +000077 * xmlValidCtxt:
Daniel Veillard61f26172002-03-12 18:46:39 +000078 * An xmlValidCtxt is used for error reporting when validating.
Owen Taylor3473f882001-02-23 17:55:21 +000079 */
Owen Taylor3473f882001-02-23 17:55:21 +000080typedef struct _xmlValidCtxt xmlValidCtxt;
81typedef xmlValidCtxt *xmlValidCtxtPtr;
82struct _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
Daniel Veillardeff45a92004-10-29 12:10:55 +000093 unsigned int finishDtd; /* finished validating the Dtd ? */
Owen Taylor3473f882001-02-23 17:55:21 +000094 xmlDocPtr doc; /* the document */
95 int valid; /* temporary validity check result */
Daniel Veillarddab4cb32001-04-20 13:03:48 +000096
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 */
Daniel Veillardaeb258a2002-09-13 14:48:12 +0000102
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
Owen Taylor3473f882001-02-23 17:55:21 +0000110};
111
112/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000113 * ALL notation declarations are stored in a table.
114 * There is one table per DTD.
Owen Taylor3473f882001-02-23 17:55:21 +0000115 */
116
117typedef struct _xmlHashTable xmlNotationTable;
118typedef xmlNotationTable *xmlNotationTablePtr;
119
120/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000121 * ALL element declarations are stored in a table.
122 * There is one table per DTD.
Owen Taylor3473f882001-02-23 17:55:21 +0000123 */
124
125typedef struct _xmlHashTable xmlElementTable;
126typedef xmlElementTable *xmlElementTablePtr;
127
128/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000129 * ALL attribute declarations are stored in a table.
130 * There is one table per DTD.
Owen Taylor3473f882001-02-23 17:55:21 +0000131 */
132
133typedef struct _xmlHashTable xmlAttributeTable;
134typedef xmlAttributeTable *xmlAttributeTablePtr;
135
136/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000137 * ALL IDs attributes are stored in a table.
138 * There is one table per document.
Owen Taylor3473f882001-02-23 17:55:21 +0000139 */
140
141typedef struct _xmlHashTable xmlIDTable;
142typedef xmlIDTable *xmlIDTablePtr;
143
144/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000145 * ALL Refs attributes are stored in a table.
146 * There is one table per document.
Owen Taylor3473f882001-02-23 17:55:21 +0000147 */
148
149typedef struct _xmlHashTable xmlRefTable;
150typedef xmlRefTable *xmlRefTablePtr;
151
Owen Taylor3473f882001-02-23 17:55:21 +0000152/* Notation */
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000153XMLPUBFUN xmlNotationPtr XMLCALL
154 xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000155 xmlDtdPtr dtd,
156 const xmlChar *name,
157 const xmlChar *PublicID,
158 const xmlChar *SystemID);
William M. Brack21e4ef22005-01-02 09:53:13 +0000159#ifdef LIBXML_TREE_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000160XMLPUBFUN xmlNotationTablePtr XMLCALL
161 xmlCopyNotationTable (xmlNotationTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000162#endif /* LIBXML_TREE_ENABLED */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000163XMLPUBFUN void XMLCALL
164 xmlFreeNotationTable (xmlNotationTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000165#ifdef LIBXML_OUTPUT_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000166XMLPUBFUN void XMLCALL
167 xmlDumpNotationDecl (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000168 xmlNotationPtr nota);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000169XMLPUBFUN void XMLCALL
170 xmlDumpNotationTable (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000171 xmlNotationTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000172#endif /* LIBXML_OUTPUT_ENABLED */
Owen Taylor3473f882001-02-23 17:55:21 +0000173
174/* Element Content */
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000175/* the non Doc version are being deprecated */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000176XMLPUBFUN xmlElementContentPtr XMLCALL
177 xmlNewElementContent (const xmlChar *name,
178 xmlElementContentType type);
179XMLPUBFUN xmlElementContentPtr XMLCALL
180 xmlCopyElementContent (xmlElementContentPtr content);
181XMLPUBFUN void XMLCALL
182 xmlFreeElementContent (xmlElementContentPtr cur);
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000183/* the new versions with doc argument */
184XMLPUBFUN xmlElementContentPtr XMLCALL
185 xmlNewDocElementContent (xmlDocPtr doc,
186 const xmlChar *name,
187 xmlElementContentType type);
188XMLPUBFUN xmlElementContentPtr XMLCALL
189 xmlCopyDocElementContent(xmlDocPtr doc,
190 xmlElementContentPtr content);
191XMLPUBFUN void XMLCALL
192 xmlFreeDocElementContent(xmlDocPtr doc,
193 xmlElementContentPtr cur);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000194XMLPUBFUN void XMLCALL
195 xmlSnprintfElementContent(char *buf,
196 int size,
197 xmlElementContentPtr content,
Daniel Veillard1b75c3b2005-06-26 21:49:08 +0000198 int englob);
William M. Brack21e4ef22005-01-02 09:53:13 +0000199#ifdef LIBXML_OUTPUT_ENABLED
Daniel Veillardd3d06722001-08-15 12:06:36 +0000200/* DEPRECATED */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000201XMLPUBFUN void XMLCALL
202 xmlSprintfElementContent(char *buf,
203 xmlElementContentPtr content,
Daniel Veillard1b75c3b2005-06-26 21:49:08 +0000204 int englob);
William M. Brack21e4ef22005-01-02 09:53:13 +0000205#endif /* LIBXML_OUTPUT_ENABLED */
Daniel Veillardd3d06722001-08-15 12:06:36 +0000206/* DEPRECATED */
Owen Taylor3473f882001-02-23 17:55:21 +0000207
208/* Element */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000209XMLPUBFUN xmlElementPtr XMLCALL
210 xmlAddElementDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000211 xmlDtdPtr dtd,
212 const xmlChar *name,
213 xmlElementTypeVal type,
214 xmlElementContentPtr content);
William M. Brack21e4ef22005-01-02 09:53:13 +0000215#ifdef LIBXML_TREE_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000216XMLPUBFUN xmlElementTablePtr XMLCALL
217 xmlCopyElementTable (xmlElementTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000218#endif /* LIBXML_TREE_ENABLED */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000219XMLPUBFUN void XMLCALL
220 xmlFreeElementTable (xmlElementTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000221#ifdef LIBXML_OUTPUT_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000222XMLPUBFUN void XMLCALL
223 xmlDumpElementTable (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000224 xmlElementTablePtr table);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000225XMLPUBFUN void XMLCALL
226 xmlDumpElementDecl (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000227 xmlElementPtr elem);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000228#endif /* LIBXML_OUTPUT_ENABLED */
Owen Taylor3473f882001-02-23 17:55:21 +0000229
230/* Enumeration */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000231XMLPUBFUN xmlEnumerationPtr XMLCALL
232 xmlCreateEnumeration (const xmlChar *name);
233XMLPUBFUN void XMLCALL
234 xmlFreeEnumeration (xmlEnumerationPtr cur);
William M. Brack21e4ef22005-01-02 09:53:13 +0000235#ifdef LIBXML_TREE_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000236XMLPUBFUN xmlEnumerationPtr XMLCALL
237 xmlCopyEnumeration (xmlEnumerationPtr cur);
William M. Brack21e4ef22005-01-02 09:53:13 +0000238#endif /* LIBXML_TREE_ENABLED */
Owen Taylor3473f882001-02-23 17:55:21 +0000239
240/* Attribute */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000241XMLPUBFUN 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);
William M. Brack21e4ef22005-01-02 09:53:13 +0000251#ifdef LIBXML_TREE_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000252XMLPUBFUN xmlAttributeTablePtr XMLCALL
253 xmlCopyAttributeTable (xmlAttributeTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000254#endif /* LIBXML_TREE_ENABLED */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000255XMLPUBFUN void XMLCALL
256 xmlFreeAttributeTable (xmlAttributeTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000257#ifdef LIBXML_OUTPUT_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000258XMLPUBFUN void XMLCALL
259 xmlDumpAttributeTable (xmlBufferPtr buf,
260 xmlAttributeTablePtr table);
261XMLPUBFUN void XMLCALL
262 xmlDumpAttributeDecl (xmlBufferPtr buf,
263 xmlAttributePtr attr);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000264#endif /* LIBXML_OUTPUT_ENABLED */
Owen Taylor3473f882001-02-23 17:55:21 +0000265
266/* IDs */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000267XMLPUBFUN xmlIDPtr XMLCALL
268 xmlAddID (xmlValidCtxtPtr ctxt,
269 xmlDocPtr doc,
270 const xmlChar *value,
271 xmlAttrPtr attr);
272XMLPUBFUN void XMLCALL
273 xmlFreeIDTable (xmlIDTablePtr table);
274XMLPUBFUN xmlAttrPtr XMLCALL
275 xmlGetID (xmlDocPtr doc,
276 const xmlChar *ID);
277XMLPUBFUN int XMLCALL
278 xmlIsID (xmlDocPtr doc,
279 xmlNodePtr elem,
280 xmlAttrPtr attr);
281XMLPUBFUN int XMLCALL
282 xmlRemoveID (xmlDocPtr doc,
283 xmlAttrPtr attr);
Owen Taylor3473f882001-02-23 17:55:21 +0000284
285/* IDREFs */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000286XMLPUBFUN xmlRefPtr XMLCALL
287 xmlAddRef (xmlValidCtxtPtr ctxt,
288 xmlDocPtr doc,
289 const xmlChar *value,
290 xmlAttrPtr attr);
291XMLPUBFUN void XMLCALL
292 xmlFreeRefTable (xmlRefTablePtr table);
293XMLPUBFUN int XMLCALL
294 xmlIsRef (xmlDocPtr doc,
295 xmlNodePtr elem,
296 xmlAttrPtr attr);
297XMLPUBFUN int XMLCALL
298 xmlRemoveRef (xmlDocPtr doc,
299 xmlAttrPtr attr);
300XMLPUBFUN xmlListPtr XMLCALL
301 xmlGetRefs (xmlDocPtr doc,
302 const xmlChar *ID);
Owen Taylor3473f882001-02-23 17:55:21 +0000303
304/**
Daniel Veillard61f26172002-03-12 18:46:39 +0000305 * The public function calls related to validity checking.
Owen Taylor3473f882001-02-23 17:55:21 +0000306 */
Daniel Veillarda2351322004-06-27 12:08:10 +0000307#ifdef LIBXML_VALID_ENABLED
William M. Brack21e4ef22005-01-02 09:53:13 +0000308/* Allocate/Release Validation Contexts */
309XMLPUBFUN xmlValidCtxtPtr XMLCALL
310 xmlNewValidCtxt(void);
311XMLPUBFUN void XMLCALL
312 xmlFreeValidCtxt(xmlValidCtxtPtr);
313
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000314XMLPUBFUN int XMLCALL
315 xmlValidateRoot (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000316 xmlDocPtr doc);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000317XMLPUBFUN int XMLCALL
318 xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000319 xmlDocPtr doc,
320 xmlElementPtr elem);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000321XMLPUBFUN xmlChar * XMLCALL
322 xmlValidNormalizeAttributeValue(xmlDocPtr doc,
Owen Taylor3473f882001-02-23 17:55:21 +0000323 xmlNodePtr elem,
324 const xmlChar *name,
325 const xmlChar *value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000326XMLPUBFUN xmlChar * XMLCALL
327 xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
Daniel Veillard8dc16a62002-02-19 21:08:48 +0000328 xmlDocPtr doc,
329 xmlNodePtr elem,
330 const xmlChar *name,
331 const xmlChar *value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000332XMLPUBFUN int XMLCALL
333 xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000334 xmlDocPtr doc,
335 xmlAttributePtr attr);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000336XMLPUBFUN int XMLCALL
337 xmlValidateAttributeValue(xmlAttributeType type,
Owen Taylor3473f882001-02-23 17:55:21 +0000338 const xmlChar *value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000339XMLPUBFUN int XMLCALL
340 xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000341 xmlDocPtr doc,
342 xmlNotationPtr nota);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000343XMLPUBFUN int XMLCALL
344 xmlValidateDtd (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000345 xmlDocPtr doc,
346 xmlDtdPtr dtd);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000347XMLPUBFUN int XMLCALL
348 xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000349 xmlDocPtr doc);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000350XMLPUBFUN int XMLCALL
351 xmlValidateDocument (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000352 xmlDocPtr doc);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000353XMLPUBFUN int XMLCALL
354 xmlValidateElement (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000355 xmlDocPtr doc,
356 xmlNodePtr elem);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000357XMLPUBFUN int XMLCALL
358 xmlValidateOneElement (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000359 xmlDocPtr doc,
360 xmlNodePtr elem);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000361XMLPUBFUN int XMLCALL
362 xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000363 xmlDocPtr doc,
364 xmlNodePtr elem,
365 xmlAttrPtr attr,
366 const xmlChar *value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000367XMLPUBFUN int XMLCALL
368 xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
Daniel Veillard90d68fb2002-09-26 16:10:21 +0000369 xmlDocPtr doc,
370 xmlNodePtr elem,
371 const xmlChar *prefix,
372 xmlNsPtr ns,
373 const xmlChar *value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000374XMLPUBFUN int XMLCALL
375 xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000376 xmlDocPtr doc);
William M. Brack21e4ef22005-01-02 09:53:13 +0000377#endif /* LIBXML_VALID_ENABLED */
378
379#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000380XMLPUBFUN int XMLCALL
381 xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000382 xmlDocPtr doc,
383 const xmlChar *notationName);
William M. Brack21e4ef22005-01-02 09:53:13 +0000384#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
Daniel Veillarda2351322004-06-27 12:08:10 +0000385
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000386XMLPUBFUN int XMLCALL
387 xmlIsMixedElement (xmlDocPtr doc,
Owen Taylor3473f882001-02-23 17:55:21 +0000388 const xmlChar *name);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000389XMLPUBFUN xmlAttributePtr XMLCALL
390 xmlGetDtdAttrDesc (xmlDtdPtr dtd,
Owen Taylor3473f882001-02-23 17:55:21 +0000391 const xmlChar *elem,
392 const xmlChar *name);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000393XMLPUBFUN xmlAttributePtr XMLCALL
394 xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
Daniel Veillard48da9102001-08-07 01:10:10 +0000395 const xmlChar *elem,
396 const xmlChar *name,
397 const xmlChar *prefix);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000398XMLPUBFUN xmlNotationPtr XMLCALL
399 xmlGetDtdNotationDesc (xmlDtdPtr dtd,
Owen Taylor3473f882001-02-23 17:55:21 +0000400 const xmlChar *name);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000401XMLPUBFUN xmlElementPtr XMLCALL
402 xmlGetDtdQElementDesc (xmlDtdPtr dtd,
Daniel Veillard48da9102001-08-07 01:10:10 +0000403 const xmlChar *name,
404 const xmlChar *prefix);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000405XMLPUBFUN xmlElementPtr XMLCALL
406 xmlGetDtdElementDesc (xmlDtdPtr dtd,
Owen Taylor3473f882001-02-23 17:55:21 +0000407 const xmlChar *name);
408
William M. Brack21e4ef22005-01-02 09:53:13 +0000409#ifdef LIBXML_VALID_ENABLED
410
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000411XMLPUBFUN int XMLCALL
412 xmlValidGetPotentialChildren(xmlElementContent *ctree,
Owen Taylor3473f882001-02-23 17:55:21 +0000413 const xmlChar **list,
414 int *len,
415 int max);
Daniel Veillarda2351322004-06-27 12:08:10 +0000416
William M. Brack21e4ef22005-01-02 09:53:13 +0000417XMLPUBFUN int XMLCALL
418 xmlValidGetValidElements(xmlNode *prev,
419 xmlNode *next,
420 const xmlChar **names,
421 int max);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000422XMLPUBFUN int XMLCALL
423 xmlValidateNameValue (const xmlChar *value);
424XMLPUBFUN int XMLCALL
425 xmlValidateNamesValue (const xmlChar *value);
426XMLPUBFUN int XMLCALL
427 xmlValidateNmtokenValue (const xmlChar *value);
428XMLPUBFUN int XMLCALL
429 xmlValidateNmtokensValue(const xmlChar *value);
Daniel Veillard84d70a42002-09-16 10:51:38 +0000430
431#ifdef LIBXML_REGEXP_ENABLED
432/*
433 * Validation based on the regexp support
434 */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000435XMLPUBFUN int XMLCALL
436 xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
Daniel Veillard84d70a42002-09-16 10:51:38 +0000437 xmlElementPtr elem);
438
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000439XMLPUBFUN int XMLCALL
440 xmlValidatePushElement (xmlValidCtxtPtr ctxt,
Daniel Veillardea7751d2002-12-20 00:16:24 +0000441 xmlDocPtr doc,
442 xmlNodePtr elem,
443 const xmlChar *qname);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000444XMLPUBFUN int XMLCALL
445 xmlValidatePushCData (xmlValidCtxtPtr ctxt,
Daniel Veillardea7751d2002-12-20 00:16:24 +0000446 const xmlChar *data,
447 int len);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000448XMLPUBFUN int XMLCALL
449 xmlValidatePopElement (xmlValidCtxtPtr ctxt,
Daniel Veillardea7751d2002-12-20 00:16:24 +0000450 xmlDocPtr doc,
451 xmlNodePtr elem,
452 const xmlChar *qname);
Daniel Veillard84d70a42002-09-16 10:51:38 +0000453#endif /* LIBXML_REGEXP_ENABLED */
William M. Brack21e4ef22005-01-02 09:53:13 +0000454#endif /* LIBXML_VALID_ENABLED */
Owen Taylor3473f882001-02-23 17:55:21 +0000455#ifdef __cplusplus
456}
457#endif
458#endif /* __XML_VALID_H__ */