blob: 7d58459e2d858fbcb3f013cbd3a0cfe723a87d29 [file] [log] [blame]
Daniel Veillard39a1f9a1999-01-17 19:11:59 +00001/*
2 * valid.h : interface to the DTD handling and the validity checking
3 *
4 * See Copyright for the status of this software.
5 *
6 * Daniel.Veillard@w3.org
7 */
8
9
10#ifndef __XML_VALID_H__
11#define __XML_VALID_H__
12#include "tree.h"
13
Daniel Veillardb05deb71999-08-10 19:04:08 +000014/**
15 * an xmlValidCtxt is used for error reporting when validating
16 */
17
18typedef void (*xmlValidityErrorFunc) (void *ctx, const char *msg, ...);
19typedef void (*xmlValidityWarningFunc) (void *ctx, const char *msg, ...);
20
21typedef struct xmlValidCtxt {
22 void *userData; /* user specific data block */
23 xmlValidityErrorFunc error; /* the callback in case of errors */
24 xmlValidityWarningFunc warning; /* the callback in case of warning */
25} xmlValidCtxt, *xmlValidCtxtPtr;
26
27extern void xmlParserValidityError(void *ctx, const char *msg, ...);
28extern void xmlParserValidityWarning(void *ctx, const char *msg, ...);
29
Daniel Veillard3b9def11999-01-31 22:15:06 +000030/*
Daniel Veillard1e346af1999-02-22 10:33:01 +000031 * ALl notation declarations are stored in a table
32 * there is one table per DTD
33 */
34
35#define XML_MIN_NOTATION_TABLE 32
36
37typedef struct xmlNotationTable {
38 int nb_notations; /* number of notations stored */
39 int max_notations; /* maximum number of notations */
Daniel Veillardb05deb71999-08-10 19:04:08 +000040 xmlNotationPtr *table; /* the table of attributes */
Daniel Veillard1e346af1999-02-22 10:33:01 +000041} xmlNotationTable;
42typedef xmlNotationTable *xmlNotationTablePtr;
43
44/*
Daniel Veillard3b9def11999-01-31 22:15:06 +000045 * ALl element declarations are stored in a table
46 * there is one table per DTD
47 */
48
49#define XML_MIN_ELEMENT_TABLE 32
50
51typedef struct xmlElementTable {
52 int nb_elements; /* number of elements stored */
53 int max_elements; /* maximum number of elements */
Daniel Veillardb05deb71999-08-10 19:04:08 +000054 xmlElementPtr *table; /* the table of elements */
Daniel Veillard1e346af1999-02-22 10:33:01 +000055} xmlElementTable;
56typedef xmlElementTable *xmlElementTablePtr;
Daniel Veillard3b9def11999-01-31 22:15:06 +000057
Daniel Veillard1e346af1999-02-22 10:33:01 +000058/*
59 * ALl attribute declarations are stored in a table
60 * there is one table per DTD
61 */
62
63#define XML_MIN_ATTRIBUTE_TABLE 32
64
65typedef struct xmlAttributeTable {
66 int nb_attributes; /* number of attributes stored */
67 int max_attributes; /* maximum number of attributes */
Daniel Veillardb05deb71999-08-10 19:04:08 +000068 xmlAttributePtr *table; /* the table of attributes */
Daniel Veillard1e346af1999-02-22 10:33:01 +000069} xmlAttributeTable;
70typedef xmlAttributeTable *xmlAttributeTablePtr;
71
72/* Notation */
Daniel Veillardb05deb71999-08-10 19:04:08 +000073xmlNotationPtr xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
74 const CHAR *name, const CHAR *PublicID, const CHAR *SystemID);
Daniel Veillard1e346af1999-02-22 10:33:01 +000075xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table);
76void xmlFreeNotationTable(xmlNotationTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +000077void xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table);
Daniel Veillard1e346af1999-02-22 10:33:01 +000078
79/* Element Content */
80xmlElementContentPtr xmlNewElementContent(CHAR *name, int type);
81xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content);
82void xmlFreeElementContent(xmlElementContentPtr cur);
83
84/* Element */
Daniel Veillardb05deb71999-08-10 19:04:08 +000085xmlElementPtr xmlAddElementDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
86 const CHAR *name, int type, xmlElementContentPtr content);
Daniel Veillard1e346af1999-02-22 10:33:01 +000087xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table);
88void xmlFreeElementTable(xmlElementTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +000089void xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table);
Daniel Veillard3b9def11999-01-31 22:15:06 +000090
Daniel Veillard1e346af1999-02-22 10:33:01 +000091/* Enumeration */
92xmlEnumerationPtr xmlCreateEnumeration(CHAR *name);
93void xmlFreeEnumeration(xmlEnumerationPtr cur);
94xmlEnumerationPtr xmlCopyEnumeration(xmlEnumerationPtr cur);
95
96/* Attribute */
Daniel Veillardb05deb71999-08-10 19:04:08 +000097xmlAttributePtr xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
98 const CHAR *elem, const CHAR *name, int type, int def,
Daniel Veillard517752b1999-04-05 12:20:10 +000099 const CHAR *defaultValue, xmlEnumerationPtr tree);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000100xmlAttributeTablePtr xmlCopyAttributeTable(xmlAttributeTablePtr table);
101void xmlFreeAttributeTable(xmlAttributeTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000102void xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000103
Daniel Veillardb05deb71999-08-10 19:04:08 +0000104/**
105 * The public function calls related to validity checking
106 */
107
108int xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc);
109int xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
110 xmlElementPtr elem);
111int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
112 xmlAttributePtr attr);
113int xmlValidateNotationDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
114 xmlNotationPtr nota);
115int xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd);
116
117int xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc);
118int xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem);
119int xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
120 xmlNodePtr elem);
121int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
122 xmlNodePtr elem, xmlAttrPtr attr, const CHAR *value);
123
124int xmlIsMixedElement(xmlDocPtr doc, const CHAR *name);
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000125#endif /* __XML_VALID_H__ */