1*7c568831SAndroid Build Coastguard Worker /* 2*7c568831SAndroid Build Coastguard Worker * Summary: incomplete XML Schemas structure implementation 3*7c568831SAndroid Build Coastguard Worker * Description: interface to the XML Schemas handling and schema validity 4*7c568831SAndroid Build Coastguard Worker * checking, it is incomplete right now. 5*7c568831SAndroid Build Coastguard Worker * 6*7c568831SAndroid Build Coastguard Worker * Copy: See Copyright for the status of this software. 7*7c568831SAndroid Build Coastguard Worker * 8*7c568831SAndroid Build Coastguard Worker * Author: Daniel Veillard 9*7c568831SAndroid Build Coastguard Worker */ 10*7c568831SAndroid Build Coastguard Worker 11*7c568831SAndroid Build Coastguard Worker 12*7c568831SAndroid Build Coastguard Worker #ifndef __XML_SCHEMA_H__ 13*7c568831SAndroid Build Coastguard Worker #define __XML_SCHEMA_H__ 14*7c568831SAndroid Build Coastguard Worker 15*7c568831SAndroid Build Coastguard Worker #include <libxml/xmlversion.h> 16*7c568831SAndroid Build Coastguard Worker 17*7c568831SAndroid Build Coastguard Worker #ifdef LIBXML_SCHEMAS_ENABLED 18*7c568831SAndroid Build Coastguard Worker 19*7c568831SAndroid Build Coastguard Worker #include <stdio.h> 20*7c568831SAndroid Build Coastguard Worker #include <libxml/encoding.h> 21*7c568831SAndroid Build Coastguard Worker #include <libxml/parser.h> 22*7c568831SAndroid Build Coastguard Worker #include <libxml/tree.h> 23*7c568831SAndroid Build Coastguard Worker #include <libxml/xmlerror.h> 24*7c568831SAndroid Build Coastguard Worker 25*7c568831SAndroid Build Coastguard Worker #ifdef __cplusplus 26*7c568831SAndroid Build Coastguard Worker extern "C" { 27*7c568831SAndroid Build Coastguard Worker #endif 28*7c568831SAndroid Build Coastguard Worker 29*7c568831SAndroid Build Coastguard Worker /** 30*7c568831SAndroid Build Coastguard Worker * This error codes are obsolete; not used any more. 31*7c568831SAndroid Build Coastguard Worker */ 32*7c568831SAndroid Build Coastguard Worker typedef enum { 33*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_OK = 0, 34*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOROOT = 1, 35*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_UNDECLAREDELEM, 36*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTTOPLEVEL, 37*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_MISSING, 38*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_WRONGELEM, 39*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTYPE, 40*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOROLLBACK, 41*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_ISABSTRACT, 42*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTEMPTY, 43*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_ELEMCONT, 44*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_HAVEDEFAULT, 45*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTNILLABLE, 46*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_EXTRACONTENT, 47*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_INVALIDATTR, 48*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_INVALIDELEM, 49*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTDETERMINIST, 50*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_CONSTRUCT, 51*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_INTERNAL, 52*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_NOTSIMPLE, 53*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_ATTRUNKNOWN, 54*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_ATTRINVALID, 55*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_VALUE, 56*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_FACET, 57*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_, 58*7c568831SAndroid Build Coastguard Worker XML_SCHEMAS_ERR_XXX 59*7c568831SAndroid Build Coastguard Worker } xmlSchemaValidError; 60*7c568831SAndroid Build Coastguard Worker 61*7c568831SAndroid Build Coastguard Worker /* 62*7c568831SAndroid Build Coastguard Worker * ATTENTION: Change xmlSchemaSetValidOptions's check 63*7c568831SAndroid Build Coastguard Worker * for invalid values, if adding to the validation 64*7c568831SAndroid Build Coastguard Worker * options below. 65*7c568831SAndroid Build Coastguard Worker */ 66*7c568831SAndroid Build Coastguard Worker /** 67*7c568831SAndroid Build Coastguard Worker * xmlSchemaValidOption: 68*7c568831SAndroid Build Coastguard Worker * 69*7c568831SAndroid Build Coastguard Worker * This is the set of XML Schema validation options. 70*7c568831SAndroid Build Coastguard Worker */ 71*7c568831SAndroid Build Coastguard Worker typedef enum { 72*7c568831SAndroid Build Coastguard Worker XML_SCHEMA_VAL_VC_I_CREATE = 1<<0 73*7c568831SAndroid Build Coastguard Worker /* Default/fixed: create an attribute node 74*7c568831SAndroid Build Coastguard Worker * or an element's text node on the instance. 75*7c568831SAndroid Build Coastguard Worker */ 76*7c568831SAndroid Build Coastguard Worker } xmlSchemaValidOption; 77*7c568831SAndroid Build Coastguard Worker 78*7c568831SAndroid Build Coastguard Worker /* 79*7c568831SAndroid Build Coastguard Worker XML_SCHEMA_VAL_XSI_ASSEMBLE = 1<<1, 80*7c568831SAndroid Build Coastguard Worker * assemble schemata using 81*7c568831SAndroid Build Coastguard Worker * xsi:schemaLocation and 82*7c568831SAndroid Build Coastguard Worker * xsi:noNamespaceSchemaLocation 83*7c568831SAndroid Build Coastguard Worker */ 84*7c568831SAndroid Build Coastguard Worker 85*7c568831SAndroid Build Coastguard Worker /** 86*7c568831SAndroid Build Coastguard Worker * The schemas related types are kept internal 87*7c568831SAndroid Build Coastguard Worker */ 88*7c568831SAndroid Build Coastguard Worker typedef struct _xmlSchema xmlSchema; 89*7c568831SAndroid Build Coastguard Worker typedef xmlSchema *xmlSchemaPtr; 90*7c568831SAndroid Build Coastguard Worker 91*7c568831SAndroid Build Coastguard Worker /** 92*7c568831SAndroid Build Coastguard Worker * xmlSchemaValidityErrorFunc: 93*7c568831SAndroid Build Coastguard Worker * @ctx: the validation context 94*7c568831SAndroid Build Coastguard Worker * @msg: the message 95*7c568831SAndroid Build Coastguard Worker * @...: extra arguments 96*7c568831SAndroid Build Coastguard Worker * 97*7c568831SAndroid Build Coastguard Worker * Signature of an error callback from an XSD validation 98*7c568831SAndroid Build Coastguard Worker */ 99*7c568831SAndroid Build Coastguard Worker typedef void (*xmlSchemaValidityErrorFunc) 100*7c568831SAndroid Build Coastguard Worker (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); 101*7c568831SAndroid Build Coastguard Worker 102*7c568831SAndroid Build Coastguard Worker /** 103*7c568831SAndroid Build Coastguard Worker * xmlSchemaValidityWarningFunc: 104*7c568831SAndroid Build Coastguard Worker * @ctx: the validation context 105*7c568831SAndroid Build Coastguard Worker * @msg: the message 106*7c568831SAndroid Build Coastguard Worker * @...: extra arguments 107*7c568831SAndroid Build Coastguard Worker * 108*7c568831SAndroid Build Coastguard Worker * Signature of a warning callback from an XSD validation 109*7c568831SAndroid Build Coastguard Worker */ 110*7c568831SAndroid Build Coastguard Worker typedef void (*xmlSchemaValidityWarningFunc) 111*7c568831SAndroid Build Coastguard Worker (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); 112*7c568831SAndroid Build Coastguard Worker 113*7c568831SAndroid Build Coastguard Worker /** 114*7c568831SAndroid Build Coastguard Worker * A schemas validation context 115*7c568831SAndroid Build Coastguard Worker */ 116*7c568831SAndroid Build Coastguard Worker typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt; 117*7c568831SAndroid Build Coastguard Worker typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr; 118*7c568831SAndroid Build Coastguard Worker 119*7c568831SAndroid Build Coastguard Worker typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt; 120*7c568831SAndroid Build Coastguard Worker typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr; 121*7c568831SAndroid Build Coastguard Worker 122*7c568831SAndroid Build Coastguard Worker /** 123*7c568831SAndroid Build Coastguard Worker * xmlSchemaValidityLocatorFunc: 124*7c568831SAndroid Build Coastguard Worker * @ctx: user provided context 125*7c568831SAndroid Build Coastguard Worker * @file: returned file information 126*7c568831SAndroid Build Coastguard Worker * @line: returned line information 127*7c568831SAndroid Build Coastguard Worker * 128*7c568831SAndroid Build Coastguard Worker * A schemas validation locator, a callback called by the validator. 129*7c568831SAndroid Build Coastguard Worker * This is used when file or node information are not available 130*7c568831SAndroid Build Coastguard Worker * to find out what file and line number are affected 131*7c568831SAndroid Build Coastguard Worker * 132*7c568831SAndroid Build Coastguard Worker * Returns: 0 in case of success and -1 in case of error 133*7c568831SAndroid Build Coastguard Worker */ 134*7c568831SAndroid Build Coastguard Worker 135*7c568831SAndroid Build Coastguard Worker typedef int (*xmlSchemaValidityLocatorFunc) (void *ctx, 136*7c568831SAndroid Build Coastguard Worker const char **file, unsigned long *line); 137*7c568831SAndroid Build Coastguard Worker 138*7c568831SAndroid Build Coastguard Worker /* 139*7c568831SAndroid Build Coastguard Worker * Interfaces for parsing. 140*7c568831SAndroid Build Coastguard Worker */ 141*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaParserCtxtPtr 142*7c568831SAndroid Build Coastguard Worker xmlSchemaNewParserCtxt (const char *URL); 143*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaParserCtxtPtr 144*7c568831SAndroid Build Coastguard Worker xmlSchemaNewMemParserCtxt (const char *buffer, 145*7c568831SAndroid Build Coastguard Worker int size); 146*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaParserCtxtPtr 147*7c568831SAndroid Build Coastguard Worker xmlSchemaNewDocParserCtxt (xmlDocPtr doc); 148*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 149*7c568831SAndroid Build Coastguard Worker xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt); 150*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 151*7c568831SAndroid Build Coastguard Worker xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt, 152*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityErrorFunc err, 153*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityWarningFunc warn, 154*7c568831SAndroid Build Coastguard Worker void *ctx); 155*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 156*7c568831SAndroid Build Coastguard Worker xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt, 157*7c568831SAndroid Build Coastguard Worker xmlStructuredErrorFunc serror, 158*7c568831SAndroid Build Coastguard Worker void *ctx); 159*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 160*7c568831SAndroid Build Coastguard Worker xmlSchemaGetParserErrors (xmlSchemaParserCtxtPtr ctxt, 161*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityErrorFunc * err, 162*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityWarningFunc * warn, 163*7c568831SAndroid Build Coastguard Worker void **ctx); 164*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 165*7c568831SAndroid Build Coastguard Worker xmlSchemaSetResourceLoader (xmlSchemaParserCtxtPtr ctxt, 166*7c568831SAndroid Build Coastguard Worker xmlResourceLoader loader, 167*7c568831SAndroid Build Coastguard Worker void *data); 168*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 169*7c568831SAndroid Build Coastguard Worker xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt); 170*7c568831SAndroid Build Coastguard Worker 171*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaPtr 172*7c568831SAndroid Build Coastguard Worker xmlSchemaParse (xmlSchemaParserCtxtPtr ctxt); 173*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 174*7c568831SAndroid Build Coastguard Worker xmlSchemaFree (xmlSchemaPtr schema); 175*7c568831SAndroid Build Coastguard Worker #ifdef LIBXML_OUTPUT_ENABLED 176*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 177*7c568831SAndroid Build Coastguard Worker xmlSchemaDump (FILE *output, 178*7c568831SAndroid Build Coastguard Worker xmlSchemaPtr schema); 179*7c568831SAndroid Build Coastguard Worker #endif /* LIBXML_OUTPUT_ENABLED */ 180*7c568831SAndroid Build Coastguard Worker /* 181*7c568831SAndroid Build Coastguard Worker * Interfaces for validating 182*7c568831SAndroid Build Coastguard Worker */ 183*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 184*7c568831SAndroid Build Coastguard Worker xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt, 185*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityErrorFunc err, 186*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityWarningFunc warn, 187*7c568831SAndroid Build Coastguard Worker void *ctx); 188*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 189*7c568831SAndroid Build Coastguard Worker xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt, 190*7c568831SAndroid Build Coastguard Worker xmlStructuredErrorFunc serror, 191*7c568831SAndroid Build Coastguard Worker void *ctx); 192*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 193*7c568831SAndroid Build Coastguard Worker xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt, 194*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityErrorFunc *err, 195*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityWarningFunc *warn, 196*7c568831SAndroid Build Coastguard Worker void **ctx); 197*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 198*7c568831SAndroid Build Coastguard Worker xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt, 199*7c568831SAndroid Build Coastguard Worker int options); 200*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 201*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, 202*7c568831SAndroid Build Coastguard Worker const char *filename); 203*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 204*7c568831SAndroid Build Coastguard Worker xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt); 205*7c568831SAndroid Build Coastguard Worker 206*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaValidCtxtPtr 207*7c568831SAndroid Build Coastguard Worker xmlSchemaNewValidCtxt (xmlSchemaPtr schema); 208*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 209*7c568831SAndroid Build Coastguard Worker xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt); 210*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 211*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt, 212*7c568831SAndroid Build Coastguard Worker xmlDocPtr instance); 213*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 214*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt, 215*7c568831SAndroid Build Coastguard Worker xmlNodePtr elem); 216*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 217*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt, 218*7c568831SAndroid Build Coastguard Worker xmlParserInputBufferPtr input, 219*7c568831SAndroid Build Coastguard Worker xmlCharEncoding enc, 220*7c568831SAndroid Build Coastguard Worker xmlSAXHandlerPtr sax, 221*7c568831SAndroid Build Coastguard Worker void *user_data); 222*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 223*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt, 224*7c568831SAndroid Build Coastguard Worker const char * filename, 225*7c568831SAndroid Build Coastguard Worker int options); 226*7c568831SAndroid Build Coastguard Worker 227*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlParserCtxtPtr 228*7c568831SAndroid Build Coastguard Worker xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt); 229*7c568831SAndroid Build Coastguard Worker 230*7c568831SAndroid Build Coastguard Worker /* 231*7c568831SAndroid Build Coastguard Worker * Interface to insert Schemas SAX validation in a SAX stream 232*7c568831SAndroid Build Coastguard Worker */ 233*7c568831SAndroid Build Coastguard Worker typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct; 234*7c568831SAndroid Build Coastguard Worker typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr; 235*7c568831SAndroid Build Coastguard Worker 236*7c568831SAndroid Build Coastguard Worker XMLPUBFUN xmlSchemaSAXPlugPtr 237*7c568831SAndroid Build Coastguard Worker xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt, 238*7c568831SAndroid Build Coastguard Worker xmlSAXHandlerPtr *sax, 239*7c568831SAndroid Build Coastguard Worker void **user_data); 240*7c568831SAndroid Build Coastguard Worker XMLPUBFUN int 241*7c568831SAndroid Build Coastguard Worker xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug); 242*7c568831SAndroid Build Coastguard Worker 243*7c568831SAndroid Build Coastguard Worker 244*7c568831SAndroid Build Coastguard Worker XMLPUBFUN void 245*7c568831SAndroid Build Coastguard Worker xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt, 246*7c568831SAndroid Build Coastguard Worker xmlSchemaValidityLocatorFunc f, 247*7c568831SAndroid Build Coastguard Worker void *ctxt); 248*7c568831SAndroid Build Coastguard Worker 249*7c568831SAndroid Build Coastguard Worker #ifdef __cplusplus 250*7c568831SAndroid Build Coastguard Worker } 251*7c568831SAndroid Build Coastguard Worker #endif 252*7c568831SAndroid Build Coastguard Worker 253*7c568831SAndroid Build Coastguard Worker #endif /* LIBXML_SCHEMAS_ENABLED */ 254*7c568831SAndroid Build Coastguard Worker #endif /* __XML_SCHEMA_H__ */ 255