1  /* libxml2 - Library for parsing XML documents
       2   * Copyright (C) 2006-2019 Free Software Foundation, Inc.
       3   *
       4   * This file is not part of the GNU gettext program, but is used with
       5   * GNU gettext.
       6   *
       7   * The original copyright notice is as follows:
       8   */
       9  
      10  /*
      11   * Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
      12   *
      13   * Permission is hereby granted, free of charge, to any person obtaining a copy
      14   * of this software and associated documentation files (the "Software"), to deal
      15   * in the Software without restriction, including without limitation the rights
      16   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      17   * copies of the Software, and to permit persons to whom the Software is fur-
      18   * nished to do so, subject to the following conditions:
      19   *
      20   * The above copyright notice and this permission notice shall be included in
      21   * all copies or substantial portions of the Software.
      22   *
      23   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      24   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
      25   * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
      26   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      27   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      28   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      29   * THE SOFTWARE.
      30   *
      31   * Author: Daniel Veillard
      32   */
      33  
      34  /*
      35   * Summary: incomplete XML Schemas structure implementation
      36   * Description: interface to the XML Schemas handling and schema validity
      37   *              checking, it is incomplete right now.
      38   */
      39  
      40  #ifndef __XML_SCHEMA_H__
      41  #define __XML_SCHEMA_H__
      42  
      43  #include <libxml/xmlversion.h>
      44  
      45  #ifdef LIBXML_SCHEMAS_ENABLED
      46  
      47  #include <libxml/tree.h>
      48  
      49  #ifdef __cplusplus
      50  extern "C" {
      51  #endif
      52  
      53  /**
      54   * This error codes are obsolete; not used any more.
      55   */
      56  typedef enum {
      57      XML_SCHEMAS_ERR_OK		= 0,
      58      XML_SCHEMAS_ERR_NOROOT	= 1,
      59      XML_SCHEMAS_ERR_UNDECLAREDELEM,
      60      XML_SCHEMAS_ERR_NOTTOPLEVEL,
      61      XML_SCHEMAS_ERR_MISSING,
      62      XML_SCHEMAS_ERR_WRONGELEM,
      63      XML_SCHEMAS_ERR_NOTYPE,
      64      XML_SCHEMAS_ERR_NOROLLBACK,
      65      XML_SCHEMAS_ERR_ISABSTRACT,
      66      XML_SCHEMAS_ERR_NOTEMPTY,
      67      XML_SCHEMAS_ERR_ELEMCONT,
      68      XML_SCHEMAS_ERR_HAVEDEFAULT,
      69      XML_SCHEMAS_ERR_NOTNILLABLE,
      70      XML_SCHEMAS_ERR_EXTRACONTENT,
      71      XML_SCHEMAS_ERR_INVALIDATTR,
      72      XML_SCHEMAS_ERR_INVALIDELEM,
      73      XML_SCHEMAS_ERR_NOTDETERMINIST,
      74      XML_SCHEMAS_ERR_CONSTRUCT,
      75      XML_SCHEMAS_ERR_INTERNAL,
      76      XML_SCHEMAS_ERR_NOTSIMPLE,
      77      XML_SCHEMAS_ERR_ATTRUNKNOWN,
      78      XML_SCHEMAS_ERR_ATTRINVALID,
      79      XML_SCHEMAS_ERR_VALUE,
      80      XML_SCHEMAS_ERR_FACET,
      81      XML_SCHEMAS_ERR_,
      82      XML_SCHEMAS_ERR_XXX
      83  } xmlSchemaValidError;
      84  
      85  /*
      86  * ATTENTION: Change xmlSchemaSetValidOptions's check
      87  * for invalid values, if adding to the validation
      88  * options below.
      89  */
      90  /**
      91   * xmlSchemaValidOption:
      92   *
      93   * This is the set of XML Schema validation options.
      94   */
      95  typedef enum {
      96      XML_SCHEMA_VAL_VC_I_CREATE			= 1<<0
      97  	/* Default/fixed: create an attribute node
      98  	* or an element's text node on the instance.
      99  	*/
     100  } xmlSchemaValidOption;
     101  
     102  /*
     103      XML_SCHEMA_VAL_XSI_ASSEMBLE			= 1<<1,
     104  	* assemble schemata using
     105  	* xsi:schemaLocation and
     106  	* xsi:noNamespaceSchemaLocation
     107  */
     108  
     109  /**
     110   * The schemas related types are kept internal
     111   */
     112  typedef struct _xmlSchema xmlSchema;
     113  typedef xmlSchema *xmlSchemaPtr;
     114  
     115  /**
     116   * xmlSchemaValidityErrorFunc:
     117   * @ctx: the validation context
     118   * @msg: the message
     119   * @...: extra arguments
     120   *
     121   * Signature of an error callback from an XSD validation
     122   */
     123  typedef void (XMLCDECL *xmlSchemaValidityErrorFunc)
     124                   (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
     125  
     126  /**
     127   * xmlSchemaValidityWarningFunc:
     128   * @ctx: the validation context
     129   * @msg: the message
     130   * @...: extra arguments
     131   *
     132   * Signature of a warning callback from an XSD validation
     133   */
     134  typedef void (XMLCDECL *xmlSchemaValidityWarningFunc)
     135                   (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
     136  
     137  /**
     138   * A schemas validation context
     139   */
     140  typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
     141  typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
     142  
     143  typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
     144  typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
     145  
     146  /**
     147   * xmlSchemaValidityLocatorFunc:
     148   * @ctx: user provided context
     149   * @file: returned file information
     150   * @line: returned line information
     151   *
     152   * A schemas validation locator, a callback called by the validator.
     153   * This is used when file or node informations are not available
     154   * to find out what file and line number are affected
     155   *
     156   * Returns: 0 in case of success and -1 in case of error
     157   */
     158  
     159  typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx,
     160                             const char **file, unsigned long *line);
     161  
     162  /*
     163   * Interfaces for parsing.
     164   */
     165  XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
     166  	    xmlSchemaNewParserCtxt	(const char *URL);
     167  XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
     168  	    xmlSchemaNewMemParserCtxt	(const char *buffer,
     169  					 int size);
     170  XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
     171  	    xmlSchemaNewDocParserCtxt	(xmlDocPtr doc);
     172  XMLPUBFUN void XMLCALL
     173  	    xmlSchemaFreeParserCtxt	(xmlSchemaParserCtxtPtr ctxt);
     174  XMLPUBFUN void XMLCALL
     175  	    xmlSchemaSetParserErrors	(xmlSchemaParserCtxtPtr ctxt,
     176  					 xmlSchemaValidityErrorFunc err,
     177  					 xmlSchemaValidityWarningFunc warn,
     178  					 void *ctx);
     179  XMLPUBFUN void XMLCALL
     180  	    xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
     181  					 xmlStructuredErrorFunc serror,
     182  					 void *ctx);
     183  XMLPUBFUN int XMLCALL
     184  		xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
     185  					xmlSchemaValidityErrorFunc * err,
     186  					xmlSchemaValidityWarningFunc * warn,
     187  					void **ctx);
     188  XMLPUBFUN int XMLCALL
     189  		xmlSchemaIsValid	(xmlSchemaValidCtxtPtr ctxt);
     190  
     191  XMLPUBFUN xmlSchemaPtr XMLCALL
     192  	    xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt);
     193  XMLPUBFUN void XMLCALL
     194  	    xmlSchemaFree		(xmlSchemaPtr schema);
     195  #ifdef LIBXML_OUTPUT_ENABLED
     196  XMLPUBFUN void XMLCALL
     197  	    xmlSchemaDump		(FILE *output,
     198  					 xmlSchemaPtr schema);
     199  #endif /* LIBXML_OUTPUT_ENABLED */
     200  /*
     201   * Interfaces for validating
     202   */
     203  XMLPUBFUN void XMLCALL
     204  	    xmlSchemaSetValidErrors	(xmlSchemaValidCtxtPtr ctxt,
     205  					 xmlSchemaValidityErrorFunc err,
     206  					 xmlSchemaValidityWarningFunc warn,
     207  					 void *ctx);
     208  XMLPUBFUN void XMLCALL
     209  	    xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
     210  					 xmlStructuredErrorFunc serror,
     211  					 void *ctx);
     212  XMLPUBFUN int XMLCALL
     213  	    xmlSchemaGetValidErrors	(xmlSchemaValidCtxtPtr ctxt,
     214  					 xmlSchemaValidityErrorFunc *err,
     215  					 xmlSchemaValidityWarningFunc *warn,
     216  					 void **ctx);
     217  XMLPUBFUN int XMLCALL
     218  	    xmlSchemaSetValidOptions	(xmlSchemaValidCtxtPtr ctxt,
     219  					 int options);
     220  XMLPUBFUN void XMLCALL
     221              xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt,
     222  	                                 const char *filename);
     223  XMLPUBFUN int XMLCALL
     224  	    xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt);
     225  
     226  XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL
     227  	    xmlSchemaNewValidCtxt	(xmlSchemaPtr schema);
     228  XMLPUBFUN void XMLCALL
     229  	    xmlSchemaFreeValidCtxt	(xmlSchemaValidCtxtPtr ctxt);
     230  XMLPUBFUN int XMLCALL
     231  	    xmlSchemaValidateDoc	(xmlSchemaValidCtxtPtr ctxt,
     232  					 xmlDocPtr instance);
     233  XMLPUBFUN int XMLCALL
     234              xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt,
     235  			                 xmlNodePtr elem);
     236  XMLPUBFUN int XMLCALL
     237  	    xmlSchemaValidateStream	(xmlSchemaValidCtxtPtr ctxt,
     238  					 xmlParserInputBufferPtr input,
     239  					 xmlCharEncoding enc,
     240  					 xmlSAXHandlerPtr sax,
     241  					 void *user_data);
     242  XMLPUBFUN int XMLCALL
     243  	    xmlSchemaValidateFile	(xmlSchemaValidCtxtPtr ctxt,
     244  					 const char * filename,
     245  					 int options);
     246  
     247  XMLPUBFUN xmlParserCtxtPtr XMLCALL
     248  	    xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt);
     249  
     250  /*
     251   * Interface to insert Schemas SAX validation in a SAX stream
     252   */
     253  typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct;
     254  typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr;
     255  
     256  XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL
     257              xmlSchemaSAXPlug		(xmlSchemaValidCtxtPtr ctxt,
     258  					 xmlSAXHandlerPtr *sax,
     259  					 void **user_data);
     260  XMLPUBFUN int XMLCALL
     261              xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug);
     262  
     263  
     264  XMLPUBFUN void XMLCALL
     265              xmlSchemaValidateSetLocator	(xmlSchemaValidCtxtPtr vctxt,
     266  					 xmlSchemaValidityLocatorFunc f,
     267  					 void *ctxt);
     268  
     269  #ifdef __cplusplus
     270  }
     271  #endif
     272  
     273  #endif /* LIBXML_SCHEMAS_ENABLED */
     274  #endif /* __XML_SCHEMA_H__ */