ReactOS  0.4.15-dev-5452-g3c95c95
valid.h
Go to the documentation of this file.
1 /*
2  * Summary: The DTD validation
3  * Description: API for the DTD handling and the validity checking
4  *
5  * Copy: See Copyright for the status of this software.
6  *
7  * Author: Daniel Veillard
8  */
9 
10 
11 #ifndef __XML_VALID_H__
12 #define __XML_VALID_H__
13 
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>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /*
26  * Validation state added for non-determinist content model.
27  */
28 typedef struct _xmlValidState xmlValidState;
30 
43  const char *msg,
44  ...) LIBXML_ATTR_FORMAT(2,3);
45 
57 typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
58  const char *msg,
59  ...) LIBXML_ATTR_FORMAT(2,3);
60 
61 #ifdef IN_LIBXML
62 
67 #define XML_VCTXT_DTD_VALIDATED (1u << 0)
68 
73 #define XML_VCTXT_USE_PCTXT (1u << 1)
74 #endif
75 
76 /*
77  * xmlValidCtxt:
78  * An xmlValidCtxt is used for error reporting when validating.
79  */
80 typedef struct _xmlValidCtxt xmlValidCtxt;
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 */
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 
93  unsigned int flags; /* internal flags */
94  xmlDocPtr doc; /* the document */
95  int valid; /* temporary validity check result */
96 
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 */
102 
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
110 };
111 
112 /*
113  * ALL notation declarations are stored in a table.
114  * There is one table per DTD.
115  */
116 
119 
120 /*
121  * ALL element declarations are stored in a table.
122  * There is one table per DTD.
123  */
124 
127 
128 /*
129  * ALL attribute declarations are stored in a table.
130  * There is one table per DTD.
131  */
132 
135 
136 /*
137  * ALL IDs attributes are stored in a table.
138  * There is one table per document.
139  */
140 
141 typedef struct _xmlHashTable xmlIDTable;
143 
144 /*
145  * ALL Refs attributes are stored in a table.
146  * There is one table per document.
147  */
148 
149 typedef struct _xmlHashTable xmlRefTable;
151 
152 /* Notation */
155  xmlDtdPtr dtd,
156  const xmlChar *name,
157  const xmlChar *PublicID,
158  const xmlChar *SystemID);
159 #ifdef LIBXML_TREE_ENABLED
161  xmlCopyNotationTable (xmlNotationTablePtr table);
162 #endif /* LIBXML_TREE_ENABLED */
163 XMLPUBFUN void XMLCALL
165 #ifdef LIBXML_OUTPUT_ENABLED
166 XMLPUBFUN void XMLCALL
167  xmlDumpNotationDecl (xmlBufferPtr buf,
168  xmlNotationPtr nota);
169 XMLPUBFUN void XMLCALL
170  xmlDumpNotationTable (xmlBufferPtr buf,
172 #endif /* LIBXML_OUTPUT_ENABLED */
173 
174 /* Element Content */
175 /* the non Doc version are being deprecated */
181 XMLPUBFUN void XMLCALL
183 /* the new versions with doc argument */
186  const xmlChar *name,
191 XMLPUBFUN void XMLCALL
194 XMLPUBFUN void XMLCALL
196  int size,
198  int englob);
199 #ifdef LIBXML_OUTPUT_ENABLED
200 /* DEPRECATED */
201 XMLPUBFUN void XMLCALL
202  xmlSprintfElementContent(char *buf,
204  int englob);
205 #endif /* LIBXML_OUTPUT_ENABLED */
206 /* DEPRECATED */
207 
208 /* Element */
211  xmlDtdPtr dtd,
212  const xmlChar *name,
215 #ifdef LIBXML_TREE_ENABLED
217  xmlCopyElementTable (xmlElementTablePtr table);
218 #endif /* LIBXML_TREE_ENABLED */
219 XMLPUBFUN void XMLCALL
221 #ifdef LIBXML_OUTPUT_ENABLED
222 XMLPUBFUN void XMLCALL
223  xmlDumpElementTable (xmlBufferPtr buf,
225 XMLPUBFUN void XMLCALL
226  xmlDumpElementDecl (xmlBufferPtr buf,
228 #endif /* LIBXML_OUTPUT_ENABLED */
229 
230 /* Enumeration */
233 XMLPUBFUN void XMLCALL
235 #ifdef LIBXML_TREE_ENABLED
237  xmlCopyEnumeration (xmlEnumerationPtr cur);
238 #endif /* LIBXML_TREE_ENABLED */
239 
240 /* Attribute */
243  xmlDtdPtr dtd,
244  const xmlChar *elem,
245  const xmlChar *name,
246  const xmlChar *ns,
249  const xmlChar *defaultValue,
251 #ifdef LIBXML_TREE_ENABLED
253  xmlCopyAttributeTable (xmlAttributeTablePtr table);
254 #endif /* LIBXML_TREE_ENABLED */
255 XMLPUBFUN void XMLCALL
257 #ifdef LIBXML_OUTPUT_ENABLED
258 XMLPUBFUN void XMLCALL
259  xmlDumpAttributeTable (xmlBufferPtr buf,
261 XMLPUBFUN void XMLCALL
262  xmlDumpAttributeDecl (xmlBufferPtr buf,
264 #endif /* LIBXML_OUTPUT_ENABLED */
265 
266 /* IDs */
269  xmlDocPtr doc,
270  const xmlChar *value,
271  xmlAttrPtr attr);
272 XMLPUBFUN void XMLCALL
275  xmlGetID (xmlDocPtr doc,
276  const xmlChar *ID);
277 XMLPUBFUN int XMLCALL
278  xmlIsID (xmlDocPtr doc,
280  xmlAttrPtr attr);
281 XMLPUBFUN int XMLCALL
282  xmlRemoveID (xmlDocPtr doc,
283  xmlAttrPtr attr);
284 
285 /* IDREFs */
289  xmlDocPtr doc,
290  const xmlChar *value,
291  xmlAttrPtr attr);
293 XMLPUBFUN void XMLCALL
296 XMLPUBFUN int XMLCALL
297  xmlIsRef (xmlDocPtr doc,
299  xmlAttrPtr attr);
301 XMLPUBFUN int XMLCALL
302  xmlRemoveRef (xmlDocPtr doc,
303  xmlAttrPtr attr);
306  xmlGetRefs (xmlDocPtr doc,
307  const xmlChar *ID);
308 
312 #ifdef LIBXML_VALID_ENABLED
313 /* Allocate/Release Validation Contexts */
315  xmlNewValidCtxt(void);
316 XMLPUBFUN void XMLCALL
317  xmlFreeValidCtxt(xmlValidCtxtPtr);
318 
319 XMLPUBFUN int XMLCALL
320  xmlValidateRoot (xmlValidCtxtPtr ctxt,
321  xmlDocPtr doc);
322 XMLPUBFUN int XMLCALL
323  xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
324  xmlDocPtr doc,
327  xmlValidNormalizeAttributeValue(xmlDocPtr doc,
329  const xmlChar *name,
330  const xmlChar *value);
332  xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
333  xmlDocPtr doc,
335  const xmlChar *name,
336  const xmlChar *value);
337 XMLPUBFUN int XMLCALL
338  xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
339  xmlDocPtr doc,
341 XMLPUBFUN int XMLCALL
342  xmlValidateAttributeValue(xmlAttributeType type,
343  const xmlChar *value);
344 XMLPUBFUN int XMLCALL
345  xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
346  xmlDocPtr doc,
347  xmlNotationPtr nota);
348 XMLPUBFUN int XMLCALL
349  xmlValidateDtd (xmlValidCtxtPtr ctxt,
350  xmlDocPtr doc,
351  xmlDtdPtr dtd);
352 XMLPUBFUN int XMLCALL
353  xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
354  xmlDocPtr doc);
355 XMLPUBFUN int XMLCALL
356  xmlValidateDocument (xmlValidCtxtPtr ctxt,
357  xmlDocPtr doc);
358 XMLPUBFUN int XMLCALL
359  xmlValidateElement (xmlValidCtxtPtr ctxt,
360  xmlDocPtr doc,
361  xmlNodePtr elem);
362 XMLPUBFUN int XMLCALL
363  xmlValidateOneElement (xmlValidCtxtPtr ctxt,
364  xmlDocPtr doc,
365  xmlNodePtr elem);
366 XMLPUBFUN int XMLCALL
367  xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
368  xmlDocPtr doc,
371  const xmlChar *value);
372 XMLPUBFUN int XMLCALL
373  xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
374  xmlDocPtr doc,
376  const xmlChar *prefix,
377  xmlNsPtr ns,
378  const xmlChar *value);
379 XMLPUBFUN int XMLCALL
380  xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
381  xmlDocPtr doc);
382 #endif /* LIBXML_VALID_ENABLED */
383 
384 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
385 XMLPUBFUN int XMLCALL
386  xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
387  xmlDocPtr doc,
388  const xmlChar *notationName);
389 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
390 
391 XMLPUBFUN int XMLCALL
393  const xmlChar *name);
396  const xmlChar *elem,
397  const xmlChar *name);
400  const xmlChar *elem,
401  const xmlChar *name,
402  const xmlChar *prefix);
405  const xmlChar *name);
408  const xmlChar *name,
409  const xmlChar *prefix);
412  const xmlChar *name);
413 
414 #ifdef LIBXML_VALID_ENABLED
415 
416 XMLPUBFUN int XMLCALL
417  xmlValidGetPotentialChildren(xmlElementContent *ctree,
418  const xmlChar **names,
419  int *len,
420  int max);
421 
422 XMLPUBFUN int XMLCALL
423  xmlValidGetValidElements(xmlNode *prev,
424  xmlNode *next,
425  const xmlChar **names,
426  int max);
427 XMLPUBFUN int XMLCALL
428  xmlValidateNameValue (const xmlChar *value);
429 XMLPUBFUN int XMLCALL
430  xmlValidateNamesValue (const xmlChar *value);
431 XMLPUBFUN int XMLCALL
432  xmlValidateNmtokenValue (const xmlChar *value);
433 XMLPUBFUN int XMLCALL
434  xmlValidateNmtokensValue(const xmlChar *value);
435 
436 #ifdef LIBXML_REGEXP_ENABLED
437 /*
438  * Validation based on the regexp support
439  */
440 XMLPUBFUN int XMLCALL
441  xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
443 
444 XMLPUBFUN int XMLCALL
445  xmlValidatePushElement (xmlValidCtxtPtr ctxt,
446  xmlDocPtr doc,
448  const xmlChar *qname);
449 XMLPUBFUN int XMLCALL
450  xmlValidatePushCData (xmlValidCtxtPtr ctxt,
451  const xmlChar *data,
452  int len);
453 XMLPUBFUN int XMLCALL
454  xmlValidatePopElement (xmlValidCtxtPtr ctxt,
455  xmlDocPtr doc,
457  const xmlChar *qname);
458 #endif /* LIBXML_REGEXP_ENABLED */
459 #endif /* LIBXML_VALID_ENABLED */
460 #ifdef __cplusplus
461 }
462 #endif
463 #endif /* __XML_VALID_H__ */
int nodeMax
Definition: valid.h:90
XMLPUBFUN int XMLCALL xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr)
Definition: valid.c:2835
int nodeNr
Definition: valid.h:89
#define max(a, b)
Definition: svc.c:63
Definition: pdh_main.c:93
#define XML_DEPRECATED
Definition: xmlversion.h:494
void(XMLCDECL *) typede void)(XMLCDECL *xmlValidityWarningFunc)(void *ctx
Definition: valid.h:57
XMLPUBFUN xmlNotationPtr XMLCALL xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name, const xmlChar *PublicID, const xmlChar *SystemID)
Definition: valid.c:2394
XMLPUBFUN void XMLCALL xmlFreeAttributeTable(xmlAttributeTablePtr table)
Definition: valid.c:2193
xmlValidState * xmlValidStatePtr
Definition: valid.h:29
XML_DEPRECATED XMLPUBFUN xmlRefPtr XMLCALL xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr)
Definition: valid.c:3003
XMLPUBFUN void XMLCALL xmlFreeIDTable(xmlIDTablePtr table)
Definition: valid.c:2756
Definition: tree.h:389
xmlValidityErrorFunc error
Definition: valid.h:84
#define XMLPUBFUN
Definition: xmlexports.h:61
xmlElementTable * xmlElementTablePtr
Definition: valid.h:126
XMLPUBFUN xmlAttributePtr XMLCALL xmlGetDtdAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name)
Definition: valid.c:3379
XMLPUBFUN xmlEnumerationPtr XMLCALL xmlCreateEnumeration(const xmlChar *name)
Definition: valid.c:1795
XMLPUBFUN xmlElementContentPtr XMLCALL xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name, xmlElementContentType type)
Definition: valid.c:908
xmlNodePtr * nodeTab
Definition: valid.h:91
XMLPUBFUN xmlElementContentPtr XMLCALL xmlCopyElementContent(xmlElementContentPtr content)
Definition: valid.c:1077
XMLPUBFUN xmlAttrPtr XMLCALL xmlGetID(xmlDocPtr doc, const xmlChar *ID)
Definition: valid.c:2874
Definition: tree.h:406
GLuint GLuint * names
Definition: glext.h:11545
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
xmlElementTypeVal
Definition: tree.h:322
void(XMLCDECL *) typedef const cha LIBXML_ATTR_FORMAT)(2, 3)
Definition: valid.h:59
Definition: tree.h:474
XMLPUBFUN void XMLCALL xmlSnprintfElementContent(char *buf, int size, xmlElementContentPtr content, int englob)
Definition: valid.c:1285
xmlNodePtr node
Definition: valid.h:88
void * am
Definition: valid.h:107
static size_t elem
Definition: string.c:68
xmlValidCtxt * xmlValidCtxtPtr
Definition: valid.h:81
content
Definition: atl_ax.c:993
XMLPUBFUN void XMLCALL xmlFreeNotationTable(xmlNotationTablePtr table)
Definition: valid.c:2471
xmlValidState * vstateTab
Definition: valid.h:101
xmlAttributeTable * xmlAttributeTablePtr
Definition: valid.h:134
XMLPUBFUN xmlNotationPtr XMLCALL xmlGetDtdNotationDesc(xmlDtdPtr dtd, const xmlChar *name)
Definition: valid.c:3438
GLsizeiptr size
Definition: glext.h:5919
xmlAttributeDefault
Definition: tree.h:225
XMLPUBFUN void XMLCALL xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur)
Definition: valid.c:1089
XMLPUBFUN xmlElementContentPtr XMLCALL xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr content)
Definition: valid.c:995
Definition: cookie.c:201
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
XMLPUBFUN xmlAttributePtr XMLCALL xmlGetDtdQAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name, const xmlChar *prefix)
Definition: valid.c:3416
int vstateMax
Definition: valid.h:100
Definition: tree.h:489
void(XMLCDECL * xmlValidityErrorFunc)(void *ctx, const char *msg,...) LIBXML_ATTR_FORMAT(2
Definition: valid.h:42
XMLPUBFUN int XMLCALL xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr)
Definition: valid.c:2774
Definition: mxnamespace.c:44
xmlNotationTable * xmlNotationTablePtr
Definition: valid.h:118
void(XMLCDECL *) typedef const char msg)
Definition: valid.h:58
XMLPUBFUN xmlElementPtr XMLCALL xmlGetDtdQElementDesc(xmlDtdPtr dtd, const xmlChar *name, const xmlChar *prefix)
Definition: valid.c:3355
unsigned char xmlChar
Definition: xmlstring.h:28
GLenum GLsizei len
Definition: glext.h:6722
XMLPUBFUN xmlIDPtr XMLCALL xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr)
Definition: valid.c:2672
#define ID
Definition: ruserpass.c:36
XMLPUBFUN xmlAttributePtr XMLCALL xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name, const xmlChar *ns, xmlAttributeType type, xmlAttributeDefault def, const xmlChar *defaultValue, xmlEnumerationPtr tree)
Definition: valid.c:1967
XMLPUBFUN xmlElementContentPtr XMLCALL xmlNewElementContent(const xmlChar *name, xmlElementContentType type)
Definition: valid.c:981
FxCollectionEntry * cur
XMLPUBFUN xmlElementPtr XMLCALL xmlAddElementDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name, xmlElementTypeVal type, xmlElementContentPtr content)
Definition: valid.c:1418
static unsigned __int64 next
Definition: rand_nt.c:6
Definition: list.c:38
XML_DEPRECATED XMLPUBFUN void XMLCALL xmlFreeRefTable(xmlRefTablePtr table)
Definition: valid.c:3103
xmlIDTable * xmlIDTablePtr
Definition: valid.h:142
xmlElementContentType
Definition: tree.h:278
XMLPUBFUN int XMLCALL xmlIsMixedElement(xmlDocPtr doc, const xmlChar *name)
Definition: valid.c:3494
#define XMLCDECL
Definition: xmlexports.h:52
Definition: tree.h:551
#define XMLCALL
Definition: tree.h:434
Definition: name.c:38
xmlRefTable * xmlRefTablePtr
Definition: valid.h:150
void * userData
Definition: valid.h:83
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
XML_DEPRECATED XMLPUBFUN int XMLCALL xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr)
Definition: valid.c:3164
unsigned int flags
Definition: valid.h:93
XMLPUBFUN void XMLCALL xmlFreeElementContent(xmlElementContentPtr cur)
Definition: valid.c:1155
int valid
Definition: valid.h:95
xmlDocPtr doc
Definition: valid.h:94
xmlValidState * vstate
Definition: valid.h:98
xmlValidityWarningFunc warning
Definition: valid.h:85
XMLPUBFUN void XMLCALL xmlFreeEnumeration(xmlEnumerationPtr cur)
Definition: valid.c:1817
xmlAttributeType
Definition: tree.h:206
Definition: tree.h:457
XMLPUBFUN xmlElementPtr XMLCALL xmlGetDtdElementDesc(xmlDtdPtr dtd, const xmlChar *name)
Definition: valid.c:3257
XMLPUBFUN void XMLCALL xmlFreeElementTable(xmlElementTablePtr table)
Definition: valid.c:1641
void * state
Definition: valid.h:108
XML_DEPRECATED XMLPUBFUN int XMLCALL xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr)
Definition: valid.c:3122
int vstateNr
Definition: valid.h:99
XML_DEPRECATED XMLPUBFUN xmlListPtr XMLCALL xmlGetRefs(xmlDocPtr doc, const xmlChar *ID)
Definition: valid.c:3222
struct _xmlValidState xmlValidState
Definition: valid.h:28