relaxng: implementation of the Relax-NG validation

## relaxng

relaxng - implementation of the Relax-NG validation

implementation of the Relax-NG validation

Author(s): Daniel Veillard

## Synopsis

    typedef struct _xmlRelaxNG xmlRelaxNG;
    typedef xmlRelaxNG * xmlRelaxNGPtr;
    typedef enum xmlRelaxNGValidErr;
    typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
    typedef xmlRelaxNGParserCtxt * xmlRelaxNGParserCtxtPtr;
    typedef enum xmlRelaxNGParserFlag;
    typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
    typedef xmlRelaxNGValidCtxt * xmlRelaxNGValidCtxtPtr;
    void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt);
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
    void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc err,
    					 xmlRelaxNGValidityWarningFunc warn,
    					 void * ctx);
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewParserCtxt	(const char * URL);
    int	xmlRelaxNGGetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc * err,
    					 xmlRelaxNGValidityWarningFunc * warn,
    					 void ** ctx);
    int	xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem);
    xmlRelaxNGValidCtxtPtr	xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema);
    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewMemParserCtxt	(const char * buffer,
    							 int size);
    void	xmlRelaxNGDump			(FILE * output,
    					 xmlRelaxNGPtr schema);
    void	xmlRelaxNGSetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc err,
    					 xmlRelaxNGValidityWarningFunc warn,
    					 void * ctx);
    xmlRelaxNGPtr	xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt);
    void	xmlRelaxNGSetParserStructuredErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    						 xmlStructuredErrorFunc serror,
    						 void * ctx);
    int	xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem);
    typedef void xmlRelaxNGValidityErrorFunc	(void * ctx,
    					 const char * msg,
    					 ... ...);
    int	xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem);
    void	xmlRelaxNGFree			(xmlRelaxNGPtr schema);
    int	xmlRelaxNGValidateDoc		(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc);
    void	xmlRelaxNGSetValidStructuredErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    						 xmlStructuredErrorFunc serror,
    						 void * ctx);
    void	xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt);
    int	xmlRelaxNGGetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc * err,
    					 xmlRelaxNGValidityWarningFunc * warn,
    					 void ** ctx);
    int	xmlRelaxNGInitTypes		(void);
    void	xmlRelaxNGDumpTree		(FILE * output,
    					 xmlRelaxNGPtr schema);
    void	xmlRelaxNGCleanupTypes		(void);
    int	xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
    					 const xmlChar * data,
    					 int len);
    int	xmlRelaxParserSetFlag		(xmlRelaxNGParserCtxtPtr ctxt,
    					 int flags);
    typedef void xmlRelaxNGValidityWarningFunc	(void * ctx,
    					 const char * msg,
    					 ... ...);

## Description

## Details

### Structure xmlRelaxNG

    struct _xmlRelaxNG {
    The content of this structure is not made public by the API.
    } xmlRelaxNG;

### Structure xmlRelaxNGParserCtxt

    struct _xmlRelaxNGParserCtxt {
    The content of this structure is not made public by the API.
    } xmlRelaxNGParserCtxt;

### Typedef xmlRelaxNGParserCtxtPtr

    xmlRelaxNGParserCtxt * xmlRelaxNGParserCtxtPtr;

### Enum xmlRelaxNGParserFlag

    enum xmlRelaxNGParserFlag {
        XML_RELAXNGP_NONE = 0
        XML_RELAXNGP_FREE_DOC = 1
        XML_RELAXNGP_CRNG = 2
    };

### Typedef xmlRelaxNGPtr

    xmlRelaxNG * xmlRelaxNGPtr;

### Structure xmlRelaxNGValidCtxt

    struct _xmlRelaxNGValidCtxt {
    The content of this structure is not made public by the API.
    } xmlRelaxNGValidCtxt;

### Typedef xmlRelaxNGValidCtxtPtr

    xmlRelaxNGValidCtxt * xmlRelaxNGValidCtxtPtr;

### Enum xmlRelaxNGValidErr

    enum xmlRelaxNGValidErr {
        XML_RELAXNG_OK = 0
        XML_RELAXNG_ERR_MEMORY = 1
        XML_RELAXNG_ERR_TYPE = 2
        XML_RELAXNG_ERR_TYPEVAL = 3
        XML_RELAXNG_ERR_DUPID = 4
        XML_RELAXNG_ERR_TYPECMP = 5
        XML_RELAXNG_ERR_NOSTATE = 6
        XML_RELAXNG_ERR_NODEFINE = 7
        XML_RELAXNG_ERR_LISTEXTRA = 8
        XML_RELAXNG_ERR_LISTEMPTY = 9
        XML_RELAXNG_ERR_INTERNODATA = 10
        XML_RELAXNG_ERR_INTERSEQ = 11
        XML_RELAXNG_ERR_INTEREXTRA = 12
        XML_RELAXNG_ERR_ELEMNAME = 13
        XML_RELAXNG_ERR_ATTRNAME = 14
        XML_RELAXNG_ERR_ELEMNONS = 15
        XML_RELAXNG_ERR_ATTRNONS = 16
        XML_RELAXNG_ERR_ELEMWRONGNS = 17
        XML_RELAXNG_ERR_ATTRWRONGNS = 18
        XML_RELAXNG_ERR_ELEMEXTRANS = 19
        XML_RELAXNG_ERR_ATTREXTRANS = 20
        XML_RELAXNG_ERR_ELEMNOTEMPTY = 21
        XML_RELAXNG_ERR_NOELEM = 22
        XML_RELAXNG_ERR_NOTELEM = 23
        XML_RELAXNG_ERR_ATTRVALID = 24
        XML_RELAXNG_ERR_CONTENTVALID = 25
        XML_RELAXNG_ERR_EXTRACONTENT = 26
        XML_RELAXNG_ERR_INVALIDATTR = 27
        XML_RELAXNG_ERR_DATAELEM = 28
        XML_RELAXNG_ERR_VALELEM = 29
        XML_RELAXNG_ERR_LISTELEM = 30
        XML_RELAXNG_ERR_DATATYPE = 31
        XML_RELAXNG_ERR_VALUE = 32
        XML_RELAXNG_ERR_LIST = 33
        XML_RELAXNG_ERR_NOGRAMMAR = 34
        XML_RELAXNG_ERR_EXTRADATA = 35
        XML_RELAXNG_ERR_LACKDATA = 36
        XML_RELAXNG_ERR_INTERNAL = 37
        XML_RELAXNG_ERR_ELEMWRONG = 38
        XML_RELAXNG_ERR_TEXTWRONG = 39
    };

### Function type xmlRelaxNGValidityErrorFunc

    void	xmlRelaxNGValidityErrorFunc	(void * ctx,
    					 const char * msg,
    					 ... ...)

Signature of an error callback from a Relax-NG validation

`ctx`: | the validation context
`msg`: | the message
`...`: | extra arguments

### Function type xmlRelaxNGValidityWarningFunc

    void	xmlRelaxNGValidityWarningFunc	(void * ctx,
    					 const char * msg,
    					 ... ...)

Signature of a warning callback from a Relax-NG validation

`ctx`: | the validation context
`msg`: | the message
`...`: | extra arguments

### xmlRelaxNGCleanupTypes ()

    void	xmlRelaxNGCleanupTypes		(void)

Cleanup the default Schemas type library associated to RelaxNG

### xmlRelaxNGDump ()

    void	xmlRelaxNGDump			(FILE * output,
    					 xmlRelaxNGPtr schema)

Dump a RelaxNG structure back

`output`: | the file output
`schema`: | a schema structure

### xmlRelaxNGDumpTree ()

    void	xmlRelaxNGDumpTree		(FILE * output,
    					 xmlRelaxNGPtr schema)

Dump the transformed RelaxNG tree.

`output`: | the file output
`schema`: | a schema structure

### xmlRelaxNGFree ()

    void	xmlRelaxNGFree			(xmlRelaxNGPtr schema)

Deallocate a RelaxNG structure.

`schema`: | a schema structure

### xmlRelaxNGFreeParserCtxt ()

    void	xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt)

Free the resources associated to the schema parser context

`ctxt`: | the schema parser context

### xmlRelaxNGFreeValidCtxt ()

    void	xmlRelaxNGFreeValidCtxt		(xmlRelaxNGValidCtxtPtr ctxt)

Free the resources associated to the schema validation context

`ctxt`: | the schema validation context

### xmlRelaxNGGetParserErrors ()

    int	xmlRelaxNGGetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc * err,
    					 xmlRelaxNGValidityWarningFunc * warn,
    					 void ** ctx)

Get the callback information used to handle errors for a validation context

`ctxt`: | a Relax-NG validation context
`err`: | the error callback result
`warn`: | the warning callback result
`ctx`: | contextual data for the callbacks result
`Returns`: | -1 in case of failure, 0 otherwise.

### xmlRelaxNGGetValidErrors ()

    int	xmlRelaxNGGetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc * err,
    					 xmlRelaxNGValidityWarningFunc * warn,
    					 void ** ctx)

Get the error and warning callback informations

`ctxt`: | a Relax-NG validation context
`err`: | the error function result
`warn`: | the warning function result
`ctx`: | the functions context result
`Returns`: | -1 in case of error and 0 otherwise

### xmlRelaxNGInitTypes ()

    int	xmlRelaxNGInitTypes		(void)

Initilize the default type libraries.

`Returns`: | 0 in case of success and -1 in case of error.

### xmlRelaxNGNewDocParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc)

Create an XML RelaxNGs parser context for that document. Note: since the process of compiling a RelaxNG schemas modifies the document, the @doc parameter is duplicated internally.

`doc`: | a preparsed document tree
`Returns`: | the parser context or NULL in case of error

### xmlRelaxNGNewMemParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewMemParserCtxt	(const char * buffer,
    							 int size)

Create an XML RelaxNGs parse context for that memory buffer expected to contain an XML RelaxNGs file.

`buffer`: | a pointer to a char array containing the schemas
`size`: | the size of the array
`Returns`: | the parser context or NULL in case of error

### xmlRelaxNGNewParserCtxt ()

    xmlRelaxNGParserCtxtPtr	xmlRelaxNGNewParserCtxt	(const char * URL)

Create an XML RelaxNGs parse context for that file/resource expected to contain an XML RelaxNGs file.

`URL`: | the location of the schema
`Returns`: | the parser context or NULL in case of error

### xmlRelaxNGNewValidCtxt ()

    xmlRelaxNGValidCtxtPtr	xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema)

Create an XML RelaxNGs validation context based on the given schema

`schema`: | a precompiled XML RelaxNGs
`Returns`: | the validation context or NULL in case of error

### xmlRelaxNGParse ()

    xmlRelaxNGPtr	xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt)

parse a schema definition resource and build an internal XML Shema struture which can be used to validate instances.

`ctxt`: | a Relax-NG parser context
`Returns`: | the internal XML RelaxNG structure built from the resource or NULL in case of error

### xmlRelaxNGSetParserErrors ()

    void	xmlRelaxNGSetParserErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc err,
    					 xmlRelaxNGValidityWarningFunc warn,
    					 void * ctx)

Set the callback functions used to handle errors for a validation context

`ctxt`: | a Relax-NG validation context
`err`: | the error callback
`warn`: | the warning callback
`ctx`: | contextual data for the callbacks

### xmlRelaxNGSetParserStructuredErrors ()

    void	xmlRelaxNGSetParserStructuredErrors	(xmlRelaxNGParserCtxtPtr ctxt,
    						 xmlStructuredErrorFunc serror,
    						 void * ctx)

Set the callback functions used to handle errors for a parsing context

`ctxt`: | a Relax-NG parser context
`serror`: | the error callback
`ctx`: | contextual data for the callbacks

### xmlRelaxNGSetValidErrors ()

    void	xmlRelaxNGSetValidErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlRelaxNGValidityErrorFunc err,
    					 xmlRelaxNGValidityWarningFunc warn,
    					 void * ctx)

Set the error and warning callback informations

`ctxt`: | a Relax-NG validation context
`err`: | the error function
`warn`: | the warning function
`ctx`: | the functions context

### xmlRelaxNGSetValidStructuredErrors ()

    void	xmlRelaxNGSetValidStructuredErrors	(xmlRelaxNGValidCtxtPtr ctxt,
    						 xmlStructuredErrorFunc serror,
    						 void * ctx)

Set the structured error callback

`ctxt`: | a Relax-NG validation context
`serror`: | the structured error function
`ctx`: | the functions context

### xmlRelaxNGValidateDoc ()

    int	xmlRelaxNGValidateDoc		(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc)

Validate a document tree in memory.

`ctxt`: | a Relax-NG validation context
`doc`: | a parsed document tree
`Returns`: | 0 if the document is valid, a positive error code number otherwise and -1 in case of internal or API error.

### xmlRelaxNGValidateFullElement ()

    int	xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem)

Validate a full subtree when xmlRelaxNGValidatePushElement() returned 0 and the content of the node has been expanded.

`ctxt`: | the validation context
`doc`: | a document instance
`elem`: | an element instance
`Returns`: | 1 if no validation problem was found or -1 in case of error.

### xmlRelaxNGValidatePopElement ()

    int	xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem)

Pop the element end from the RelaxNG validation stack.

`ctxt`: | the RelaxNG validation context
`doc`: | a document instance
`elem`: | an element instance
`Returns`: | 1 if no validation problem was found or 0 otherwise

### xmlRelaxNGValidatePushCData ()

    int	xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
    					 const xmlChar * data,
    					 int len)

check the CData parsed for validation in the current stack

`ctxt`: | the RelaxNG validation context
`data`: | some character data read
`len`: | the lenght of the data
`Returns`: | 1 if no validation problem was found or -1 otherwise

### xmlRelaxNGValidatePushElement ()

    int	xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
    					 xmlDocPtr doc,
    					 xmlNodePtr elem)

Push a new element start on the RelaxNG validation stack.

`ctxt`: | the validation context
`doc`: | a document instance
`elem`: | an element instance
`Returns`: | 1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.

### xmlRelaxParserSetFlag ()

    int	xmlRelaxParserSetFlag		(xmlRelaxNGParserCtxtPtr ctxt,
    					 int flags)

Semi private function used to pass informations to a parser context which are a combination of xmlRelaxNGParserFlag .

`ctxt`: | a RelaxNG parser context
`flags`: | a set of flags values
`Returns`: | 0 if success and -1 in case of error