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 (*xmlValidityErrorFunc) (void *ctx,
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 (*xmlValidityWarningFunc) (void *ctx,
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 **list,
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__ */