blob: c75aba29be4a73bd89ac3025c28fb2e9afdccf4e [file] [log] [blame]
Daniel Veillard6eadf632003-01-23 18:29:16 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: implementation of the Relax-NG validation
3 * Description: implementation of the Relax-NG validation
Daniel Veillard6eadf632003-01-23 18:29:16 +00004 *
Daniel Veillardbe586972003-11-18 20:56:51 +00005 * Copy: See Copyright for the status of this software.
Daniel Veillard6eadf632003-01-23 18:29:16 +00006 *
Daniel Veillardbe586972003-11-18 20:56:51 +00007 * Author: Daniel Veillard
Daniel Veillard6eadf632003-01-23 18:29:16 +00008 */
9
10#ifndef __XML_RELAX_NG__
11#define __XML_RELAX_NG__
12
Igor Zlatkovic76874e42003-08-25 09:05:12 +000013#include <libxml/xmlversion.h>
Daniel Veillard6eadf632003-01-23 18:29:16 +000014#include <libxml/hash.h>
William M. Bracka2e844a2004-01-06 11:52:13 +000015#include <libxml/xmlstring.h>
Daniel Veillard6eadf632003-01-23 18:29:16 +000016
Daniel Veillarda2351322004-06-27 12:08:10 +000017#ifdef LIBXML_SCHEMAS_ENABLED
18
Daniel Veillard94394cd2003-10-29 17:07:51 +000019#ifdef __cplusplus
20extern "C" {
21#endif
22
Daniel Veillard6eadf632003-01-23 18:29:16 +000023typedef struct _xmlRelaxNG xmlRelaxNG;
24typedef xmlRelaxNG *xmlRelaxNGPtr;
25
26
27/**
28 * A schemas validation context
29 */
Daniel Veillardffa3c742005-07-21 13:24:09 +000030typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...);
31typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...);
Daniel Veillard6eadf632003-01-23 18:29:16 +000032
33typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
34typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
35
36typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
37typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
38
39/*
Daniel Veillard42f12e92003-03-07 18:32:59 +000040 * xmlRelaxNGValidErr:
41 *
42 * List of possible Relax NG validation errors
43 */
44typedef enum {
45 XML_RELAXNG_OK = 0,
46 XML_RELAXNG_ERR_MEMORY,
47 XML_RELAXNG_ERR_TYPE,
48 XML_RELAXNG_ERR_TYPEVAL,
Daniel Veillardc3da18a2003-03-18 00:31:04 +000049 XML_RELAXNG_ERR_DUPID,
Daniel Veillard42f12e92003-03-07 18:32:59 +000050 XML_RELAXNG_ERR_TYPECMP,
51 XML_RELAXNG_ERR_NOSTATE,
52 XML_RELAXNG_ERR_NODEFINE,
53 XML_RELAXNG_ERR_LISTEXTRA,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000054 XML_RELAXNG_ERR_LISTEMPTY,
Daniel Veillard42f12e92003-03-07 18:32:59 +000055 XML_RELAXNG_ERR_INTERNODATA,
56 XML_RELAXNG_ERR_INTERSEQ,
57 XML_RELAXNG_ERR_INTEREXTRA,
58 XML_RELAXNG_ERR_ELEMNAME,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000059 XML_RELAXNG_ERR_ATTRNAME,
Daniel Veillard42f12e92003-03-07 18:32:59 +000060 XML_RELAXNG_ERR_ELEMNONS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000061 XML_RELAXNG_ERR_ATTRNONS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000062 XML_RELAXNG_ERR_ELEMWRONGNS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000063 XML_RELAXNG_ERR_ATTRWRONGNS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000064 XML_RELAXNG_ERR_ELEMEXTRANS,
Daniel Veillard1564e6e2003-03-15 21:30:25 +000065 XML_RELAXNG_ERR_ATTREXTRANS,
Daniel Veillard42f12e92003-03-07 18:32:59 +000066 XML_RELAXNG_ERR_ELEMNOTEMPTY,
67 XML_RELAXNG_ERR_NOELEM,
68 XML_RELAXNG_ERR_NOTELEM,
69 XML_RELAXNG_ERR_ATTRVALID,
70 XML_RELAXNG_ERR_CONTENTVALID,
71 XML_RELAXNG_ERR_EXTRACONTENT,
72 XML_RELAXNG_ERR_INVALIDATTR,
73 XML_RELAXNG_ERR_DATAELEM,
74 XML_RELAXNG_ERR_VALELEM,
75 XML_RELAXNG_ERR_LISTELEM,
76 XML_RELAXNG_ERR_DATATYPE,
77 XML_RELAXNG_ERR_VALUE,
78 XML_RELAXNG_ERR_LIST,
79 XML_RELAXNG_ERR_NOGRAMMAR,
Daniel Veillardfd573f12003-03-16 17:52:32 +000080 XML_RELAXNG_ERR_EXTRADATA,
Daniel Veillard952379b2003-03-17 15:37:12 +000081 XML_RELAXNG_ERR_LACKDATA,
Daniel Veillardc58f4ef2003-04-14 16:11:26 +000082 XML_RELAXNG_ERR_INTERNAL,
83 XML_RELAXNG_ERR_ELEMWRONG,
84 XML_RELAXNG_ERR_TEXTWRONG
Daniel Veillard42f12e92003-03-07 18:32:59 +000085} xmlRelaxNGValidErr;
86
87/*
Daniel Veillard03c2f0a2004-01-25 19:54:59 +000088 * xmlRelaxNGParserFlags:
89 *
90 * List of possible Relax NG Parser flags
91 */
92typedef enum {
93 XML_RELAXNGP_NONE = 0,
94 XML_RELAXNGP_FREE_DOC = 1,
95 XML_RELAXNGP_CRNG = 2
96} xmlRelaxNGParserFlag;
Daniel Veillarddd6d3002004-11-03 14:20:29 +000097
98XMLPUBFUN int XMLCALL
99 xmlRelaxNGInitTypes (void);
100XMLPUBFUN void XMLCALL
101 xmlRelaxNGCleanupTypes (void);
102
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000103/*
Daniel Veillard6eadf632003-01-23 18:29:16 +0000104 * Interfaces for parsing.
105 */
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000106XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
107 xmlRelaxNGNewParserCtxt (const char *URL);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000108XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
109 xmlRelaxNGNewMemParserCtxt (const char *buffer,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000110 int size);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000111XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
112 xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
Daniel Veillard33300b42003-04-17 09:09:19 +0000113
Daniel Veillard03c2f0a2004-01-25 19:54:59 +0000114XMLPUBFUN int XMLCALL
115 xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
116 int flag);
117
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000118XMLPUBFUN void XMLCALL
119 xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
120XMLPUBFUN void XMLCALL
121 xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000122 xmlRelaxNGValidityErrorFunc err,
123 xmlRelaxNGValidityWarningFunc warn,
124 void *ctx);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000125XMLPUBFUN int XMLCALL
126 xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
Daniel Veillard409a8142003-07-18 15:16:57 +0000127 xmlRelaxNGValidityErrorFunc *err,
128 xmlRelaxNGValidityWarningFunc *warn,
129 void **ctx);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000130XMLPUBFUN xmlRelaxNGPtr XMLCALL
131 xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
132XMLPUBFUN void XMLCALL
133 xmlRelaxNGFree (xmlRelaxNGPtr schema);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000134#ifdef LIBXML_OUTPUT_ENABLED
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000135XMLPUBFUN void XMLCALL
136 xmlRelaxNGDump (FILE *output,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000137 xmlRelaxNGPtr schema);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000138XMLPUBFUN void XMLCALL
139 xmlRelaxNGDumpTree (FILE * output,
Daniel Veillardfebcca42003-02-16 15:44:18 +0000140 xmlRelaxNGPtr schema);
Daniel Veillarda9cce9c2003-09-29 13:20:24 +0000141#endif /* LIBXML_OUTPUT_ENABLED */
Daniel Veillard6eadf632003-01-23 18:29:16 +0000142/*
143 * Interfaces for validating
144 */
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000145XMLPUBFUN void XMLCALL
146 xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillard6eadf632003-01-23 18:29:16 +0000147 xmlRelaxNGValidityErrorFunc err,
148 xmlRelaxNGValidityWarningFunc warn,
149 void *ctx);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000150XMLPUBFUN int XMLCALL
151 xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillard409a8142003-07-18 15:16:57 +0000152 xmlRelaxNGValidityErrorFunc *err,
153 xmlRelaxNGValidityWarningFunc *warn,
154 void **ctx);
Daniel Veillardda0aa4c2005-07-13 23:07:49 +0000155XMLPUBFUN void XMLCALL
156 xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
157 xmlStructuredErrorFunc serror, void *ctx);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000158XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
159 xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
160XMLPUBFUN void XMLCALL
161 xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
162XMLPUBFUN int XMLCALL
163 xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardef0b4502003-03-24 13:57:34 +0000164 xmlDocPtr doc);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000165/*
166 * Interfaces for progressive validation when possible
167 */
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000168XMLPUBFUN int XMLCALL
169 xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000170 xmlDocPtr doc,
171 xmlNodePtr elem);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000172XMLPUBFUN int XMLCALL
173 xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000174 const xmlChar *data,
175 int len);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000176XMLPUBFUN int XMLCALL
177 xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000178 xmlDocPtr doc,
179 xmlNodePtr elem);
Igor Zlatkovic93f984a2003-08-25 10:34:41 +0000180XMLPUBFUN int XMLCALL
181 xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000182 xmlDocPtr doc,
183 xmlNodePtr elem);
Daniel Veillard94394cd2003-10-29 17:07:51 +0000184
185#ifdef __cplusplus
186}
187#endif
Daniel Veillarda2351322004-06-27 12:08:10 +0000188
189#endif /* LIBXML_SCHEMAS_ENABLED */
190
Daniel Veillard6eadf632003-01-23 18:29:16 +0000191#endif /* __XML_RELAX_NG__ */