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__ */