blob: a21f92c21631e1ccb7a0b8a1496a4dc7ea14fb85 [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);
84void xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
85void xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
86 xmlRelaxNGValidityErrorFunc err,
87 xmlRelaxNGValidityWarningFunc warn,
88 void *ctx);
89xmlRelaxNGPtr xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
90void xmlRelaxNGFree (xmlRelaxNGPtr schema);
91void xmlRelaxNGDump (FILE *output,
92 xmlRelaxNGPtr schema);
Daniel Veillardfebcca42003-02-16 15:44:18 +000093void xmlRelaxNGDumpTree (FILE * output,
94 xmlRelaxNGPtr schema);
Daniel Veillard6eadf632003-01-23 18:29:16 +000095/*
96 * Interfaces for validating
97 */
98void xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
99 xmlRelaxNGValidityErrorFunc err,
100 xmlRelaxNGValidityWarningFunc warn,
101 void *ctx);
102xmlRelaxNGValidCtxtPtr xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
103void xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
104int xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardef0b4502003-03-24 13:57:34 +0000105 xmlDocPtr doc);
Daniel Veillard6eadf632003-01-23 18:29:16 +0000106void xmlRelaxNGCleanupTypes (void);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000107/*
108 * Interfaces for progressive validation when possible
109 */
110int xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
111 xmlDocPtr doc,
112 xmlNodePtr elem);
113int xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
114 const xmlChar *data,
115 int len);
116int xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
117 xmlDocPtr doc,
118 xmlNodePtr elem);
119int xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
120 xmlDocPtr doc,
121 xmlNodePtr elem);
Daniel Veillard6eadf632003-01-23 18:29:16 +0000122#endif /* __XML_RELAX_NG__ */