blob: 2bc7b380c1ed048b9e51b26d2b0ac92738586c12 [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,
Daniel Veillardf076f342009-04-15 09:20:25 +000044 ...) LIBXML_ATTR_FORMAT(2,3);
Daniel Veillard9d06d302002-01-22 18:15:52 +000045
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,
Daniel Veillardf076f342009-04-15 09:20:25 +000059 ...) LIBXML_ATTR_FORMAT(2,3);
Daniel Veillard9d06d302002-01-22 18:15:52 +000060
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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800153XMLPUBFUN xmlNotationPtr XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000154 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
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800160XMLPUBFUN xmlNotationTablePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000161 xmlCopyNotationTable (xmlNotationTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000162#endif /* LIBXML_TREE_ENABLED */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800163XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000164 xmlFreeNotationTable (xmlNotationTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000165#ifdef LIBXML_OUTPUT_ENABLED
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800166XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000167 xmlDumpNotationDecl (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000168 xmlNotationPtr nota);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800169XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000170 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800176XMLPUBFUN xmlElementContentPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000177 xmlNewElementContent (const xmlChar *name,
178 xmlElementContentType type);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800179XMLPUBFUN xmlElementContentPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000180 xmlCopyElementContent (xmlElementContentPtr content);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800181XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000182 xmlFreeElementContent (xmlElementContentPtr cur);
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000183/* the new versions with doc argument */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800184XMLPUBFUN xmlElementContentPtr XMLCALL
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000185 xmlNewDocElementContent (xmlDocPtr doc,
186 const xmlChar *name,
187 xmlElementContentType type);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800188XMLPUBFUN xmlElementContentPtr XMLCALL
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000189 xmlCopyDocElementContent(xmlDocPtr doc,
190 xmlElementContentPtr content);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800191XMLPUBFUN void XMLCALL
Daniel Veillardcee2b3a2005-01-25 00:22:52 +0000192 xmlFreeDocElementContent(xmlDocPtr doc,
193 xmlElementContentPtr cur);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800194XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000195 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800201XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000202 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800209XMLPUBFUN xmlElementPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000210 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
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800216XMLPUBFUN xmlElementTablePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000217 xmlCopyElementTable (xmlElementTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000218#endif /* LIBXML_TREE_ENABLED */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800219XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000220 xmlFreeElementTable (xmlElementTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000221#ifdef LIBXML_OUTPUT_ENABLED
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800222XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000223 xmlDumpElementTable (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000224 xmlElementTablePtr table);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800225XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000226 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800231XMLPUBFUN xmlEnumerationPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000232 xmlCreateEnumeration (const xmlChar *name);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800233XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000234 xmlFreeEnumeration (xmlEnumerationPtr cur);
William M. Brack21e4ef22005-01-02 09:53:13 +0000235#ifdef LIBXML_TREE_ENABLED
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800236XMLPUBFUN xmlEnumerationPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000237 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800241XMLPUBFUN xmlAttributePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000242 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
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800252XMLPUBFUN xmlAttributeTablePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000253 xmlCopyAttributeTable (xmlAttributeTablePtr table);
William M. Brack21e4ef22005-01-02 09:53:13 +0000254#endif /* LIBXML_TREE_ENABLED */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800255XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000256 xmlFreeAttributeTable (xmlAttributeTablePtr table);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000257#ifdef LIBXML_OUTPUT_ENABLED
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800258XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000259 xmlDumpAttributeTable (xmlBufferPtr buf,
260 xmlAttributeTablePtr table);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800261XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000262 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800267XMLPUBFUN xmlIDPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000268 xmlAddID (xmlValidCtxtPtr ctxt,
269 xmlDocPtr doc,
270 const xmlChar *value,
271 xmlAttrPtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800272XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000273 xmlFreeIDTable (xmlIDTablePtr table);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800274XMLPUBFUN xmlAttrPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000275 xmlGetID (xmlDocPtr doc,
276 const xmlChar *ID);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800277XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000278 xmlIsID (xmlDocPtr doc,
279 xmlNodePtr elem,
280 xmlAttrPtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800281XMLPUBFUN int XMLCALL
282 xmlRemoveID (xmlDocPtr doc,
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000283 xmlAttrPtr attr);
Owen Taylor3473f882001-02-23 17:55:21 +0000284
285/* IDREFs */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800286XMLPUBFUN xmlRefPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000287 xmlAddRef (xmlValidCtxtPtr ctxt,
288 xmlDocPtr doc,
289 const xmlChar *value,
290 xmlAttrPtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800291XMLPUBFUN void XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000292 xmlFreeRefTable (xmlRefTablePtr table);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800293XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000294 xmlIsRef (xmlDocPtr doc,
295 xmlNodePtr elem,
296 xmlAttrPtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800297XMLPUBFUN int XMLCALL
298 xmlRemoveRef (xmlDocPtr doc,
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000299 xmlAttrPtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800300XMLPUBFUN xmlListPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000301 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800309XMLPUBFUN xmlValidCtxtPtr XMLCALL
William M. Brack21e4ef22005-01-02 09:53:13 +0000310 xmlNewValidCtxt(void);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800311XMLPUBFUN void XMLCALL
William M. Brack21e4ef22005-01-02 09:53:13 +0000312 xmlFreeValidCtxt(xmlValidCtxtPtr);
313
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800314XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000315 xmlValidateRoot (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000316 xmlDocPtr doc);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800317XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000318 xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000319 xmlDocPtr doc,
320 xmlElementPtr elem);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800321XMLPUBFUN xmlChar * XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000322 xmlValidNormalizeAttributeValue(xmlDocPtr doc,
Owen Taylor3473f882001-02-23 17:55:21 +0000323 xmlNodePtr elem,
324 const xmlChar *name,
325 const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800326XMLPUBFUN xmlChar * XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000327 xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
Daniel Veillard8dc16a62002-02-19 21:08:48 +0000328 xmlDocPtr doc,
329 xmlNodePtr elem,
330 const xmlChar *name,
331 const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800332XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000333 xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000334 xmlDocPtr doc,
335 xmlAttributePtr attr);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800336XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000337 xmlValidateAttributeValue(xmlAttributeType type,
Owen Taylor3473f882001-02-23 17:55:21 +0000338 const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800339XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000340 xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000341 xmlDocPtr doc,
342 xmlNotationPtr nota);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800343XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000344 xmlValidateDtd (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000345 xmlDocPtr doc,
346 xmlDtdPtr dtd);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800347XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000348 xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000349 xmlDocPtr doc);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800350XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000351 xmlValidateDocument (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000352 xmlDocPtr doc);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800353XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000354 xmlValidateElement (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000355 xmlDocPtr doc,
356 xmlNodePtr elem);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800357XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000358 xmlValidateOneElement (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000359 xmlDocPtr doc,
360 xmlNodePtr elem);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800361XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000362 xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
Owen Taylor3473f882001-02-23 17:55:21 +0000363 xmlDocPtr doc,
364 xmlNodePtr elem,
365 xmlAttrPtr attr,
366 const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800367XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000368 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);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800374XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000375 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)
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800380XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000381 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
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800386XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000387 xmlIsMixedElement (xmlDocPtr doc,
Owen Taylor3473f882001-02-23 17:55:21 +0000388 const xmlChar *name);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800389XMLPUBFUN xmlAttributePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000390 xmlGetDtdAttrDesc (xmlDtdPtr dtd,
Owen Taylor3473f882001-02-23 17:55:21 +0000391 const xmlChar *elem,
392 const xmlChar *name);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800393XMLPUBFUN xmlAttributePtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000394 xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
Daniel Veillard48da9102001-08-07 01:10:10 +0000395 const xmlChar *elem,
396 const xmlChar *name,
397 const xmlChar *prefix);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800398XMLPUBFUN xmlNotationPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000399 xmlGetDtdNotationDesc (xmlDtdPtr dtd,
Owen Taylor3473f882001-02-23 17:55:21 +0000400 const xmlChar *name);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800401XMLPUBFUN xmlElementPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000402 xmlGetDtdQElementDesc (xmlDtdPtr dtd,
Daniel Veillard48da9102001-08-07 01:10:10 +0000403 const xmlChar *name,
404 const xmlChar *prefix);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800405XMLPUBFUN xmlElementPtr XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000406 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
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800411XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000412 xmlValidGetPotentialChildren(xmlElementContent *ctree,
Daniel Veillard7802ba52005-10-27 11:56:20 +0000413 const xmlChar **names,
Owen Taylor3473f882001-02-23 17:55:21 +0000414 int *len,
415 int max);
Daniel Veillarda2351322004-06-27 12:08:10 +0000416
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800417XMLPUBFUN int XMLCALL
William M. Brack21e4ef22005-01-02 09:53:13 +0000418 xmlValidGetValidElements(xmlNode *prev,
419 xmlNode *next,
420 const xmlChar **names,
421 int max);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800422XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000423 xmlValidateNameValue (const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800424XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000425 xmlValidateNamesValue (const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800426XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000427 xmlValidateNmtokenValue (const xmlChar *value);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800428XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000429 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 */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800435XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000436 xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
Daniel Veillard84d70a42002-09-16 10:51:38 +0000437 xmlElementPtr elem);
438
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800439XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000440 xmlValidatePushElement (xmlValidCtxtPtr ctxt,
Daniel Veillardea7751d2002-12-20 00:16:24 +0000441 xmlDocPtr doc,
442 xmlNodePtr elem,
443 const xmlChar *qname);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800444XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000445 xmlValidatePushCData (xmlValidCtxtPtr ctxt,
Daniel Veillardea7751d2002-12-20 00:16:24 +0000446 const xmlChar *data,
447 int len);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800448XMLPUBFUN int XMLCALL
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000449 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__ */