williamr@4: /* williamr@4: * Summary: The DTD validation williamr@4: * Description: API for the DTD handling and the validity checking williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Daniel Veillard williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_VALID_H williamr@4: #define XML_VALID_H williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: #ifdef LIBXML_AUTOMATA_ENABLED williamr@4: #include "libxml2_xmlautomata.h" williamr@4: #endif williamr@4: williamr@4: #ifdef LIBXML_REGEXP_ENABLED williamr@4: #include "libxml2_xmlregexp.h" williamr@4: #endif williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: /* williamr@4: * Validation state added for non-determinist content model. williamr@4: */ williamr@4: typedef struct _xmlValidState xmlValidState; williamr@4: typedef xmlValidState *xmlValidStatePtr; williamr@4: williamr@4: /** williamr@4: * xmlValidityErrorFunc: williamr@4: * @param ctx an xmlValidCtxtPtr validity error context williamr@4: * @param msg the string to format *printf like vararg williamr@4: * @param # remaining arguments to the format williamr@4: * williamr@4: * Callback called when a validity error is found. This is a message williamr@4: * oriented function similar to an *printf function. williamr@4: */ williamr@4: typedef void (*xmlValidityErrorFunc) (void *ctx, williamr@4: const char *msg, williamr@4: ...); williamr@4: williamr@4: /** williamr@4: * xmlValidityWarningFunc: williamr@4: * @param ctx an xmlValidCtxtPtr validity error context williamr@4: * @param msg the string to format *printf like vararg williamr@4: * @param # remaining arguments to the format williamr@4: * williamr@4: * Callback called when a validity warning is found. This is a message williamr@4: * oriented function similar to an *printf function. williamr@4: */ williamr@4: typedef void (*xmlValidityWarningFunc) (void *ctx, williamr@4: const char *msg, williamr@4: ...); williamr@4: williamr@4: /* williamr@4: * xmlValidCtxt: williamr@4: * An xmlValidCtxt is used for error reporting when validating. williamr@4: */ williamr@4: typedef struct _xmlValidCtxt xmlValidCtxt; williamr@4: typedef xmlValidCtxt *xmlValidCtxtPtr; williamr@4: struct _xmlValidCtxt { williamr@4: void *userData; /* user specific data block */ williamr@4: xmlValidityErrorFunc error; /* the callback in case of errors */ williamr@4: xmlValidityWarningFunc warning; /* the callback in case of warning */ williamr@4: williamr@4: /* Node analysis stack used when validating within entities */ williamr@4: xmlNodePtr node; /* Current parsed Node */ williamr@4: int nodeNr; /* Depth of the parsing stack */ williamr@4: int nodeMax; /* Max depth of the parsing stack */ williamr@4: xmlNodePtr* nodeTab; /* array of nodes */ williamr@4: williamr@4: int finishDtd; /* finished validating the Dtd ? */ williamr@4: xmlDocPtr doc; /* the document */ williamr@4: int valid; /* temporary validity check result */ williamr@4: williamr@4: /* state state used for non-determinist content validation */ williamr@4: xmlValidState* vstate; /* current state */ williamr@4: int vstateNr; /* Depth of the validation stack */ williamr@4: int vstateMax; /* Max depth of the validation stack */ williamr@4: xmlValidState* vstateTab; /* array of validation states */ williamr@4: williamr@4: #ifdef LIBXML_REGEXP_ENABLED williamr@4: xmlAutomataPtr am; /* the automata */ williamr@4: xmlAutomataStatePtr state; /* used to build the automata */ williamr@4: #else williamr@4: void *am; williamr@4: void *state; williamr@4: #endif williamr@4: }; williamr@4: williamr@4: /* williamr@4: * ALL notation declarations are stored in a table. williamr@4: * There is one table per DTD. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlHashTable xmlNotationTable; williamr@4: typedef xmlNotationTable *xmlNotationTablePtr; williamr@4: williamr@4: /* williamr@4: * ALL element declarations are stored in a table. williamr@4: * There is one table per DTD. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlHashTable xmlElementTable; williamr@4: typedef xmlElementTable *xmlElementTablePtr; williamr@4: williamr@4: /* williamr@4: * ALL attribute declarations are stored in a table. williamr@4: * There is one table per DTD. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlHashTable xmlAttributeTable; williamr@4: typedef xmlAttributeTable *xmlAttributeTablePtr; williamr@4: williamr@4: /* williamr@4: * ALL IDs attributes are stored in a table. williamr@4: * There is one table per document. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlHashTable xmlIDTable; williamr@4: typedef xmlIDTable *xmlIDTablePtr; williamr@4: williamr@4: /* williamr@4: * ALL Refs attributes are stored in a table. williamr@4: * There is one table per document. williamr@4: */ williamr@4: williamr@4: typedef struct _xmlHashTable xmlRefTable; williamr@4: typedef xmlRefTable *xmlRefTablePtr; williamr@4: williamr@4: /* Allocate/Release Validation Contexts */ williamr@4: XMLPUBFUN xmlValidCtxtPtr XMLCALL williamr@4: xmlNewValidCtxt(void); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeValidCtxt(xmlValidCtxtPtr); williamr@4: williamr@4: /* Notation */ williamr@4: XMLPUBFUN xmlNotationPtr XMLCALL williamr@4: xmlAddNotationDecl (xmlValidCtxtPtr ctxt, williamr@4: xmlDtdPtr dtd, williamr@4: const xmlChar *name, williamr@4: const xmlChar *PublicID, williamr@4: const xmlChar *SystemID); williamr@4: XMLPUBFUN xmlNotationTablePtr XMLCALL williamr@4: xmlCopyNotationTable (xmlNotationTablePtr table); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeNotationTable (xmlNotationTablePtr table); williamr@4: #ifdef LIBXML_OUTPUT_ENABLED williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpNotationDecl (xmlBufferPtr buf, williamr@4: xmlNotationPtr nota); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpNotationTable (xmlBufferPtr buf, williamr@4: xmlNotationTablePtr table); williamr@4: #endif /* LIBXML_OUTPUT_ENABLED */ williamr@4: williamr@4: /* Element Content */ williamr@4: XMLPUBFUN xmlElementContentPtr XMLCALL williamr@4: xmlNewElementContent (const xmlChar *name, williamr@4: xmlElementContentType type); williamr@4: XMLPUBFUN xmlElementContentPtr XMLCALL williamr@4: xmlCopyElementContent (xmlElementContentPtr content); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeElementContent (xmlElementContentPtr cur); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlSnprintfElementContent(char *buf, williamr@4: int size, williamr@4: xmlElementContentPtr content, williamr@4: int glob); williamr@4: /* DEPRECATED */ williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlSprintfElementContent(char *buf, williamr@4: xmlElementContentPtr content, williamr@4: int glob); williamr@4: /* DEPRECATED */ williamr@4: williamr@4: /* Element */ williamr@4: XMLPUBFUN xmlElementPtr XMLCALL williamr@4: xmlAddElementDecl (xmlValidCtxtPtr ctxt, williamr@4: xmlDtdPtr dtd, williamr@4: const xmlChar *name, williamr@4: xmlElementTypeVal type, williamr@4: xmlElementContentPtr content); williamr@4: XMLPUBFUN xmlElementTablePtr XMLCALL williamr@4: xmlCopyElementTable (xmlElementTablePtr table); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeElementTable (xmlElementTablePtr table); williamr@4: #ifdef LIBXML_OUTPUT_ENABLED williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpElementTable (xmlBufferPtr buf, williamr@4: xmlElementTablePtr table); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpElementDecl (xmlBufferPtr buf, williamr@4: xmlElementPtr elem); williamr@4: #endif /* LIBXML_OUTPUT_ENABLED */ williamr@4: williamr@4: /* Enumeration */ williamr@4: XMLPUBFUN xmlEnumerationPtr XMLCALL williamr@4: xmlCreateEnumeration (const xmlChar *name); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeEnumeration (xmlEnumerationPtr cur); williamr@4: XMLPUBFUN xmlEnumerationPtr XMLCALL williamr@4: xmlCopyEnumeration (xmlEnumerationPtr cur); williamr@4: williamr@4: /* Attribute */ williamr@4: XMLPUBFUN xmlAttributePtr XMLCALL williamr@4: xmlAddAttributeDecl (xmlValidCtxtPtr ctxt, williamr@4: xmlDtdPtr dtd, williamr@4: const xmlChar *elem, williamr@4: const xmlChar *name, williamr@4: const xmlChar *ns, williamr@4: xmlAttributeType type, williamr@4: xmlAttributeDefault def, williamr@4: const xmlChar *defaultValue, williamr@4: xmlEnumerationPtr tree); williamr@4: XMLPUBFUN xmlAttributeTablePtr XMLCALL williamr@4: xmlCopyAttributeTable (xmlAttributeTablePtr table); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeAttributeTable (xmlAttributeTablePtr table); williamr@4: #ifdef LIBXML_OUTPUT_ENABLED williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpAttributeTable (xmlBufferPtr buf, williamr@4: xmlAttributeTablePtr table); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDumpAttributeDecl (xmlBufferPtr buf, williamr@4: xmlAttributePtr attr); williamr@4: #endif /* LIBXML_OUTPUT_ENABLED */ williamr@4: williamr@4: XMLPUBFUN xmlIDPtr XMLCALL williamr@4: xmlAddID (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: const xmlChar *value, williamr@4: xmlAttrPtr attr); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeIDTable (xmlIDTablePtr table); williamr@4: XMLPUBFUN xmlAttrPtr XMLCALL williamr@4: xmlGetID (xmlDocPtr doc, williamr@4: const xmlChar *ID); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlIsID (xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: xmlAttrPtr attr); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlRemoveID (xmlDocPtr doc, williamr@4: xmlAttrPtr attr); williamr@4: williamr@4: williamr@4: /* IDREFs */ williamr@4: XMLPUBFUN xmlRefPtr XMLCALL williamr@4: xmlAddRef (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: const xmlChar *value, williamr@4: xmlAttrPtr attr); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeRefTable (xmlRefTablePtr table); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlIsRef (xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: xmlAttrPtr attr); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlRemoveRef (xmlDocPtr doc, williamr@4: xmlAttrPtr attr); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN xmlListPtr XMLCALL williamr@4: xmlGetRefs (xmlDocPtr doc, const xmlChar *ID); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: /** williamr@4: * The public function calls related to validity checking. williamr@4: */ williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateRoot (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateElementDecl (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlElementPtr elem); williamr@4: XMLPUBFUN xmlChar * XMLCALL williamr@4: xmlValidNormalizeAttributeValue(xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: const xmlChar *name, williamr@4: const xmlChar *value); williamr@4: XMLPUBFUN xmlChar * XMLCALL williamr@4: xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: const xmlChar *name, williamr@4: const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlAttributePtr attr); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateAttributeValue(xmlAttributeType type, williamr@4: const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNotationDecl (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNotationPtr nota); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateDtd (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlDtdPtr dtd); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateDtdFinal (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateDocument (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateElement (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateOneElement (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateOneAttribute (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: xmlAttrPtr attr, williamr@4: const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateOneNamespace (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: const xmlChar *prefix, williamr@4: xmlNsPtr ns, williamr@4: const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNotationUse (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: const xmlChar *notationName); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlIsMixedElement (xmlDocPtr doc, williamr@4: const xmlChar *name); williamr@4: XMLPUBFUN xmlAttributePtr XMLCALL williamr@4: xmlGetDtdAttrDesc (xmlDtdPtr dtd, williamr@4: const xmlChar *elem, williamr@4: const xmlChar *name); williamr@4: XMLPUBFUN xmlAttributePtr XMLCALL williamr@4: xmlGetDtdQAttrDesc (xmlDtdPtr dtd, williamr@4: const xmlChar *elem, williamr@4: const xmlChar *name, williamr@4: const xmlChar *prefix); williamr@4: XMLPUBFUN xmlNotationPtr XMLCALL williamr@4: xmlGetDtdNotationDesc (xmlDtdPtr dtd, williamr@4: const xmlChar *name); williamr@4: XMLPUBFUN xmlElementPtr XMLCALL williamr@4: xmlGetDtdQElementDesc (xmlDtdPtr dtd, williamr@4: const xmlChar *name, williamr@4: const xmlChar *prefix); williamr@4: XMLPUBFUN xmlElementPtr XMLCALL williamr@4: xmlGetDtdElementDesc (xmlDtdPtr dtd, williamr@4: const xmlChar *name); williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidGetValidElements(xmlNode *prev, williamr@4: xmlNode *next, williamr@4: const xmlChar **names, williamr@4: int max); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidGetPotentialChildren(xmlElementContent *ctree, williamr@4: const xmlChar **list, williamr@4: int *len, williamr@4: int max); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNameValue (const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNamesValue (const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNmtokenValue (const xmlChar *value); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidateNmtokensValue(const xmlChar *value); williamr@4: williamr@4: #ifdef LIBXML_REGEXP_ENABLED williamr@4: /* williamr@4: * Validation based on the regexp support williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, williamr@4: xmlElementPtr elem); williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidatePushElement (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: const xmlChar *qname); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidatePushCData (xmlValidCtxtPtr ctxt, williamr@4: const xmlChar *data, williamr@4: int len); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlValidatePopElement (xmlValidCtxtPtr ctxt, williamr@4: xmlDocPtr doc, williamr@4: xmlNodePtr elem, williamr@4: const xmlChar *qname); williamr@4: #endif /* LIBXML_REGEXP_ENABLED */ williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: #endif /* XML_VALID_H */ williamr@4: