Annotation of embedaddon/libxml2/include/libxml/valid.h, revision 1.1
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 */
! 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:
! 304: /**
! 305: * The public function calls related to validity checking.
! 306: */
! 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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>