File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml / valid.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 19:53:38 2014 UTC (10 years, 3 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, HEAD
libxml2 2.9.1

    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>