| /** | |
| * @file | |
| * | |
| * @brief DTD validator | |
| * | |
| * API to handle XML Document Type Definitions and validate | |
| * documents. | |
| * | |
| * @copyright See Copyright for the status of this software. | |
| * | |
| * @author Daniel Veillard | |
| */ | |
| #ifndef __XML_VALID_H__ | |
| #define __XML_VALID_H__ | |
| #include <libxml/xmlversion.h> | |
| #include <libxml/xmlerror.h> | |
| #define XML_TREE_INTERNALS | |
| #include <libxml/tree.h> | |
| #undef XML_TREE_INTERNALS | |
| #include <libxml/list.h> | |
| #include <libxml/xmlautomata.h> | |
| #include <libxml/xmlregexp.h> | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /* | |
| * Validation state added for non-deterministic content model. | |
| */ | |
| typedef struct _xmlValidState xmlValidState; | |
| typedef xmlValidState *xmlValidStatePtr; | |
| /** | |
| * Report a validity error. | |
| * | |
| * @param ctx user data (usually an xmlValidCtxt) | |
| * @param msg printf-like format string | |
| * @param ... arguments to format | |
| */ | |
| typedef void (*xmlValidityErrorFunc) (void *ctx, | |
| const char *msg, | |
| ...) LIBXML_ATTR_FORMAT(2,3); | |
| /** | |
| * Report a validity warning. | |
| * | |
| * @param ctx user data (usually an xmlValidCtxt) | |
| * @param msg printf-like format string | |
| * @param ... arguments to format | |
| */ | |
| typedef void (*xmlValidityWarningFunc) (void *ctx, | |
| const char *msg, | |
| ...) LIBXML_ATTR_FORMAT(2,3); | |
| typedef struct _xmlValidCtxt xmlValidCtxt; | |
| typedef xmlValidCtxt *xmlValidCtxtPtr; | |
| /** | |
| * An xmlValidCtxt is used for error reporting when validating. | |
| */ | |
| struct _xmlValidCtxt { | |
| void *userData; /* user specific data block */ | |
| xmlValidityErrorFunc error; /* the callback in case of errors */ | |
| xmlValidityWarningFunc warning; /* the callback in case of warning */ | |
| /* Node analysis stack used when validating within entities */ | |
| xmlNode *node; /* Current parsed Node */ | |
| int nodeNr; /* Depth of the parsing stack */ | |
| int nodeMax; /* Max depth of the parsing stack */ | |
| xmlNode **nodeTab; /* array of nodes */ | |
| unsigned int flags; /* internal flags */ | |
| xmlDoc *doc; /* the document */ | |
| int valid; /* temporary validity check result */ | |
| /* state state used for non-determinist content validation */ | |
| xmlValidState *vstate; /* current state */ | |
| int vstateNr; /* Depth of the validation stack */ | |
| int vstateMax; /* Max depth of the validation stack */ | |
| xmlValidState *vstateTab; /* array of validation states */ | |
| #ifdef LIBXML_REGEXP_ENABLED | |
| xmlAutomata *am; /* the automata */ | |
| xmlAutomataState *state; /* used to build the automata */ | |
| #else | |
| void *am; | |
| void *state; | |
| #endif | |
| }; | |
| typedef struct _xmlHashTable xmlNotationTable; | |
| typedef xmlNotationTable *xmlNotationTablePtr; | |
| typedef struct _xmlHashTable xmlElementTable; | |
| typedef xmlElementTable *xmlElementTablePtr; | |
| typedef struct _xmlHashTable xmlAttributeTable; | |
| typedef xmlAttributeTable *xmlAttributeTablePtr; | |
| typedef struct _xmlHashTable xmlIDTable; | |
| typedef xmlIDTable *xmlIDTablePtr; | |
| typedef struct _xmlHashTable xmlRefTable; | |
| typedef xmlRefTable *xmlRefTablePtr; | |
| /* Notation */ | |
| XMLPUBFUN xmlNotation * | |
| xmlAddNotationDecl (xmlValidCtxt *ctxt, | |
| xmlDtd *dtd, | |
| const xmlChar *name, | |
| const xmlChar *publicId, | |
| const xmlChar *systemId); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlNotationTable * | |
| xmlCopyNotationTable (xmlNotationTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeNotationTable (xmlNotationTable *table); | |
| #ifdef LIBXML_OUTPUT_ENABLED | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlDumpNotationDecl (xmlBuffer *buf, | |
| xmlNotation *nota); | |
| /* XML_DEPRECATED, still used in lxml */ | |
| XMLPUBFUN void | |
| xmlDumpNotationTable (xmlBuffer *buf, | |
| xmlNotationTable *table); | |
| #endif /* LIBXML_OUTPUT_ENABLED */ | |
| /* Element Content */ | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlElementContent * | |
| xmlNewElementContent (const xmlChar *name, | |
| xmlElementContentType type); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlElementContent * | |
| xmlCopyElementContent (xmlElementContent *content); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeElementContent (xmlElementContent *cur); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlElementContent * | |
| xmlNewDocElementContent (xmlDoc *doc, | |
| const xmlChar *name, | |
| xmlElementContentType type); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlElementContent * | |
| xmlCopyDocElementContent(xmlDoc *doc, | |
| xmlElementContent *content); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeDocElementContent(xmlDoc *doc, | |
| xmlElementContent *cur); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlSnprintfElementContent(char *buf, | |
| int size, | |
| xmlElementContent *content, | |
| int englob); | |
| #ifdef LIBXML_OUTPUT_ENABLED | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlSprintfElementContent(char *buf, | |
| xmlElementContent *content, | |
| int englob); | |
| #endif /* LIBXML_OUTPUT_ENABLED */ | |
| /* Element */ | |
| XMLPUBFUN xmlElement * | |
| xmlAddElementDecl (xmlValidCtxt *ctxt, | |
| xmlDtd *dtd, | |
| const xmlChar *name, | |
| xmlElementTypeVal type, | |
| xmlElementContent *content); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlElementTable * | |
| xmlCopyElementTable (xmlElementTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeElementTable (xmlElementTable *table); | |
| #ifdef LIBXML_OUTPUT_ENABLED | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlDumpElementTable (xmlBuffer *buf, | |
| xmlElementTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlDumpElementDecl (xmlBuffer *buf, | |
| xmlElement *elem); | |
| #endif /* LIBXML_OUTPUT_ENABLED */ | |
| /* Enumeration */ | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlEnumeration * | |
| xmlCreateEnumeration (const xmlChar *name); | |
| /* XML_DEPRECATED, needed for custom attributeDecl SAX handler */ | |
| XMLPUBFUN void | |
| xmlFreeEnumeration (xmlEnumeration *cur); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlEnumeration * | |
| xmlCopyEnumeration (xmlEnumeration *cur); | |
| /* Attribute */ | |
| XMLPUBFUN xmlAttribute * | |
| xmlAddAttributeDecl (xmlValidCtxt *ctxt, | |
| xmlDtd *dtd, | |
| const xmlChar *elem, | |
| const xmlChar *name, | |
| const xmlChar *ns, | |
| xmlAttributeType type, | |
| xmlAttributeDefault def, | |
| const xmlChar *defaultValue, | |
| xmlEnumeration *tree); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlAttributeTable * | |
| xmlCopyAttributeTable (xmlAttributeTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeAttributeTable (xmlAttributeTable *table); | |
| #ifdef LIBXML_OUTPUT_ENABLED | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlDumpAttributeTable (xmlBuffer *buf, | |
| xmlAttributeTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlDumpAttributeDecl (xmlBuffer *buf, | |
| xmlAttribute *attr); | |
| #endif /* LIBXML_OUTPUT_ENABLED */ | |
| /* IDs */ | |
| XMLPUBFUN int | |
| xmlAddIDSafe (xmlAttr *attr, | |
| const xmlChar *value); | |
| XMLPUBFUN xmlID * | |
| xmlAddID (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| const xmlChar *value, | |
| xmlAttr *attr); | |
| XMLPUBFUN void | |
| xmlFreeIDTable (xmlIDTable *table); | |
| XMLPUBFUN xmlAttr * | |
| xmlGetID (xmlDoc *doc, | |
| const xmlChar *ID); | |
| XMLPUBFUN int | |
| xmlIsID (xmlDoc *doc, | |
| xmlNode *elem, | |
| xmlAttr *attr); | |
| XMLPUBFUN int | |
| xmlRemoveID (xmlDoc *doc, | |
| xmlAttr *attr); | |
| /* IDREFs */ | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlRef * | |
| xmlAddRef (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| const xmlChar *value, | |
| xmlAttr *attr); | |
| XML_DEPRECATED | |
| XMLPUBFUN void | |
| xmlFreeRefTable (xmlRefTable *table); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlIsRef (xmlDoc *doc, | |
| xmlNode *elem, | |
| xmlAttr *attr); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlRemoveRef (xmlDoc *doc, | |
| xmlAttr *attr); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlList * | |
| xmlGetRefs (xmlDoc *doc, | |
| const xmlChar *ID); | |
| /** | |
| * The public function calls related to validity checking. | |
| */ | |
| #ifdef LIBXML_VALID_ENABLED | |
| /* Allocate/Release Validation Contexts */ | |
| XMLPUBFUN xmlValidCtxt * | |
| xmlNewValidCtxt(void); | |
| XMLPUBFUN void | |
| xmlFreeValidCtxt(xmlValidCtxt *); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateRoot (xmlValidCtxt *ctxt, | |
| xmlDoc *doc); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateElementDecl (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlElement *elem); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlChar * | |
| xmlValidNormalizeAttributeValue(xmlDoc *doc, | |
| xmlNode *elem, | |
| const xmlChar *name, | |
| const xmlChar *value); | |
| XML_DEPRECATED | |
| XMLPUBFUN xmlChar * | |
| xmlValidCtxtNormalizeAttributeValue(xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem, | |
| const xmlChar *name, | |
| const xmlChar *value); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateAttributeDecl(xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlAttribute *attr); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateAttributeValue(xmlAttributeType type, | |
| const xmlChar *value); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateNotationDecl (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNotation *nota); | |
| XMLPUBFUN int | |
| xmlValidateDtd (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlDtd *dtd); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateDtdFinal (xmlValidCtxt *ctxt, | |
| xmlDoc *doc); | |
| XMLPUBFUN int | |
| xmlValidateDocument (xmlValidCtxt *ctxt, | |
| xmlDoc *doc); | |
| XMLPUBFUN int | |
| xmlValidateElement (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateOneElement (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateOneAttribute (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem, | |
| xmlAttr *attr, | |
| const xmlChar *value); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateOneNamespace (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem, | |
| const xmlChar *prefix, | |
| xmlNs *ns, | |
| const xmlChar *value); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateDocumentFinal(xmlValidCtxt *ctxt, | |
| xmlDoc *doc); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidateNotationUse (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| const xmlChar *notationName); | |
| #endif /* LIBXML_VALID_ENABLED */ | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlIsMixedElement (xmlDoc *doc, | |
| const xmlChar *name); | |
| XMLPUBFUN xmlAttribute * | |
| xmlGetDtdAttrDesc (xmlDtd *dtd, | |
| const xmlChar *elem, | |
| const xmlChar *name); | |
| XMLPUBFUN xmlAttribute * | |
| xmlGetDtdQAttrDesc (xmlDtd *dtd, | |
| const xmlChar *elem, | |
| const xmlChar *name, | |
| const xmlChar *prefix); | |
| XMLPUBFUN xmlNotation * | |
| xmlGetDtdNotationDesc (xmlDtd *dtd, | |
| const xmlChar *name); | |
| XMLPUBFUN xmlElement * | |
| xmlGetDtdQElementDesc (xmlDtd *dtd, | |
| const xmlChar *name, | |
| const xmlChar *prefix); | |
| XMLPUBFUN xmlElement * | |
| xmlGetDtdElementDesc (xmlDtd *dtd, | |
| const xmlChar *name); | |
| #ifdef LIBXML_VALID_ENABLED | |
| XMLPUBFUN int | |
| xmlValidGetPotentialChildren(xmlElementContent *ctree, | |
| const xmlChar **names, | |
| int *len, | |
| int max); | |
| /* only needed for `xmllint --insert` */ | |
| XMLPUBFUN int | |
| xmlValidGetValidElements(xmlNode *prev, | |
| xmlNode *next, | |
| const xmlChar **names, | |
| int max); | |
| XMLPUBFUN int | |
| xmlValidateNameValue (const xmlChar *value); | |
| XMLPUBFUN int | |
| xmlValidateNamesValue (const xmlChar *value); | |
| XMLPUBFUN int | |
| xmlValidateNmtokenValue (const xmlChar *value); | |
| XMLPUBFUN int | |
| xmlValidateNmtokensValue(const xmlChar *value); | |
| #ifdef LIBXML_REGEXP_ENABLED | |
| /* | |
| * Validation based on the regexp support | |
| */ | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidBuildContentModel(xmlValidCtxt *ctxt, | |
| xmlElement *elem); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidatePushElement (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem, | |
| const xmlChar *qname); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidatePushCData (xmlValidCtxt *ctxt, | |
| const xmlChar *data, | |
| int len); | |
| XML_DEPRECATED | |
| XMLPUBFUN int | |
| xmlValidatePopElement (xmlValidCtxt *ctxt, | |
| xmlDoc *doc, | |
| xmlNode *elem, | |
| const xmlChar *qname); | |
| #endif /* LIBXML_REGEXP_ENABLED */ | |
| #endif /* LIBXML_VALID_ENABLED */ | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* __XML_VALID_H__ */ |