LTKCPP-- LLRP Toolkit C Plus Plus Library
valid.h
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;
29 typedef xmlValidState *xmlValidStatePtr;
30 
42 typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
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_CTXT_FINISH_DTD_0 0xabcd1234
68 
73 #define XML_CTXT_FINISH_DTD_1 0xabcd1235
74 #endif
75 
76 /*
77  * xmlValidCtxt:
78  * An xmlValidCtxt is used for error reporting when validating.
79  */
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 */
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 finishDtd; /* finished validating the Dtd ? */
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 
117 typedef struct _xmlHashTable xmlNotationTable;
118 typedef xmlNotationTable *xmlNotationTablePtr;
119 
120 /*
121  * ALL element declarations are stored in a table.
122  * There is one table per DTD.
123  */
124 
125 typedef struct _xmlHashTable xmlElementTable;
126 typedef xmlElementTable *xmlElementTablePtr;
127 
128 /*
129  * ALL attribute declarations are stored in a table.
130  * There is one table per DTD.
131  */
132 
133 typedef struct _xmlHashTable xmlAttributeTable;
134 typedef xmlAttributeTable *xmlAttributeTablePtr;
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;
142 typedef xmlIDTable *xmlIDTablePtr;
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;
150 typedef xmlRefTable *xmlRefTablePtr;
151 
152 /* Notation */
153 XMLPUBFUN xmlNotationPtr XMLCALL
154  xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
155  xmlDtdPtr dtd,
156  const xmlChar *name,
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 */
173 
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,
186  const xmlChar *name,
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,
196  int size,
197  xmlElementContentPtr content,
198  int englob);
199 #ifdef LIBXML_OUTPUT_ENABLED
200 /* DEPRECATED */
201 XMLPUBFUN void XMLCALL
202  xmlSprintfElementContent(char *buf,
203  xmlElementContentPtr content,
204  int englob);
205 #endif /* LIBXML_OUTPUT_ENABLED */
206 /* DEPRECATED */
207 
208 /* Element */
209 XMLPUBFUN xmlElementPtr XMLCALL
210  xmlAddElementDecl (xmlValidCtxtPtr ctxt,
211  xmlDtdPtr dtd,
212  const xmlChar *name,
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,
227  xmlElementPtr elem);
228 #endif /* LIBXML_OUTPUT_ENABLED */
229 
230 /* Enumeration */
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 */
239 
240 /* Attribute */
241 XMLPUBFUN 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);
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 */
265 
266 /* IDs */
267 XMLPUBFUN xmlIDPtr XMLCALL
268  xmlAddID (xmlValidCtxtPtr ctxt,
269  xmlDocPtr doc,
270  const xmlChar *value,
271  xmlAttrPtr attr);
272 XMLPUBFUN void XMLCALL
273  xmlFreeIDTable (xmlIDTablePtr table);
274 XMLPUBFUN xmlAttrPtr XMLCALL
275  xmlGetID (xmlDocPtr doc,
276  const xmlChar *ID);
277 XMLPUBFUN int XMLCALL
278  xmlIsID (xmlDocPtr doc,
279  xmlNodePtr elem,
280  xmlAttrPtr attr);
281 XMLPUBFUN int XMLCALL
282  xmlRemoveID (xmlDocPtr doc,
283  xmlAttrPtr attr);
284 
285 /* IDREFs */
286 XMLPUBFUN xmlRefPtr XMLCALL
287  xmlAddRef (xmlValidCtxtPtr ctxt,
288  xmlDocPtr doc,
289  const xmlChar *value,
290  xmlAttrPtr attr);
291 XMLPUBFUN void XMLCALL
292  xmlFreeRefTable (xmlRefTablePtr table);
293 XMLPUBFUN int XMLCALL
294  xmlIsRef (xmlDocPtr doc,
295  xmlNodePtr elem,
296  xmlAttrPtr attr);
297 XMLPUBFUN int XMLCALL
298  xmlRemoveRef (xmlDocPtr doc,
299  xmlAttrPtr attr);
300 XMLPUBFUN xmlListPtr XMLCALL
301  xmlGetRefs (xmlDocPtr doc,
302  const xmlChar *ID);
303 
307 #ifdef LIBXML_VALID_ENABLED
308 /* Allocate/Release Validation Contexts */
309 XMLPUBFUN xmlValidCtxtPtr XMLCALL
310  xmlNewValidCtxt(void);
311 XMLPUBFUN void XMLCALL
312  xmlFreeValidCtxt(xmlValidCtxtPtr);
313 
314 XMLPUBFUN int XMLCALL
315  xmlValidateRoot (xmlValidCtxtPtr ctxt,
316  xmlDocPtr doc);
317 XMLPUBFUN int XMLCALL
318  xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
319  xmlDocPtr doc,
320  xmlElementPtr elem);
321 XMLPUBFUN xmlChar * XMLCALL
322  xmlValidNormalizeAttributeValue(xmlDocPtr doc,
323  xmlNodePtr elem,
324  const xmlChar *name,
325  const xmlChar *value);
326 XMLPUBFUN xmlChar * XMLCALL
327  xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
328  xmlDocPtr doc,
329  xmlNodePtr elem,
330  const xmlChar *name,
331  const xmlChar *value);
332 XMLPUBFUN int XMLCALL
333  xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
334  xmlDocPtr doc,
335  xmlAttributePtr attr);
336 XMLPUBFUN int XMLCALL
337  xmlValidateAttributeValue(xmlAttributeType type,
338  const xmlChar *value);
339 XMLPUBFUN int XMLCALL
340  xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
341  xmlDocPtr doc,
342  xmlNotationPtr nota);
343 XMLPUBFUN int XMLCALL
344  xmlValidateDtd (xmlValidCtxtPtr ctxt,
345  xmlDocPtr doc,
346  xmlDtdPtr dtd);
347 XMLPUBFUN int XMLCALL
348  xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
349  xmlDocPtr doc);
350 XMLPUBFUN int XMLCALL
351  xmlValidateDocument (xmlValidCtxtPtr ctxt,
352  xmlDocPtr doc);
353 XMLPUBFUN int XMLCALL
354  xmlValidateElement (xmlValidCtxtPtr ctxt,
355  xmlDocPtr doc,
356  xmlNodePtr elem);
357 XMLPUBFUN int XMLCALL
358  xmlValidateOneElement (xmlValidCtxtPtr ctxt,
359  xmlDocPtr doc,
360  xmlNodePtr elem);
361 XMLPUBFUN int XMLCALL
362  xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
363  xmlDocPtr doc,
364  xmlNodePtr elem,
365  xmlAttrPtr attr,
366  const xmlChar *value);
367 XMLPUBFUN int XMLCALL
368  xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
369  xmlDocPtr doc,
370  xmlNodePtr elem,
371  const xmlChar *prefix,
372  xmlNsPtr ns,
373  const xmlChar *value);
374 XMLPUBFUN int XMLCALL
375  xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
376  xmlDocPtr doc);
377 #endif /* LIBXML_VALID_ENABLED */
378 
379 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
380 XMLPUBFUN int XMLCALL
381  xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
382  xmlDocPtr doc,
383  const xmlChar *notationName);
384 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
385 
386 XMLPUBFUN int XMLCALL
387  xmlIsMixedElement (xmlDocPtr doc,
388  const xmlChar *name);
389 XMLPUBFUN xmlAttributePtr XMLCALL
390  xmlGetDtdAttrDesc (xmlDtdPtr dtd,
391  const xmlChar *elem,
392  const xmlChar *name);
393 XMLPUBFUN xmlAttributePtr XMLCALL
394  xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
395  const xmlChar *elem,
396  const xmlChar *name,
397  const xmlChar *prefix);
398 XMLPUBFUN xmlNotationPtr XMLCALL
399  xmlGetDtdNotationDesc (xmlDtdPtr dtd,
400  const xmlChar *name);
401 XMLPUBFUN xmlElementPtr XMLCALL
402  xmlGetDtdQElementDesc (xmlDtdPtr dtd,
403  const xmlChar *name,
404  const xmlChar *prefix);
405 XMLPUBFUN xmlElementPtr XMLCALL
406  xmlGetDtdElementDesc (xmlDtdPtr dtd,
407  const xmlChar *name);
408 
409 #ifdef LIBXML_VALID_ENABLED
410 
411 XMLPUBFUN int XMLCALL
412  xmlValidGetPotentialChildren(xmlElementContent *ctree,
413  const xmlChar **names,
414  int *len,
415  int max);
416 
417 XMLPUBFUN int XMLCALL
418  xmlValidGetValidElements(xmlNode *prev,
419  xmlNode *next,
420  const xmlChar **names,
421  int max);
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);
430 
431 #ifdef LIBXML_REGEXP_ENABLED
432 /*
433  * Validation based on the regexp support
434  */
435 XMLPUBFUN int XMLCALL
436  xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
437  xmlElementPtr elem);
438 
439 XMLPUBFUN int XMLCALL
440  xmlValidatePushElement (xmlValidCtxtPtr ctxt,
441  xmlDocPtr doc,
442  xmlNodePtr elem,
443  const xmlChar *qname);
444 XMLPUBFUN int XMLCALL
445  xmlValidatePushCData (xmlValidCtxtPtr ctxt,
446  const xmlChar *data,
447  int len);
448 XMLPUBFUN int XMLCALL
449  xmlValidatePopElement (xmlValidCtxtPtr ctxt,
450  xmlDocPtr doc,
451  xmlNodePtr elem,
452  const xmlChar *qname);
453 #endif /* LIBXML_REGEXP_ENABLED */
454 #endif /* LIBXML_VALID_ENABLED */
455 #ifdef __cplusplus
456 }
457 #endif
458 #endif /* __XML_VALID_H__ */