Annotation of embedaddon/libxml2/include/libxml/valid.h, revision 1.1.1.2
1.1 misho 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:
31: /**
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
38: *
39: * Callback called when a validity error is found. This is a message
40: * oriented function similar to an *printf function.
41: */
42: typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
43: const char *msg,
44: ...) LIBXML_ATTR_FORMAT(2,3);
45:
46: /**
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
53: *
54: * Callback called when a validity warning is found. This is a message
55: * oriented function similar to an *printf function.
56: */
57: typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
58: const char *msg,
59: ...) LIBXML_ATTR_FORMAT(2,3);
60:
61: #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:
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 */
1.1.1.2 ! misho 153: XMLPUBFUN xmlNotationPtr XMLCALL
1.1 misho 154: xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
155: xmlDtdPtr dtd,
156: const xmlChar *name,
157: const xmlChar *PublicID,
158: const xmlChar *SystemID);
159: #ifdef LIBXML_TREE_ENABLED
1.1.1.2 ! misho 160: XMLPUBFUN xmlNotationTablePtr XMLCALL
1.1 misho 161: xmlCopyNotationTable (xmlNotationTablePtr table);
162: #endif /* LIBXML_TREE_ENABLED */
1.1.1.2 ! misho 163: XMLPUBFUN void XMLCALL
1.1 misho 164: xmlFreeNotationTable (xmlNotationTablePtr table);
165: #ifdef LIBXML_OUTPUT_ENABLED
1.1.1.2 ! misho 166: XMLPUBFUN void XMLCALL
1.1 misho 167: xmlDumpNotationDecl (xmlBufferPtr buf,
168: xmlNotationPtr nota);
1.1.1.2 ! misho 169: XMLPUBFUN void XMLCALL
1.1 misho 170: xmlDumpNotationTable (xmlBufferPtr buf,
171: xmlNotationTablePtr table);
172: #endif /* LIBXML_OUTPUT_ENABLED */
173:
174: /* Element Content */
175: /* the non Doc version are being deprecated */
1.1.1.2 ! misho 176: XMLPUBFUN xmlElementContentPtr XMLCALL
1.1 misho 177: xmlNewElementContent (const xmlChar *name,
178: xmlElementContentType type);
1.1.1.2 ! misho 179: XMLPUBFUN xmlElementContentPtr XMLCALL
1.1 misho 180: xmlCopyElementContent (xmlElementContentPtr content);
1.1.1.2 ! misho 181: XMLPUBFUN void XMLCALL
1.1 misho 182: xmlFreeElementContent (xmlElementContentPtr cur);
183: /* the new versions with doc argument */
1.1.1.2 ! misho 184: XMLPUBFUN xmlElementContentPtr XMLCALL
1.1 misho 185: xmlNewDocElementContent (xmlDocPtr doc,
186: const xmlChar *name,
187: xmlElementContentType type);
1.1.1.2 ! misho 188: XMLPUBFUN xmlElementContentPtr XMLCALL
1.1 misho 189: xmlCopyDocElementContent(xmlDocPtr doc,
190: xmlElementContentPtr content);
1.1.1.2 ! misho 191: XMLPUBFUN void XMLCALL
1.1 misho 192: xmlFreeDocElementContent(xmlDocPtr doc,
193: xmlElementContentPtr cur);
1.1.1.2 ! misho 194: XMLPUBFUN void XMLCALL
1.1 misho 195: xmlSnprintfElementContent(char *buf,
196: int size,
197: xmlElementContentPtr content,
198: int englob);
199: #ifdef LIBXML_OUTPUT_ENABLED
200: /* DEPRECATED */
1.1.1.2 ! misho 201: XMLPUBFUN void XMLCALL
1.1 misho 202: xmlSprintfElementContent(char *buf,
203: xmlElementContentPtr content,
204: int englob);
205: #endif /* LIBXML_OUTPUT_ENABLED */
206: /* DEPRECATED */
207:
208: /* Element */
1.1.1.2 ! misho 209: XMLPUBFUN xmlElementPtr XMLCALL
1.1 misho 210: xmlAddElementDecl (xmlValidCtxtPtr ctxt,
211: xmlDtdPtr dtd,
212: const xmlChar *name,
213: xmlElementTypeVal type,
214: xmlElementContentPtr content);
215: #ifdef LIBXML_TREE_ENABLED
1.1.1.2 ! misho 216: XMLPUBFUN xmlElementTablePtr XMLCALL
1.1 misho 217: xmlCopyElementTable (xmlElementTablePtr table);
218: #endif /* LIBXML_TREE_ENABLED */
1.1.1.2 ! misho 219: XMLPUBFUN void XMLCALL
1.1 misho 220: xmlFreeElementTable (xmlElementTablePtr table);
221: #ifdef LIBXML_OUTPUT_ENABLED
1.1.1.2 ! misho 222: XMLPUBFUN void XMLCALL
1.1 misho 223: xmlDumpElementTable (xmlBufferPtr buf,
224: xmlElementTablePtr table);
1.1.1.2 ! misho 225: XMLPUBFUN void XMLCALL
1.1 misho 226: xmlDumpElementDecl (xmlBufferPtr buf,
227: xmlElementPtr elem);
228: #endif /* LIBXML_OUTPUT_ENABLED */
229:
230: /* Enumeration */
1.1.1.2 ! misho 231: XMLPUBFUN xmlEnumerationPtr XMLCALL
1.1 misho 232: xmlCreateEnumeration (const xmlChar *name);
1.1.1.2 ! misho 233: XMLPUBFUN void XMLCALL
1.1 misho 234: xmlFreeEnumeration (xmlEnumerationPtr cur);
235: #ifdef LIBXML_TREE_ENABLED
1.1.1.2 ! misho 236: XMLPUBFUN xmlEnumerationPtr XMLCALL
1.1 misho 237: xmlCopyEnumeration (xmlEnumerationPtr cur);
238: #endif /* LIBXML_TREE_ENABLED */
239:
240: /* Attribute */
1.1.1.2 ! misho 241: XMLPUBFUN xmlAttributePtr XMLCALL
1.1 misho 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
1.1.1.2 ! misho 252: XMLPUBFUN xmlAttributeTablePtr XMLCALL
1.1 misho 253: xmlCopyAttributeTable (xmlAttributeTablePtr table);
254: #endif /* LIBXML_TREE_ENABLED */
1.1.1.2 ! misho 255: XMLPUBFUN void XMLCALL
1.1 misho 256: xmlFreeAttributeTable (xmlAttributeTablePtr table);
257: #ifdef LIBXML_OUTPUT_ENABLED
1.1.1.2 ! misho 258: XMLPUBFUN void XMLCALL
1.1 misho 259: xmlDumpAttributeTable (xmlBufferPtr buf,
260: xmlAttributeTablePtr table);
1.1.1.2 ! misho 261: XMLPUBFUN void XMLCALL
1.1 misho 262: xmlDumpAttributeDecl (xmlBufferPtr buf,
263: xmlAttributePtr attr);
264: #endif /* LIBXML_OUTPUT_ENABLED */
265:
266: /* IDs */
1.1.1.2 ! misho 267: XMLPUBFUN xmlIDPtr XMLCALL
1.1 misho 268: xmlAddID (xmlValidCtxtPtr ctxt,
269: xmlDocPtr doc,
270: const xmlChar *value,
271: xmlAttrPtr attr);
1.1.1.2 ! misho 272: XMLPUBFUN void XMLCALL
1.1 misho 273: xmlFreeIDTable (xmlIDTablePtr table);
1.1.1.2 ! misho 274: XMLPUBFUN xmlAttrPtr XMLCALL
1.1 misho 275: xmlGetID (xmlDocPtr doc,
276: const xmlChar *ID);
1.1.1.2 ! misho 277: XMLPUBFUN int XMLCALL
1.1 misho 278: xmlIsID (xmlDocPtr doc,
279: xmlNodePtr elem,
280: xmlAttrPtr attr);
1.1.1.2 ! misho 281: XMLPUBFUN int XMLCALL
! 282: xmlRemoveID (xmlDocPtr doc,
1.1 misho 283: xmlAttrPtr attr);
284:
285: /* IDREFs */
1.1.1.2 ! misho 286: XMLPUBFUN xmlRefPtr XMLCALL
1.1 misho 287: xmlAddRef (xmlValidCtxtPtr ctxt,
288: xmlDocPtr doc,
289: const xmlChar *value,
290: xmlAttrPtr attr);
1.1.1.2 ! misho 291: XMLPUBFUN void XMLCALL
1.1 misho 292: xmlFreeRefTable (xmlRefTablePtr table);
1.1.1.2 ! misho 293: XMLPUBFUN int XMLCALL
1.1 misho 294: xmlIsRef (xmlDocPtr doc,
295: xmlNodePtr elem,
296: xmlAttrPtr attr);
1.1.1.2 ! misho 297: XMLPUBFUN int XMLCALL
! 298: xmlRemoveRef (xmlDocPtr doc,
1.1 misho 299: xmlAttrPtr attr);
1.1.1.2 ! misho 300: XMLPUBFUN xmlListPtr XMLCALL
1.1 misho 301: xmlGetRefs (xmlDocPtr doc,
302: const xmlChar *ID);
303:
304: /**
305: * The public function calls related to validity checking.
306: */
307: #ifdef LIBXML_VALID_ENABLED
308: /* Allocate/Release Validation Contexts */
1.1.1.2 ! misho 309: XMLPUBFUN xmlValidCtxtPtr XMLCALL
1.1 misho 310: xmlNewValidCtxt(void);
1.1.1.2 ! misho 311: XMLPUBFUN void XMLCALL
1.1 misho 312: xmlFreeValidCtxt(xmlValidCtxtPtr);
313:
1.1.1.2 ! misho 314: XMLPUBFUN int XMLCALL
1.1 misho 315: xmlValidateRoot (xmlValidCtxtPtr ctxt,
316: xmlDocPtr doc);
1.1.1.2 ! misho 317: XMLPUBFUN int XMLCALL
1.1 misho 318: xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
319: xmlDocPtr doc,
320: xmlElementPtr elem);
1.1.1.2 ! misho 321: XMLPUBFUN xmlChar * XMLCALL
1.1 misho 322: xmlValidNormalizeAttributeValue(xmlDocPtr doc,
323: xmlNodePtr elem,
324: const xmlChar *name,
325: const xmlChar *value);
1.1.1.2 ! misho 326: XMLPUBFUN xmlChar * XMLCALL
1.1 misho 327: xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
328: xmlDocPtr doc,
329: xmlNodePtr elem,
330: const xmlChar *name,
331: const xmlChar *value);
1.1.1.2 ! misho 332: XMLPUBFUN int XMLCALL
1.1 misho 333: xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
334: xmlDocPtr doc,
335: xmlAttributePtr attr);
1.1.1.2 ! misho 336: XMLPUBFUN int XMLCALL
1.1 misho 337: xmlValidateAttributeValue(xmlAttributeType type,
338: const xmlChar *value);
1.1.1.2 ! misho 339: XMLPUBFUN int XMLCALL
1.1 misho 340: xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
341: xmlDocPtr doc,
342: xmlNotationPtr nota);
1.1.1.2 ! misho 343: XMLPUBFUN int XMLCALL
1.1 misho 344: xmlValidateDtd (xmlValidCtxtPtr ctxt,
345: xmlDocPtr doc,
346: xmlDtdPtr dtd);
1.1.1.2 ! misho 347: XMLPUBFUN int XMLCALL
1.1 misho 348: xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
349: xmlDocPtr doc);
1.1.1.2 ! misho 350: XMLPUBFUN int XMLCALL
1.1 misho 351: xmlValidateDocument (xmlValidCtxtPtr ctxt,
352: xmlDocPtr doc);
1.1.1.2 ! misho 353: XMLPUBFUN int XMLCALL
1.1 misho 354: xmlValidateElement (xmlValidCtxtPtr ctxt,
355: xmlDocPtr doc,
356: xmlNodePtr elem);
1.1.1.2 ! misho 357: XMLPUBFUN int XMLCALL
1.1 misho 358: xmlValidateOneElement (xmlValidCtxtPtr ctxt,
359: xmlDocPtr doc,
360: xmlNodePtr elem);
1.1.1.2 ! misho 361: XMLPUBFUN int XMLCALL
1.1 misho 362: xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
363: xmlDocPtr doc,
364: xmlNodePtr elem,
365: xmlAttrPtr attr,
366: const xmlChar *value);
1.1.1.2 ! misho 367: XMLPUBFUN int XMLCALL
1.1 misho 368: xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
369: xmlDocPtr doc,
370: xmlNodePtr elem,
371: const xmlChar *prefix,
372: xmlNsPtr ns,
373: const xmlChar *value);
1.1.1.2 ! misho 374: XMLPUBFUN int XMLCALL
1.1 misho 375: xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
376: xmlDocPtr doc);
377: #endif /* LIBXML_VALID_ENABLED */
378:
379: #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
1.1.1.2 ! misho 380: XMLPUBFUN int XMLCALL
1.1 misho 381: xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
382: xmlDocPtr doc,
383: const xmlChar *notationName);
384: #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
385:
1.1.1.2 ! misho 386: XMLPUBFUN int XMLCALL
1.1 misho 387: xmlIsMixedElement (xmlDocPtr doc,
388: const xmlChar *name);
1.1.1.2 ! misho 389: XMLPUBFUN xmlAttributePtr XMLCALL
1.1 misho 390: xmlGetDtdAttrDesc (xmlDtdPtr dtd,
391: const xmlChar *elem,
392: const xmlChar *name);
1.1.1.2 ! misho 393: XMLPUBFUN xmlAttributePtr XMLCALL
1.1 misho 394: xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
395: const xmlChar *elem,
396: const xmlChar *name,
397: const xmlChar *prefix);
1.1.1.2 ! misho 398: XMLPUBFUN xmlNotationPtr XMLCALL
1.1 misho 399: xmlGetDtdNotationDesc (xmlDtdPtr dtd,
400: const xmlChar *name);
1.1.1.2 ! misho 401: XMLPUBFUN xmlElementPtr XMLCALL
1.1 misho 402: xmlGetDtdQElementDesc (xmlDtdPtr dtd,
403: const xmlChar *name,
404: const xmlChar *prefix);
1.1.1.2 ! misho 405: XMLPUBFUN xmlElementPtr XMLCALL
1.1 misho 406: xmlGetDtdElementDesc (xmlDtdPtr dtd,
407: const xmlChar *name);
408:
409: #ifdef LIBXML_VALID_ENABLED
410:
1.1.1.2 ! misho 411: XMLPUBFUN int XMLCALL
1.1 misho 412: xmlValidGetPotentialChildren(xmlElementContent *ctree,
413: const xmlChar **names,
414: int *len,
415: int max);
416:
1.1.1.2 ! misho 417: XMLPUBFUN int XMLCALL
1.1 misho 418: xmlValidGetValidElements(xmlNode *prev,
419: xmlNode *next,
420: const xmlChar **names,
421: int max);
1.1.1.2 ! misho 422: XMLPUBFUN int XMLCALL
1.1 misho 423: xmlValidateNameValue (const xmlChar *value);
1.1.1.2 ! misho 424: XMLPUBFUN int XMLCALL
1.1 misho 425: xmlValidateNamesValue (const xmlChar *value);
1.1.1.2 ! misho 426: XMLPUBFUN int XMLCALL
1.1 misho 427: xmlValidateNmtokenValue (const xmlChar *value);
1.1.1.2 ! misho 428: XMLPUBFUN int XMLCALL
1.1 misho 429: xmlValidateNmtokensValue(const xmlChar *value);
430:
431: #ifdef LIBXML_REGEXP_ENABLED
432: /*
433: * Validation based on the regexp support
434: */
1.1.1.2 ! misho 435: XMLPUBFUN int XMLCALL
1.1 misho 436: xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
437: xmlElementPtr elem);
438:
1.1.1.2 ! misho 439: XMLPUBFUN int XMLCALL
1.1 misho 440: xmlValidatePushElement (xmlValidCtxtPtr ctxt,
441: xmlDocPtr doc,
442: xmlNodePtr elem,
443: const xmlChar *qname);
1.1.1.2 ! misho 444: XMLPUBFUN int XMLCALL
1.1 misho 445: xmlValidatePushCData (xmlValidCtxtPtr ctxt,
446: const xmlChar *data,
447: int len);
1.1.1.2 ! misho 448: XMLPUBFUN int XMLCALL
1.1 misho 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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>