blob: 46848cb845813078468cecf19f5b260c9a1d4b5c [file] [log] [blame]
Daniel Veillard6eadf632003-01-23 18:29:16 +00001/*
2 * relaxng.h: header for the implementation of the Relax-NG validation
3 *
4 * See Copyright for the status of this software.
5 *
6 * daniel@veillard.com
7 */
8
9#ifndef __XML_RELAX_NG__
10#define __XML_RELAX_NG__
11
12#include <libxml/hash.h>
13
14typedef struct _xmlRelaxNG xmlRelaxNG;
15typedef xmlRelaxNG *xmlRelaxNGPtr;
16
17
18/**
19 * A schemas validation context
20 */
21typedef void (*xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...);
22typedef void (*xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...);
23
24typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
25typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
26
27typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
28typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
29
30/*
Daniel Veillard42f12e92003-03-07 18:32:59 +000031 * xmlRelaxNGValidErr:
32 *
33 * List of possible Relax NG validation errors
34 */
35typedef enum {
36 XML_RELAXNG_OK = 0,
37 XML_RELAXNG_ERR_MEMORY,
38 XML_RELAXNG_ERR_TYPE,
39 XML_RELAXNG_ERR_TYPEVAL,
Daniel Veillardc3da18a2003-03-18 00:31:04 +000040 XML_RELAXNG_ERR_DUPID,
Daniel Veillard42f12e92003-03-07 18:32:59 +000041 XML_RELAXNG_ERR_TYPECMP,
42 XML_RELAXNG_ERR_NOSTATE,
43 XML_RELAXNG_ERR_NODEFINE,
44 XML_RELAXNG_ERR_LISTEXTRA,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000045 XML_RELAXNG_ERR_LISTEMPTY,
Daniel Veillard42f12e92003-03-07 18:32:59 +000046 XML_RELAXNG_ERR_INTERNODATA,
47 XML_RELAXNG_ERR_INTERSEQ,
48 XML_RELAXNG_ERR_INTEREXTRA,
49 XML_RELAXNG_ERR_ELEMNAME,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000050 XML_RELAXNG_ERR_ATTRNAME,
Daniel Veillard42f12e92003-03-07 18:32:59 +000051 XML_RELAXNG_ERR_ELEMNONS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000052 XML_RELAXNG_ERR_ATTRNONS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000053 XML_RELAXNG_ERR_ELEMWRONGNS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000054 XML_RELAXNG_ERR_ATTRWRONGNS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000055 XML_RELAXNG_ERR_ELEMEXTRANS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000056 XML_RELAXNG_ERR_ATTREXTRANS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000057 XML_RELAXNG_ERR_ELEMNOTEMPTY,
58 XML_RELAXNG_ERR_NOELEM,
59 XML_RELAXNG_ERR_NOTELEM,
60 XML_RELAXNG_ERR_ATTRVALID,
61 XML_RELAXNG_ERR_CONTENTVALID,
62 XML_RELAXNG_ERR_EXTRACONTENT,
63 XML_RELAXNG_ERR_INVALIDATTR,
64 XML_RELAXNG_ERR_DATAELEM,
65 XML_RELAXNG_ERR_VALELEM,
66 XML_RELAXNG_ERR_LISTELEM,
67 XML_RELAXNG_ERR_DATATYPE,
68 XML_RELAXNG_ERR_VALUE,
69 XML_RELAXNG_ERR_LIST,
70 XML_RELAXNG_ERR_NOGRAMMAR,
Daniel Veillardfd573f12003-03-16 17:52:32 +000071 XML_RELAXNG_ERR_EXTRADATA,
Daniel Veillard952379b2003-03-17 15:37:12 +000072 XML_RELAXNG_ERR_LACKDATA,
Daniel Veillardc58f4ef2003-04-14 16:11:26 +000073 XML_RELAXNG_ERR_INTERNAL,
74 XML_RELAXNG_ERR_ELEMWRONG,
75 XML_RELAXNG_ERR_TEXTWRONG
Daniel Veillard42f12e92003-03-07 18:32:59 +000076} xmlRelaxNGValidErr;
77
78/*
Daniel Veillard6eadf632003-01-23 18:29:16 +000079 * Interfaces for parsing.
80 */
81xmlRelaxNGParserCtxtPtr xmlRelaxNGNewParserCtxt (const char *URL);
82xmlRelaxNGParserCtxtPtr xmlRelaxNGNewMemParserCtxt(const char *buffer,
83 int size);
Daniel Veillard33300b42003-04-17 09:09:19 +000084xmlRelaxNGParserCtxtPtr xmlRelaxNGNewDocParserCtxt(xmlDocPtr doc);
85
Daniel Veillard6eadf632003-01-23 18:29:16 +000086void xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
87void xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
88 xmlRelaxNGValidityErrorFunc err,
89 xmlRelaxNGValidityWarningFunc warn,
90 void *ctx);
91xmlRelaxNGPtr xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
92void xmlRelaxNGFree (xmlRelaxNGPtr schema);
93void xmlRelaxNGDump (FILE *output,
94 xmlRelaxNGPtr schema);
Daniel Veillardfebcca42003-02-16 15:44:18 +000095void xmlRelaxNGDumpTree (FILE * output,
96 xmlRelaxNGPtr schema);
Daniel Veillard6eadf632003-01-23 18:29:16 +000097/*
98 * Interfaces for validating
99 */
100void xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
101 xmlRelaxNGValidityErrorFunc err,
102 xmlRelaxNGValidityWarningFunc warn,
103 void *ctx);
104xmlRelaxNGValidCtxtPtr xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
105void xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
106int xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardef0b4502003-03-24 13:57:34 +0000107 xmlDocPtr doc);
Daniel Veillard6eadf632003-01-23 18:29:16 +0000108void xmlRelaxNGCleanupTypes (void);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000109/*
110 * Interfaces for progressive validation when possible
111 */
112int xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
113 xmlDocPtr doc,
114 xmlNodePtr elem);
115int xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
116 const xmlChar *data,
117 int len);
118int xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
119 xmlDocPtr doc,
120 xmlNodePtr elem);
121int xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
122 xmlDocPtr doc,
123 xmlNodePtr elem);
Daniel Veillard6eadf632003-01-23 18:29:16 +0000124#endif /* __XML_RELAX_NG__ */