Annotation of embedaddon/libxml2/include/libxml/valid.h, revision 1.1.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>