blob: 9afb2a0eaa7d32d012585e0efba02dae575dad2b [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
Daniel Veillard991e63d1999-08-15 23:32:28 +000072/*
73 * ALl IDs attributes are stored in a table
74 * there is one table per document
75 */
76
77#define XML_MIN_ID_TABLE 32
78
79typedef struct xmlIDTable {
80 int nb_ids; /* number of ids stored */
81 int max_ids; /* maximum number of ids */
82 xmlIDPtr *table; /* the table of ids */
83} xmlIDTable;
84typedef xmlIDTable *xmlIDTablePtr;
85
Daniel Veillard1e346af1999-02-22 10:33:01 +000086/* Notation */
Daniel Veillardb05deb71999-08-10 19:04:08 +000087xmlNotationPtr xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
88 const CHAR *name, const CHAR *PublicID, const CHAR *SystemID);
Daniel Veillard1e346af1999-02-22 10:33:01 +000089xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table);
90void xmlFreeNotationTable(xmlNotationTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +000091void xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table);
Daniel Veillard1e346af1999-02-22 10:33:01 +000092
93/* Element Content */
94xmlElementContentPtr xmlNewElementContent(CHAR *name, int type);
95xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content);
96void xmlFreeElementContent(xmlElementContentPtr cur);
97
98/* Element */
Daniel Veillardb05deb71999-08-10 19:04:08 +000099xmlElementPtr xmlAddElementDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
100 const CHAR *name, int type, xmlElementContentPtr content);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000101xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table);
102void xmlFreeElementTable(xmlElementTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000103void xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table);
Daniel Veillard3b9def11999-01-31 22:15:06 +0000104
Daniel Veillard1e346af1999-02-22 10:33:01 +0000105/* Enumeration */
106xmlEnumerationPtr xmlCreateEnumeration(CHAR *name);
107void xmlFreeEnumeration(xmlEnumerationPtr cur);
108xmlEnumerationPtr xmlCopyEnumeration(xmlEnumerationPtr cur);
109
110/* Attribute */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000111xmlAttributePtr xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
112 const CHAR *elem, const CHAR *name, int type, int def,
Daniel Veillard517752b1999-04-05 12:20:10 +0000113 const CHAR *defaultValue, xmlEnumerationPtr tree);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000114xmlAttributeTablePtr xmlCopyAttributeTable(xmlAttributeTablePtr table);
115void xmlFreeAttributeTable(xmlAttributeTablePtr table);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000116void xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000117
Daniel Veillard991e63d1999-08-15 23:32:28 +0000118/* IDs */
119xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
120 const CHAR *value, xmlAttrPtr attr);
121xmlIDTablePtr xmlCopyIDTable(xmlIDTablePtr table);
122void xmlFreeIDTable(xmlIDTablePtr table);
123
Daniel Veillardb05deb71999-08-10 19:04:08 +0000124/**
125 * The public function calls related to validity checking
126 */
127
128int xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc);
129int xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
130 xmlElementPtr elem);
131int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
132 xmlAttributePtr attr);
133int xmlValidateNotationDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
134 xmlNotationPtr nota);
135int xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd);
136
137int xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc);
138int xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem);
139int xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
140 xmlNodePtr elem);
141int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
142 xmlNodePtr elem, xmlAttrPtr attr, const CHAR *value);
143
144int xmlIsMixedElement(xmlDocPtr doc, const CHAR *name);
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000145#endif /* __XML_VALID_H__ */