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

## 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)

DEPRECATED: This function will be made private. Call xmlCleanupParser to free global state but see the warnings there. xmlCleanupParser should be only called once at program exit. In most cases, you don't have call cleanup functions at all. 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 information

`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)

Initialize 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 Schema structure 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 information

`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 length 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 information 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