blob: 37b4f999921a9efa3b5e31abc51ab5d1e6d525fb [file] [log] [blame]
/*
* valid.h : interface to the DTD handling and the validity checking
*
* See Copyright for the status of this software.
*
* Daniel.Veillard@w3.org
*/
#ifndef __XML_VALID_H__
#define __XML_VALID_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "tree.h"
/**
* an xmlValidCtxt is used for error reporting when validating
*/
typedef void (*xmlValidityErrorFunc) (void *ctx, const char *msg, ...);
typedef void (*xmlValidityWarningFunc) (void *ctx, const char *msg, ...);
typedef struct xmlValidCtxt {
void *userData; /* user specific data block */
xmlValidityErrorFunc error; /* the callback in case of errors */
xmlValidityWarningFunc warning; /* the callback in case of warning */
} xmlValidCtxt, *xmlValidCtxtPtr;
extern void xmlParserValidityError(void *ctx, const char *msg, ...);
extern void xmlParserValidityWarning(void *ctx, const char *msg, ...);
/*
* ALl notation declarations are stored in a table
* there is one table per DTD
*/
#define XML_MIN_NOTATION_TABLE 32
typedef struct xmlNotationTable {
int nb_notations; /* number of notations stored */
int max_notations; /* maximum number of notations */
xmlNotationPtr *table; /* the table of attributes */
} xmlNotationTable;
typedef xmlNotationTable *xmlNotationTablePtr;
/*
* ALl element declarations are stored in a table
* there is one table per DTD
*/
#define XML_MIN_ELEMENT_TABLE 32
typedef struct xmlElementTable {
int nb_elements; /* number of elements stored */
int max_elements; /* maximum number of elements */
xmlElementPtr *table; /* the table of elements */
} xmlElementTable;
typedef xmlElementTable *xmlElementTablePtr;
/*
* ALl attribute declarations are stored in a table
* there is one table per DTD
*/
#define XML_MIN_ATTRIBUTE_TABLE 32
typedef struct xmlAttributeTable {
int nb_attributes; /* number of attributes stored */
int max_attributes; /* maximum number of attributes */
xmlAttributePtr *table; /* the table of attributes */
} xmlAttributeTable;
typedef xmlAttributeTable *xmlAttributeTablePtr;
/*
* ALl IDs attributes are stored in a table
* there is one table per document
*/
#define XML_MIN_ID_TABLE 32
typedef struct xmlIDTable {
int nb_ids; /* number of ids stored */
int max_ids; /* maximum number of ids */
xmlIDPtr *table; /* the table of ids */
} xmlIDTable;
typedef xmlIDTable *xmlIDTablePtr;
/* Notation */
xmlNotationPtr xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
xmlDtdPtr dtd,
const CHAR *name,
const CHAR *PublicID,
const CHAR *SystemID);
xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table);
void xmlFreeNotationTable(xmlNotationTablePtr table);
void xmlDumpNotationTable(xmlBufferPtr buf,
xmlNotationTablePtr table);
/* Element Content */
xmlElementContentPtr xmlNewElementContent (CHAR *name,
xmlElementContentType type);
xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content);
void xmlFreeElementContent(xmlElementContentPtr cur);
/* Element */
xmlElementPtr xmlAddElementDecl (xmlValidCtxtPtr ctxt,
xmlDtdPtr dtd,
const CHAR *name,
xmlElementContentType type,
xmlElementContentPtr content);
xmlElementTablePtr xmlCopyElementTable (xmlElementTablePtr table);
void xmlFreeElementTable (xmlElementTablePtr table);
void xmlDumpElementTable (xmlBufferPtr buf,
xmlElementTablePtr table);
/* Enumeration */
xmlEnumerationPtr xmlCreateEnumeration (CHAR *name);
void xmlFreeEnumeration (xmlEnumerationPtr cur);
xmlEnumerationPtr xmlCopyEnumeration (xmlEnumerationPtr cur);
/* Attribute */
xmlAttributePtr xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
xmlDtdPtr dtd,
const CHAR *elem,
const CHAR *name,
xmlAttributeType type,
xmlAttributeDefault def,
const CHAR *defaultValue,
xmlEnumerationPtr tree);
xmlAttributeTablePtr xmlCopyAttributeTable (xmlAttributeTablePtr table);
void xmlFreeAttributeTable (xmlAttributeTablePtr table);
void xmlDumpAttributeTable (xmlBufferPtr buf,
xmlAttributeTablePtr table);
/* IDs */
xmlIDPtr xmlAddID (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
const CHAR *value,
xmlAttrPtr attr);
xmlIDTablePtr xmlCopyIDTable (xmlIDTablePtr table);
void xmlFreeIDTable (xmlIDTablePtr table);
xmlAttrPtr xmlGetID (xmlDocPtr doc,
const CHAR *ID);
int xmlIsID (xmlDocPtr doc,
xmlNodePtr elem,
xmlAttrPtr attr);
/**
* The public function calls related to validity checking
*/
int xmlValidateRoot (xmlValidCtxtPtr ctxt,
xmlDocPtr doc);
int xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlElementPtr elem);
int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlAttributePtr attr);
int xmlValidateAttributeValue(xmlAttributeType type,
const CHAR *value);
int xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlNotationPtr nota);
int xmlValidateDtd (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlDtdPtr dtd);
int xmlValidateDocument (xmlValidCtxtPtr ctxt,
xmlDocPtr doc);
int xmlValidateElement (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlNodePtr elem);
int xmlValidateOneElement (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlNodePtr elem);
int xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
xmlNodePtr elem,
xmlAttrPtr attr,
const CHAR *value);
int xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
xmlDocPtr doc,
const CHAR *notationName);
int xmlIsMixedElement (xmlDocPtr doc,
const CHAR *name);
xmlAttributePtr xmlGetDtdAttrDesc (xmlDtdPtr dtd,
const CHAR *elem,
const CHAR *name);
xmlNotationPtr xmlGetDtdNotationDesc (xmlDtdPtr dtd,
const CHAR *name);
xmlElementPtr xmlGetDtdElementDesc (xmlDtdPtr dtd,
const CHAR *name);
#ifdef __cplusplus
}
#endif
#endif /* __XML_VALID_H__ */