diff --git a/ChangeLog b/ChangeLog index 32c25f4b..31fbd80a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Fri Mar 7 19:29:40 CET 2003 Daniel Veillard + + * test/xsdtest/xsdtest.xml uri.c: after and exchange with James + Clark it appeared I had bug in URI parsing code ... + * relaxng.c include/libxml/relaxng.h: completely revamped error + reporting to not loose message from optional parts. + * xmllint.c: added timing for RNG validation steps + * result/relaxng/*: updated the result, all error messages changed + Fri Mar 7 15:18:32 CET 2003 Daniel Veillard * xpath.c: fix bug #107804, the algorithm used for document order diff --git a/include/libxml/relaxng.h b/include/libxml/relaxng.h index 788864d3..8add8220 100644 --- a/include/libxml/relaxng.h +++ b/include/libxml/relaxng.h @@ -27,6 +27,44 @@ typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr; typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt; typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr; +/* + * xmlRelaxNGValidErr: + * + * List of possible Relax NG validation errors + */ +typedef enum { + XML_RELAXNG_OK = 0, + XML_RELAXNG_ERR_MEMORY, + XML_RELAXNG_ERR_TYPE, + XML_RELAXNG_ERR_TYPEVAL, + XML_RELAXNG_ERR_TYPECMP, + XML_RELAXNG_ERR_NOSTATE, + XML_RELAXNG_ERR_NODEFINE, + XML_RELAXNG_ERR_LISTEXTRA, + XML_RELAXNG_ERR_INTERNODATA, + XML_RELAXNG_ERR_INTERSEQ, + XML_RELAXNG_ERR_INTEREXTRA, + XML_RELAXNG_ERR_ELEMNAME, + XML_RELAXNG_ERR_ELEMNONS, + XML_RELAXNG_ERR_ELEMWRONGNS, + XML_RELAXNG_ERR_ELEMEXTRANS, + XML_RELAXNG_ERR_ELEMNOTEMPTY, + XML_RELAXNG_ERR_NOELEM, + XML_RELAXNG_ERR_NOTELEM, + XML_RELAXNG_ERR_ATTRVALID, + XML_RELAXNG_ERR_CONTENTVALID, + XML_RELAXNG_ERR_EXTRACONTENT, + XML_RELAXNG_ERR_INVALIDATTR, + XML_RELAXNG_ERR_DATAELEM, + XML_RELAXNG_ERR_VALELEM, + XML_RELAXNG_ERR_LISTELEM, + XML_RELAXNG_ERR_DATATYPE, + XML_RELAXNG_ERR_VALUE, + XML_RELAXNG_ERR_LIST, + XML_RELAXNG_ERR_NOGRAMMAR, + XML_RELAXNG_ERR_EXTRADATA +} xmlRelaxNGValidErr; + /* * Interfaces for parsing. */ diff --git a/relaxng.c b/relaxng.c index 018c1c77..f8e0b9f9 100644 --- a/relaxng.c +++ b/relaxng.c @@ -46,7 +46,7 @@ static const xmlChar *xmlRelaxNGNs = (const xmlChar *) (xmlStrEqual(node->ns->href, xmlRelaxNGNs))) -/* #define DEBUG 1 */ /* very verbose output */ +/* #define DEBUG 1 */ /* very verbose output */ /* #define DEBUG_GRAMMAR 1 */ /* #define DEBUG_CONTENT 1 */ /* #define DEBUG_TYPE 1 */ @@ -159,12 +159,6 @@ struct _xmlRelaxNG { void *_private; /* unused by the library for users or bindings */ }; -typedef enum { - XML_RELAXNG_ERR_OK = 0, - XML_RELAXNG_ERR_NOROOT = 1, - XML_RELAXNG_ERR_ -} xmlRelaxNGValidError; - #define XML_RELAXNG_IN_ATTRIBUTE (1 << 0) #define XML_RELAXNG_IN_ONEORMORE (1 << 1) #define XML_RELAXNG_IN_LIST (1 << 2) @@ -180,7 +174,7 @@ struct _xmlRelaxNGParserCtxt { void *userData; /* user specific data block */ xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */ xmlRelaxNGValidityWarningFunc warning;/* the callback in case of warning */ - xmlRelaxNGValidError err; + xmlRelaxNGValidErr err; xmlRelaxNGPtr schema; /* The schema in use */ xmlRelaxNGGrammarPtr grammar; /* the current grammar */ @@ -265,6 +259,21 @@ struct _xmlRelaxNGValidState { xmlAttrPtr attrs[1]; /* the array of attributes */ }; +/** + * xmlRelaxNGValidError: + * + * A RelaxNGs validation error + */ +typedef struct _xmlRelaxNGValidError xmlRelaxNGValidError; +typedef xmlRelaxNGValidError *xmlRelaxNGValidErrorPtr; +struct _xmlRelaxNGValidError { + xmlRelaxNGValidErr err; /* the error number */ + xmlNodePtr node; /* the current node */ + xmlNodePtr seq; /* the current child */ + const xmlChar * arg1; /* first arg */ + const xmlChar * arg2; /* second arg */ +}; + /** * xmlRelaxNGValidCtxt: * @@ -281,6 +290,15 @@ struct _xmlRelaxNGValidCtxt { xmlRelaxNGValidStatePtr state; /* the current validation state */ int flags; /* validation flags */ int depth; /* validation depth */ + + /* + * Errors accumulated in branches may have to be stacked to be + * provided back when it's sure they affect validation. + */ + xmlRelaxNGValidErrorPtr err; /* Last error */ + int errNr; /* Depth of the error stack */ + int errMax; /* Max depth of the error stack */ + xmlRelaxNGValidErrorPtr errTab; /* stack of errors */ }; /** @@ -1138,6 +1156,82 @@ xmlRelaxNGLoadInclude(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar *URL, return(ret); } +/** + * xmlRelaxNGValidErrorPush: + * @ctxt: the validation context + * @err: the error code + * @arg1: the first string argument + * @arg2: the second string argument + * + * Pushes a new error on top of the error stack + * + * Returns 0 in case of error, the index in the stack otherwise + */ +static int +xmlRelaxNGValidErrorPush(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err, + const xmlChar *arg1, const xmlChar *arg2) +{ + xmlRelaxNGValidErrorPtr cur; + if (ctxt->errTab == NULL) { + ctxt->errMax = 8; + ctxt->errNr = 0; + ctxt->errTab = (xmlRelaxNGValidErrorPtr) xmlMalloc( + ctxt->errMax * sizeof(xmlRelaxNGValidError)); + if (ctxt->errTab == NULL) { + xmlGenericError(xmlGenericErrorContext, "malloc failed !\n"); + return (0); + } + } + if (ctxt->errNr >= ctxt->errMax) { + ctxt->errMax *= 2; + ctxt->errTab = + (xmlRelaxNGValidErrorPtr) xmlRealloc(ctxt->errTab, + ctxt->errMax * sizeof(xmlRelaxNGValidError)); + if (ctxt->errTab == NULL) { + xmlGenericError(xmlGenericErrorContext, "realloc failed !\n"); + return (0); + } + } + cur = &ctxt->errTab[ctxt->errNr]; + cur->err = err; + cur->arg1 = arg1; + cur->arg2 = arg2; + if (ctxt->state != NULL) { + cur->node = ctxt->state->node; + cur->seq = ctxt->state->seq; + } else { + cur->node = NULL; + cur->seq = NULL; + } + ctxt->err = cur; + return (ctxt->errNr++); +} + +/** + * xmlRelaxNGValidErrorPop: + * @ctxt: the validation context + * + * Pops the top error from the error stack + * + * Returns the error just removed + */ +static xmlRelaxNGValidErrorPtr +xmlRelaxNGValidErrorPop(xmlRelaxNGValidCtxtPtr ctxt) +{ + xmlRelaxNGValidErrorPtr ret; + + if (ctxt->errNr <= 0) + return (NULL); + ctxt->errNr--; + if (ctxt->errNr > 0) + ctxt->err = &ctxt->errTab[ctxt->errNr - 1]; + else + ctxt->err = NULL; + ret = &ctxt->errTab[ctxt->errNr]; + return (ret); +} + + /** * xmlRelaxNGDocumentPush: * @ctxt: the parser context @@ -1303,21 +1397,9 @@ xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar *URL, * * ************************************************************************/ -#define VALID_CTXT() \ - if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \ - xmlGenericError(xmlGenericErrorContext, \ - "error detected at %s:%d\n", \ - __FILE__, __LINE__); - -#define VALID_ERROR(a) \ - if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \ - if (ctxt->error != NULL) ctxt->error(ctxt->userData, a) -#define VALID_ERROR2(a, b) \ - if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \ - if (ctxt->error != NULL) ctxt->error(ctxt->userData, a, b) -#define VALID_ERROR3(a, b, c) \ - if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \ - if (ctxt->error != NULL) ctxt->error(ctxt->userData, a, b, c) +#define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL); +#define VALID_ERR2(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL); +#define VALID_ERR3(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c); #ifdef DEBUG static const char * @@ -1350,19 +1432,137 @@ xmlRelaxNGDefName(xmlRelaxNGDefinePtr def) { } #endif -#if 0 /** - * xmlRelaxNGErrorContext: - * @ctxt: the parsing context - * @schema: the schema being built - * @node: the node being processed - * @child: the child being processed + * xmlRelaxNGGetErrorString: + * @err: the error code + * @arg1: the first string argument + * @arg2: the second string argument * - * Dump a RelaxNGType structure + * computes a formatted error string for the given error code and args + * + * Returns the error string, it must be deallocated by the caller + */ +static xmlChar * +xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar *arg1, + const xmlChar *arg2) { + char msg[1000]; + + if (arg1 == NULL) + arg1 = BAD_CAST ""; + if (arg2 == NULL) + arg2 = BAD_CAST ""; + + msg[0] = 0; + switch (err) { + case XML_RELAXNG_OK: + return(NULL); + case XML_RELAXNG_ERR_MEMORY: + return(xmlCharStrdup("out of memory")); + case XML_RELAXNG_ERR_TYPE: + snprintf(msg, 1000, "failed to validate type %s", arg1); + break; + case XML_RELAXNG_ERR_TYPEVAL: + snprintf(msg, 1000, "Type %s doesn't allow value %s", arg1, arg2); + break; + case XML_RELAXNG_ERR_TYPECMP: + snprintf(msg, 1000, "failed to compare type %s", arg1); + break; + case XML_RELAXNG_ERR_NOSTATE: + return(xmlCharStrdup("Internal error: no state")); + case XML_RELAXNG_ERR_NODEFINE: + return(xmlCharStrdup("Internal error: no define")); + case XML_RELAXNG_ERR_LISTEXTRA: + snprintf(msg, 1000, "Extra data in list: %s", arg1); + break; + case XML_RELAXNG_ERR_INTERNODATA: + return(xmlCharStrdup("Internal: interleave block has no data")); + case XML_RELAXNG_ERR_INTERSEQ: + return(xmlCharStrdup("Invalid sequence in interleave")); + case XML_RELAXNG_ERR_INTEREXTRA: + snprintf(msg, 1000, "Extra element %s in interleave", arg1); + break; + case XML_RELAXNG_ERR_ELEMNAME: + snprintf(msg, 1000, "Expecting element %s, got %s", arg1, arg2); + break; + case XML_RELAXNG_ERR_ELEMNONS: + snprintf(msg, 1000, "Expecting a namespace for element %s", arg1); + break; + case XML_RELAXNG_ERR_ELEMWRONGNS: + snprintf(msg, 1000, "Element %s has wrong namespace: expecting %s", + arg1, arg2); + break; + case XML_RELAXNG_ERR_ELEMEXTRANS: + snprintf(msg, 1000, "Expecting no namespace for element %s", arg1); + break; + case XML_RELAXNG_ERR_ELEMNOTEMPTY: + snprintf(msg, 1000, "Expecting element %s to be empty", arg1); + break; + case XML_RELAXNG_ERR_NOELEM: + snprintf(msg, 1000, "Expecting an element %s, got nothing", arg1); + break; + case XML_RELAXNG_ERR_NOTELEM: + return(xmlCharStrdup("Expecting an element got text")); + case XML_RELAXNG_ERR_ATTRVALID: + snprintf(msg, 1000, "Element %s failed to validate attributes", + arg1); + break; + case XML_RELAXNG_ERR_CONTENTVALID: + snprintf(msg, 1000, "Element %s failed to validate content", + arg1); + break; + case XML_RELAXNG_ERR_EXTRACONTENT: + snprintf(msg, 1000, "Element %s has extra content: %s", + arg1, arg2); + break; + case XML_RELAXNG_ERR_INVALIDATTR: + snprintf(msg, 1000, "Invalid attribute %s for element %s", + arg1, arg2); + break; + case XML_RELAXNG_ERR_DATAELEM: + snprintf(msg, 1000, "Datatype element %s has child elements", + arg1); + break; + case XML_RELAXNG_ERR_VALELEM: + snprintf(msg, 1000, "Value element %s has child elements", + arg1); + break; + case XML_RELAXNG_ERR_LISTELEM: + snprintf(msg, 1000, "List element %s has child elements", + arg1); + break; + case XML_RELAXNG_ERR_DATATYPE: + snprintf(msg, 1000, "Error validating datatype %s", + arg1); + break; + case XML_RELAXNG_ERR_VALUE: + snprintf(msg, 1000, "Error validating value %s", + arg1); + break; + case XML_RELAXNG_ERR_LIST: + return(xmlCharStrdup("Error validating list")); + case XML_RELAXNG_ERR_NOGRAMMAR: + return(xmlCharStrdup("No top grammar defined")); + case XML_RELAXNG_ERR_EXTRADATA: + return(xmlCharStrdup("Extra data in the document")); + } + if (msg[0] == 0) { + snprintf(msg, 1000, "Unknown error code %d", err); + } + msg[1000] = 0; + return(xmlStrdup((xmlChar *) msg)); +} + +/** + * xmlRelaxNGValidErrorContext: + * @ctxt: the validation context + * @node: the node + * @child: the node child generating the problem. + * + * Dump informations about the kocation of the error in the instance */ static void -xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema, - xmlNodePtr node, xmlNodePtr child) +xmlRelaxNGValidErrorContext(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, + xmlNodePtr child) { int line = 0; const xmlChar *file = NULL; @@ -1401,10 +1601,7 @@ xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema, } } - if (ctxt != NULL) - type = "compilation error"; - else if (schema != NULL) - type = "runtime error"; + type = "RNG validity error"; if ((file != NULL) && (line != 0) && (name != NULL)) ctxt->error(ctxt->userData, "%s: file %s line %d element %s\n", @@ -1421,7 +1618,99 @@ xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema, else ctxt->error(ctxt->userData, "%s\n", type); } -#endif + +/** + * xmlRelaxNGShowValidError: + * @ctxt: the validation context + * @err: the error number + * @node: the node + * @child: the node child generating the problem. + * @arg1: the first argument + * @arg2: the second argument + * + * Show a validation error. + */ +static void +xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err, + xmlNodePtr node, xmlNodePtr child, + const xmlChar *arg1, const xmlChar *arg2) +{ + xmlChar *msg; + + if (ctxt->error == NULL) + return; + + msg = xmlRelaxNGGetErrorString(err, arg1, arg2); + if (msg == NULL) + return; + + xmlRelaxNGValidErrorContext(ctxt, node, child); + ctxt->error(ctxt->userData, "%s\n", msg); + xmlFree(msg); +} + +/** + * xmlRelaxNGDumpValidError: + * @ctxt: the validation context + * + * Show all validation error over a given index. + */ +static void +xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt) { + int i; + xmlRelaxNGValidErrorPtr err; + + for (i = 0;i < ctxt->errNr;i++) { + err = &ctxt->errTab[i]; + xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq, + err->arg1, err->arg2); + } + ctxt->errNr = 0; +} +/** + * xmlRelaxNGAddValidError: + * @ctxt: the validation context + * @err: the error number + * @arg1: the first argument + * @arg2: the second argument + * + * Register a validation error, either generating it if it's sure + * or stacking it for later handling if unsure. + */ +static void +xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err, + const xmlChar *arg1, const xmlChar *arg2) +{ + if ((ctxt == NULL) || (ctxt->error == NULL)) + return; + + /* + * generate the error directly + */ + if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) { + xmlNodePtr node, seq; + /* + * Flush first any stacked error which might be the + * real cause of the problem. + */ + if (ctxt->errNr != 0) + xmlRelaxNGDumpValidError(ctxt); + if (ctxt->state != NULL) { + node = ctxt->state->node; + seq = ctxt->state->seq; + } else { + node = seq = NULL; + } + xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2); + } + /* + * Stack the error for later processing if needed + */ + else { + xmlRelaxNGValidErrorPush(ctxt, err, arg1, arg2); + } +} + /************************************************************************ * * @@ -1509,7 +1798,7 @@ xmlRelaxNGSchemaTypeCheck(void *data ATTRIBUTE_UNUSED, * Returns 1 if yes, 0 if no and -1 in case of error. */ static int -xmlRelaxNGSchemaFacetCheck (void *data, const xmlChar *type, +xmlRelaxNGSchemaFacetCheck (void *data ATTRIBUTE_UNUSED, const xmlChar *type, const xmlChar *facetname, const xmlChar *val, const xmlChar *strval, void *value) { xmlSchemaFacetPtr facet; @@ -2193,6 +2482,8 @@ xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1, xmlRelaxNGValidCtxt ctxt; ctxt.flags = FLAGS_IGNORABLE; + memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt)); + if ((def1->type == XML_RELAXNG_ELEMENT) || (def1->type == XML_RELAXNG_ATTRIBUTE)) { if (def2->type == XML_RELAXNG_TEXT) @@ -5899,8 +6190,7 @@ xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar *str) { ret = (xmlChar *) xmlMalloc((len + 1) * sizeof(xmlChar)); if (ret == NULL) { if (ctxt != NULL) { - VALID_CTXT(); - VALID_ERROR("xmlRelaxNGNormalize: out of memory\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); } else { xmlGenericError(xmlGenericErrorContext, "xmlRelaxNGNormalize: out of memory\n"); @@ -5954,16 +6244,14 @@ xmlRelaxNGValidateDatatype(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar *value, } else ret = -1; if (ret < 0) { - VALID_CTXT(); - VALID_ERROR2("failed to validate type %s\n", define->name); + VALID_ERR2(XML_RELAXNG_ERR_TYPE, define->name); if ((result != NULL) && (lib != NULL) && (lib->freef != NULL)) lib->freef(lib->data, result); return(-1); } else if (ret == 1) { ret = 0; } else { - VALID_CTXT(); - VALID_ERROR3("Type %s doesn't allow value %s\n", define->name, value); + VALID_ERR3(XML_RELAXNG_ERR_TYPEVAL, define->name, value); ret = -1; } cur = define->attrs; @@ -6084,9 +6372,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt, else ret = -1; if (ret < 0) { - VALID_CTXT(); - VALID_ERROR2("Internal: failed to compare type %s\n", - define->name); + VALID_ERR2(XML_RELAXNG_ERR_TYPECMP, define->name); return(-1); } else if (ret == 1) { ret = 0; @@ -6140,6 +6426,12 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt, list = list->next; } ctxt->flags = oldflags; + if (ret != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + xmlRelaxNGDumpValidError(ctxt); + } else { + ctxt->errNr = 0; + } if (ret == 0) xmlRelaxNGNextValue(ctxt); break; @@ -6159,8 +6451,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt, val = xmlStrdup(BAD_CAST ""); } if (val == NULL) { - VALID_CTXT(); - VALID_ERROR("Internal: no state\n"); + VALID_ERR(XML_RELAXNG_ERR_NOSTATE); return(-1); } cur = val; @@ -6207,8 +6498,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt, if ((ret == 0) && (ctxt->state->value != NULL) && (ctxt->state->value != ctxt->state->endvalue)) { - VALID_CTXT(); - VALID_ERROR2("Extra data in list: %s\n", ctxt->state->value); + VALID_ERR2(XML_RELAXNG_ERR_LISTEXTRA, ctxt->state->value); ret = -1; } xmlFree(val); @@ -6241,6 +6531,12 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt, cur = ctxt->state->value; } ctxt->flags = oldflags; + if (ret != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + xmlRelaxNGDumpValidError(ctxt); + } else { + ctxt->errNr = 0; + } break; } case XML_RELAXNG_EXCEPT: { @@ -6538,6 +6834,8 @@ static int xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGDefinePtr define) { int ret = 0, i, nbgroups, left; + int errNr = ctxt->errNr; + xmlRelaxNGPartitionPtr partitions; xmlRelaxNGInterleaveGroupPtr group = NULL; xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem; @@ -6548,8 +6846,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, nbgroups = partitions->nbgroups; left = nbgroups; } else { - VALID_CTXT(); - VALID_ERROR("Internal: interleave block has no data\n"); + VALID_ERR(XML_RELAXNG_ERR_INTERNODATA); return(-1); } @@ -6559,15 +6856,13 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, */ list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr)); if (list == NULL) { - VALID_CTXT(); - VALID_ERROR("Internal: out of memory in interleave check\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); return(-1); } memset(list, 0, nbgroups * sizeof(xmlNodePtr)); lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr)); if (lasts == NULL) { - VALID_CTXT(); - VALID_ERROR("Internal: out of memory in interleave check\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); return(-1); } memset(lasts, 0, nbgroups * sizeof(xmlNodePtr)); @@ -6608,8 +6903,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, cur = xmlRelaxNGSkipIgnored(ctxt, cur->next); } if (ret != 0) { - VALID_CTXT(); - VALID_ERROR("Invalid sequence in interleave\n"); + VALID_ERR(XML_RELAXNG_ERR_INTERSEQ); ret = -1; goto done; } @@ -6627,8 +6921,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, cur = ctxt->state->seq; cur = xmlRelaxNGSkipIgnored(ctxt, cur); if (cur != NULL) { - VALID_CTXT(); - VALID_ERROR2("Extra element %s in interleave\n", cur->name); + VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name); ret = -1; goto done; } @@ -6638,8 +6931,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, } ctxt->state->seq = lastelem; if (ret != 0) { - VALID_CTXT(); - VALID_ERROR("Invalid sequence in interleave\n"); + VALID_ERR(XML_RELAXNG_ERR_INTERSEQ); ret = -1; goto done; } @@ -6655,6 +6947,9 @@ done: cur->prev->next = cur; cur = cur->prev; } + if (ret == 0) { + ctxt->errNr = errNr; + } xmlFree(list); xmlFree(lasts); @@ -6676,8 +6971,7 @@ xmlRelaxNGValidateElementContent(xmlRelaxNGValidCtxtPtr ctxt, int ret = 0, res; if (ctxt->state == NULL) { - VALID_CTXT(); - VALID_ERROR("Internal: no state\n"); + VALID_ERR(XML_RELAXNG_ERR_NOSTATE); return(-1); } while (defines != NULL) { @@ -6708,33 +7002,27 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt, if (define->name != NULL) { if (!xmlStrEqual(elem->name, define->name)) { - VALID_CTXT(); - VALID_ERROR3("Expecting element %s, got %s\n", - define->name, elem->name); + VALID_ERR3(XML_RELAXNG_ERR_ELEMNAME, define->name, elem->name); return(0); } } if ((define->ns != NULL) && (define->ns[0] != 0)) { if (elem->ns == NULL) { - VALID_CTXT(); - VALID_ERROR2("Expecting a namespace for element %s\n", + VALID_ERR2(XML_RELAXNG_ERR_ELEMNONS, elem->name); return(0); } else if (!xmlStrEqual(elem->ns->href, define->ns)) { - VALID_CTXT(); - VALID_ERROR3("Expecting element %s has wrong namespace: expecting %s\n", + VALID_ERR3(XML_RELAXNG_ERR_ELEMWRONGNS, elem->name, define->ns); return(0); } } else if ((elem->ns != NULL) && (define->ns != NULL) && (define->name == NULL)) { - VALID_CTXT(); - VALID_ERROR2("Expecting no namespace for element %s\n", - define->name); + VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, + elem->name); return(0); } else if ((elem->ns != NULL) && (define->name != NULL)) { - VALID_CTXT(); - VALID_ERROR2("Expecting no namespace for element %s\n", + VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, define->name); return(0); } @@ -6765,6 +7053,7 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt, ctxt->flags = oldflags; } else if (define->type == XML_RELAXNG_CHOICE) { xmlRelaxNGDefinePtr list; + oldflags = ctxt->flags; ctxt->flags |= FLAGS_IGNORABLE; @@ -6781,6 +7070,12 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt, } list = list->next; } + if (ret != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + xmlRelaxNGDumpValidError(ctxt); + } else { + ctxt->errNr = 0; + } ret = 0; ctxt->flags = oldflags; } else { @@ -6807,8 +7102,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidStatePtr oldstate, state; if (define == NULL) { - VALID_CTXT(); - VALID_ERROR("internal error: define == NULL\n"); + VALID_ERR(XML_RELAXNG_ERR_NODEFINE); return(-1); } if (ctxt->state != NULL) { @@ -6833,8 +7127,8 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, case XML_RELAXNG_EMPTY: node = xmlRelaxNGSkipIgnored(ctxt, node); if (node != NULL) { - VALID_CTXT(); - VALID_ERROR("Expecting an empty element\n"); + VALID_ERR2(XML_RELAXNG_ERR_ELEMNOTEMPTY, + ctxt->state->node->name); ret = -1; break; } @@ -6844,38 +7138,23 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, ret = -1; break; case XML_RELAXNG_TEXT: -#if 0 - if (node == NULL) { - ret = 0; - break; - } -#endif while ((node != NULL) && ((node->type == XML_TEXT_NODE) || (node->type == XML_COMMENT_NODE) || (node->type == XML_PI_NODE) || (node->type == XML_CDATA_SECTION_NODE))) node = node->next; -#if 0 - if (node == ctxt->state->seq) { - VALID_CTXT(); - VALID_ERROR("Expecting text content\n"); - ret = -1; - } -#endif ctxt->state->seq = node; break; case XML_RELAXNG_ELEMENT: node = xmlRelaxNGSkipIgnored(ctxt, node); if (node == NULL) { - VALID_CTXT(); - VALID_ERROR("Expecting an element, got empty\n"); + VALID_ERR2(XML_RELAXNG_ERR_NOELEM, define->name); ret = -1; break; } if (node->type != XML_ELEMENT_NODE) { - VALID_CTXT(); - VALID_ERROR2("Expecting an element got %d type\n", node->type); + VALID_ERR(XML_RELAXNG_ERR_NOTELEM); ret = -1; break; } @@ -6894,6 +7173,16 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, break; } ret = 0; + if (ctxt->errNr != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + ctxt->errNr = 0; + else { + while ((ctxt->err != NULL) && + (ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME) && + (xmlStrEqual(ctxt->err->arg2, node->name))) + xmlRelaxNGValidErrorPop(ctxt); + } + } state = xmlRelaxNGNewValidState(ctxt, node); if (state == NULL) { @@ -6907,43 +7196,28 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs); if (tmp != 0) { ret = -1; -#ifdef DEBUG - xmlGenericError(xmlGenericErrorContext, - "E: Element %s failed to validate attributes\n", - node->name); -#endif + VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name); } } if (define->content != NULL) { tmp = xmlRelaxNGValidateElementContent(ctxt, define->content); if (tmp != 0) { ret = -1; -#ifdef DEBUG - xmlGenericError(xmlGenericErrorContext, - "E: Element %s failed to validate element content\n", - node->name); -#endif + VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID, node->name); } } state = ctxt->state; if (state->seq != NULL) { state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq); if (state->seq != NULL) { - VALID_CTXT(); - VALID_ERROR3("Extra content for element %s: %s\n", + VALID_ERR3(XML_RELAXNG_ERR_EXTRACONTENT, node->name, state->seq->name); ret = -1; -#ifdef DEBUG - xmlGenericError(xmlGenericErrorContext, - "E: Element %s has extra content: %s\n", - node->name, state->seq->name); -#endif } } for (i = 0;i < state->nbAttrs;i++) { if (state->attrs[i] != NULL) { - VALID_CTXT(); - VALID_ERROR3("Invalid attribute %s for element %s\n", + VALID_ERR3(XML_RELAXNG_ERR_INVALIDATTR, state->attrs[i]->name, node->name); ret = -1; } @@ -6952,8 +7226,9 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGFreeValidState(state); if (oldstate != NULL) oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next); - if (ret == 0) + if (ret == 0) { node->_private = define; + } #ifdef DEBUG @@ -6972,7 +7247,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, oldstate->seq->name, oldstate->seq->type); #endif break; - case XML_RELAXNG_OPTIONAL: + case XML_RELAXNG_OPTIONAL: { oldflags = ctxt->flags; ctxt->flags |= FLAGS_IGNORABLE; oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state); @@ -6980,13 +7255,16 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, if (ret != 0) { xmlRelaxNGFreeValidState(ctxt->state); ctxt->state = oldstate; + ctxt->flags = oldflags; ret = 0; break; } xmlRelaxNGFreeValidState(oldstate); ctxt->flags = oldflags; ret = 0; + ctxt->errNr = 0; break; + } case XML_RELAXNG_ONEORMORE: ret = xmlRelaxNGValidateDefinition(ctxt, define->content); if (ret != 0) { @@ -7029,6 +7307,9 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, } } ctxt->flags = oldflags; + if (ret == 0) { + ctxt->errNr = 0; + } ret = 0; break; } @@ -7061,6 +7342,12 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, ctxt->flags = oldflags; if (success == 1) ret = 0; + if (ret != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + xmlRelaxNGDumpValidError(ctxt); + } else if ((ctxt->flags & FLAGS_IGNORABLE) == 0) { + ctxt->errNr = 0; + } break; } case XML_RELAXNG_DEF: @@ -7094,8 +7381,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, child = node; while (child != NULL) { if (child->type == XML_ELEMENT_NODE) { - VALID_CTXT(); - VALID_ERROR2("Element %s has child elements\n", + VALID_ERR2(XML_RELAXNG_ERR_DATAELEM, node->parent->name); ret = -1; break; @@ -7114,16 +7400,14 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, if (content == NULL) { content = xmlStrdup(BAD_CAST ""); if (content == NULL) { - VALID_CTXT(); - VALID_ERROR("Allocation failure\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); ret = -1; break; } } ret = xmlRelaxNGValidateDatatype(ctxt, content, define); if (ret == -1) { - VALID_CTXT(); - VALID_ERROR2("Error validating %s\n", define->name); + VALID_ERR2(XML_RELAXNG_ERR_DATATYPE, define->name); } else if (ret == 0) { ctxt->state->seq = NULL; } @@ -7139,8 +7423,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, child = node; while (child != NULL) { if (child->type == XML_ELEMENT_NODE) { - VALID_CTXT(); - VALID_ERROR2("Element %s has child elements\n", + VALID_ERR2(XML_RELAXNG_ERR_VALELEM, node->parent->name); ret = -1; break; @@ -7159,8 +7442,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, if (content == NULL) { content = xmlStrdup(BAD_CAST ""); if (content == NULL) { - VALID_CTXT(); - VALID_ERROR("Allocation failure\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); ret = -1; break; } @@ -7170,12 +7452,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, ret = xmlRelaxNGValidateValue(ctxt, define); ctxt->state->value = oldvalue; if (ret == -1) { - VALID_CTXT(); - if (define->name != NULL) { - VALID_ERROR2("error validating value %s\n", define->name); - } else { - VALID_ERROR("error validating value\n"); - } + VALID_ERR2(XML_RELAXNG_ERR_VALUE, define->name); } else if (ret == 0) { ctxt->state->seq = NULL; } @@ -7197,8 +7474,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, child = node; while (child != NULL) { if (child->type == XML_ELEMENT_NODE) { - VALID_CTXT(); - VALID_ERROR2("Element %s has child elements\n", + VALID_ERR2(XML_RELAXNG_ERR_LISTELEM, node->parent->name); ret = -1; break; @@ -7217,8 +7493,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, if (content == NULL) { content = xmlStrdup(BAD_CAST ""); if (content == NULL) { - VALID_CTXT(); - VALID_ERROR("Allocation failure\n"); + VALID_ERR(XML_RELAXNG_ERR_MEMORY); ret = -1; break; } @@ -7232,8 +7507,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt, ctxt->state->value = oldvalue; ctxt->state->endvalue = oldendvalue; if (ret == -1) { - VALID_CTXT(); - VALID_ERROR("error validating list\n"); + VALID_ERR(XML_RELAXNG_ERR_LIST); } else if ((ret == 0) && (node != NULL)) { ctxt->state->seq = node->next; } @@ -7286,8 +7560,7 @@ xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc) { schema = ctxt->schema; grammar = schema->topgrammar; if (grammar == NULL) { - VALID_CTXT(); - VALID_ERROR("No top grammar defined\n"); + VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR); return(-1); } state = xmlRelaxNGNewValidState(ctxt, NULL); @@ -7300,8 +7573,7 @@ xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc) { node = state->seq; node = xmlRelaxNGSkipIgnored(ctxt, node); if (node != NULL) { - VALID_CTXT(); - VALID_ERROR("extra data on the document\n"); + VALID_ERR(XML_RELAXNG_ERR_EXTRADATA); ret = -1; } } @@ -7337,6 +7609,10 @@ xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema) { ret->schema = schema; ret->error = xmlGenericError; ret->userData = xmlGenericErrorContext; + ret->errNr = 0; + ret->errMax = 0; + ret->err = NULL; + ret->errTab = NULL; return (ret); } @@ -7350,6 +7626,8 @@ void xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt) { if (ctxt == NULL) return; + if (ctxt->errTab != NULL) + xmlFree(ctxt->errTab); xmlFree(ctxt); } diff --git a/result/relaxng/spec1_err b/result/relaxng/spec1_err index d3a5dd60..e3b2ee88 100644 --- a/result/relaxng/spec1_err +++ b/result/relaxng/spec1_err @@ -1,2 +1,82 @@ -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element element, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element attribute, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element group, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element interleave, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element choice, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element optional, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element zeroOrMore, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element oneOrMore, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element list, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element mixed, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element ref, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element parentRef, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element empty, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element text, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element value, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element data, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element notAllowed, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element externalRef, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting an element grammar, got nothing +RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation +Element element failed to validate content +RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation +Element element has extra content: documentation +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element attribute, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element group, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element interleave, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element choice, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element optional, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element zeroOrMore, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element oneOrMore, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element list, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element mixed, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element ref, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element parentRef, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element empty, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element text, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element value, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element data, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element notAllowed, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element externalRef, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Expecting element grammar, got element +RNG validity error: file ./test/relaxng/spec1.rng line 6 element element +Extra data in the document diff --git a/result/relaxng/tutor10_1_4.err b/result/relaxng/tutor10_1_4.err index 820cf4bd..adee0071 100644 --- a/result/relaxng/tutor10_1_4.err +++ b/result/relaxng/tutor10_1_4.err @@ -1,4 +1,4 @@ -error detected at relaxng.c:6557 +RNG validity error: file ./test/relaxng/tutor10_1_4.xml line 1 element foo Expecting a namespace for element foo -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor10_1_4.xml line 1 element foo +Extra data in the document diff --git a/result/relaxng/tutor10_1_5.err b/result/relaxng/tutor10_1_5.err index ea698c7c..a985d4d3 100644 --- a/result/relaxng/tutor10_1_5.err +++ b/result/relaxng/tutor10_1_5.err @@ -1,4 +1,4 @@ -error detected at relaxng.c:6562 -Expecting element foo has wrong namespace: expecting http://www.example.com -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor10_1_5.xml line 1 element foo +Element foo has wrong namespace: expecting http://www.example.com +RNG validity error: file ./test/relaxng/tutor10_1_5.xml line 1 element foo +Extra data in the document diff --git a/result/relaxng/tutor10_1_6.err b/result/relaxng/tutor10_1_6.err index ea698c7c..e6c640d3 100644 --- a/result/relaxng/tutor10_1_6.err +++ b/result/relaxng/tutor10_1_6.err @@ -1,4 +1,4 @@ -error detected at relaxng.c:6562 -Expecting element foo has wrong namespace: expecting http://www.example.com -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor10_1_6.xml line 1 element foo +Element foo has wrong namespace: expecting http://www.example.com +RNG validity error: file ./test/relaxng/tutor10_1_6.xml line 1 element foo +Extra data in the document diff --git a/result/relaxng/tutor10_2_3.err b/result/relaxng/tutor10_2_3.err index 2064874b..90c19cdf 100644 --- a/result/relaxng/tutor10_2_3.err +++ b/result/relaxng/tutor10_2_3.err @@ -1,4 +1,4 @@ -error detected at relaxng.c:6574 +RNG validity error: file ./test/relaxng/tutor10_2_3.xml line 1 element foo Expecting no namespace for element foo -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor10_2_3.xml line 1 element foo +Extra data in the document diff --git a/result/relaxng/tutor10_2_4.err b/result/relaxng/tutor10_2_4.err index 2064874b..6872bea3 100644 --- a/result/relaxng/tutor10_2_4.err +++ b/result/relaxng/tutor10_2_4.err @@ -1,4 +1,4 @@ -error detected at relaxng.c:6574 +RNG validity error: file ./test/relaxng/tutor10_2_4.xml line 1 element foo Expecting no namespace for element foo -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor10_2_4.xml line 1 element foo +Extra data in the document diff --git a/result/relaxng/tutor10_7_3.err b/result/relaxng/tutor10_7_3.err index 34c0ef1c..85544c39 100644 --- a/result/relaxng/tutor10_7_3.err +++ b/result/relaxng/tutor10_7_3.err @@ -1,2 +1,8 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card +Element card failed to validate attributes +RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card +Invalid attribute name for element card +RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card +Invalid attribute email for element card +RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor10_8_3.err b/result/relaxng/tutor10_8_3.err index 34c0ef1c..3b712f35 100644 --- a/result/relaxng/tutor10_8_3.err +++ b/result/relaxng/tutor10_8_3.err @@ -1,2 +1,8 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card +Element card failed to validate attributes +RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card +Invalid attribute name for element card +RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card +Invalid attribute email for element card +RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor11_2_2.err b/result/relaxng/tutor11_2_2.err index 8d7fe33f..03d2edce 100644 --- a/result/relaxng/tutor11_2_2.err +++ b/result/relaxng/tutor11_2_2.err @@ -1,2 +1,2 @@ -error detected at relaxng.c:6783 +RNG validity error: file ./test/relaxng/tutor11_2_2.xml line 3 element card Invalid attribute foo for element card diff --git a/result/relaxng/tutor11_2_3.err b/result/relaxng/tutor11_2_3.err index 5a7b74a2..fed4d2dd 100644 --- a/result/relaxng/tutor11_2_3.err +++ b/result/relaxng/tutor11_2_3.err @@ -1,2 +1,2 @@ -error detected at relaxng.c:6783 +RNG validity error: file ./test/relaxng/tutor11_2_3.xml line 3 element card Invalid attribute b for element card diff --git a/result/relaxng/tutor12_1_err b/result/relaxng/tutor12_1_err index d3a5dd60..2cdc5e1a 100644 --- a/result/relaxng/tutor12_1_err +++ b/result/relaxng/tutor12_1_err @@ -1,2 +1,150 @@ -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element element, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element attribute, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element group, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element interleave, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element choice, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element optional, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element zeroOrMore, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element oneOrMore, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element list, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element mixed, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element ref, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element parentRef, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element empty, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element text, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element value, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element data, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element notAllowed, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element externalRef, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting an element grammar, got nothing +RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation +Element element failed to validate content +RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation +Element element has extra content: documentation +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element attribute, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element group, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element interleave, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element choice, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element optional, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element zeroOrMore, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element oneOrMore, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element list, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element mixed, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element ref, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element parentRef, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element empty, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element text, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element value, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element data, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element notAllowed, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element externalRef, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element +Expecting element grammar, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Element zeroOrMore failed to validate content +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element oneOrMore, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element list, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element mixed, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element ref, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element parentRef, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element empty, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element text, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element value, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element data, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element notAllowed, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element externalRef, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore +Expecting element grammar, got zeroOrMore +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Element element failed to validate content +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element attribute, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element group, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element interleave, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element choice, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element optional, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element zeroOrMore, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element oneOrMore, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element list, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element mixed, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element ref, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element parentRef, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element empty, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element text, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element value, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element data, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element notAllowed, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element externalRef, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Expecting element grammar, got element +RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element +Extra data in the document diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err index 5b495ea5..615cb87d 100644 --- a/result/relaxng/tutor3_2_1.err +++ b/result/relaxng/tutor3_2_1.err @@ -1,4 +1,6 @@ -error detected at relaxng.c:6549 +RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email Expecting element name, got email -error detected at relaxng.c:6770 -Extra content for element card: email +RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email +Element card failed to validate content +RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email +Element card has extra content: email diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err index 34c0ef1c..42743a27 100644 --- a/result/relaxng/tutor3_5_2.err +++ b/result/relaxng/tutor3_5_2.err @@ -1,2 +1,6 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element name +Element card failed to validate content +RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element name +Element card has extra content: name +RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor3_7_err b/result/relaxng/tutor3_7_err index d3a5dd60..89b14002 100644 --- a/result/relaxng/tutor3_7_err +++ b/result/relaxng/tutor3_7_err @@ -1,2 +1,80 @@ -error detected at relaxng.c:7141 -extra data on the document +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element element, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element attribute, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element group, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element interleave, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element choice, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element optional, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element zeroOrMore, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element oneOrMore, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element list, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element mixed, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element ref, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element parentRef, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element empty, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element text, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element value, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element data, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element notAllowed, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element externalRef, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting an element grammar, got nothing +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Element element failed to validate content +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element attribute, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element group, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element interleave, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element choice, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element optional, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element zeroOrMore, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element oneOrMore, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element list, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element mixed, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element ref, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element parentRef, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element empty, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element text, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element value, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element data, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element notAllowed, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element externalRef, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Expecting element grammar, got element +RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element +Extra data in the document diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err index d05cfe9c..fa446379 100644 --- a/result/relaxng/tutor6_1_3.err +++ b/result/relaxng/tutor6_1_3.err @@ -1,2 +1,4 @@ -error detected at relaxng.c:6783 +RNG validity error: file ./test/relaxng/tutor6_1_3.xml line 1 element card +Element card failed to validate attributes +RNG validity error: file ./test/relaxng/tutor6_1_3.xml line 1 element card Invalid attribute preferredFormat for element card diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err index 1de98825..17a825d8 100644 --- a/result/relaxng/tutor6_2_4.err +++ b/result/relaxng/tutor6_2_4.err @@ -1,2 +1,10 @@ -error detected at relaxng.c:6770 -Extra content for element preferredFormat: text +RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text +Error validating value +RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text +Error validating value +RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text +Element preferredFormat failed to validate content +RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text +Element preferredFormat has extra content: text +RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 1 element card +Element card failed to validate content diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err index d05cfe9c..64b75e28 100644 --- a/result/relaxng/tutor6_3_1.err +++ b/result/relaxng/tutor6_3_1.err @@ -1,2 +1,4 @@ -error detected at relaxng.c:6783 +RNG validity error: file ./test/relaxng/tutor6_3_1.xml line 1 element card +Element card failed to validate attributes +RNG validity error: file ./test/relaxng/tutor6_3_1.xml line 1 element card Invalid attribute preferredFormat for element card diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err index f3cddfdb..9b16493f 100644 --- a/result/relaxng/tutor7_1_2.err +++ b/result/relaxng/tutor7_1_2.err @@ -1,6 +1,8 @@ -error detected at relaxng.c:5813 -Internal: failed to validate type float -error detected at relaxng.c:7073 -error validating list -error detected at relaxng.c:6770 -Extra content for element vector: text +RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text +failed to validate type float +RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text +Error validating list +RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text +Element vector failed to validate content +RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text +Element vector has extra content: text diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err index 36806108..b6ec7511 100644 --- a/result/relaxng/tutor7_1_3.err +++ b/result/relaxng/tutor7_1_3.err @@ -1,6 +1,8 @@ -error detected at relaxng.c:6053 +RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text Extra data in list: 5.6 -error detected at relaxng.c:7073 -error validating list -error detected at relaxng.c:6770 -Extra content for element vector: text +RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text +Error validating list +RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text +Element vector failed to validate content +RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text +Element vector has extra content: text diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err index 0350cda4..bf3b777a 100644 --- a/result/relaxng/tutor7_2_4.err +++ b/result/relaxng/tutor7_2_4.err @@ -1,4 +1,6 @@ -error detected at relaxng.c:5813 -Internal: failed to validate type double -error detected at relaxng.c:7073 -error validating list +RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector +failed to validate type double +RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector +Error validating list +RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector +Element vector failed to validate content diff --git a/result/relaxng/tutor7_3_4.err b/result/relaxng/tutor7_3_4.err index 8ab033d7..852837a8 100644 --- a/result/relaxng/tutor7_3_4.err +++ b/result/relaxng/tutor7_3_4.err @@ -1,6 +1,8 @@ -error detected at relaxng.c:6053 +RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text Extra data in list: 5.6 -error detected at relaxng.c:7073 -error validating list -error detected at relaxng.c:6770 -Extra content for element path: text +RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text +Error validating list +RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text +Element path failed to validate content +RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text +Element path has extra content: text diff --git a/result/relaxng/tutor7_3_5.err b/result/relaxng/tutor7_3_5.err index d67a740e..473c58bb 100644 --- a/result/relaxng/tutor7_3_5.err +++ b/result/relaxng/tutor7_3_5.err @@ -1,6 +1,8 @@ -error detected at relaxng.c:5813 -Internal: failed to validate type double -error detected at relaxng.c:7073 -error validating list -error detected at relaxng.c:6770 -Extra content for element path: text +RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text +failed to validate type double +RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text +Error validating list +RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text +Element path failed to validate content +RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text +Element path has extra content: text diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err index f5f7037e..2a1364dd 100644 --- a/result/relaxng/tutor8_2_4.err +++ b/result/relaxng/tutor8_2_4.err @@ -1,4 +1,6 @@ -error detected at relaxng.c:6468 +RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title Extra element title in interleave -error detected at relaxng.c:6770 -Extra content for element head: title +RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title +Element head failed to validate content +RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title +Element head has extra content: title diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err index 5b063e38..71d49f83 100644 --- a/result/relaxng/tutor8_2_5.err +++ b/result/relaxng/tutor8_2_5.err @@ -1,4 +1,6 @@ -error detected at relaxng.c:6709 -Expecting an element, got empty -error detected at relaxng.c:6479 +RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head +Expecting an element title, got nothing +RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head +Element head failed to validate content diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err index 3d57dd3d..22f948ab 100644 --- a/result/relaxng/tutor8_2_6.err +++ b/result/relaxng/tutor8_2_6.err @@ -1,4 +1,6 @@ -error detected at relaxng.c:6468 +RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base Extra element base in interleave -error detected at relaxng.c:6770 -Extra content for element head: base +RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base +Element head failed to validate content +RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base +Element head has extra content: base diff --git a/result/relaxng/tutor9_5_2.err b/result/relaxng/tutor9_5_2.err index 34c0ef1c..75a04d5b 100644 --- a/result/relaxng/tutor9_5_2.err +++ b/result/relaxng/tutor9_5_2.err @@ -1,2 +1,6 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card +Invalid sequence in interleave +RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card +Element card failed to validate content +RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor9_5_3.err b/result/relaxng/tutor9_5_3.err index 34c0ef1c..6a028af9 100644 --- a/result/relaxng/tutor9_5_3.err +++ b/result/relaxng/tutor9_5_3.err @@ -1,2 +1,4 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor9_5_3.xml line 2 element card +Invalid attribute error for element card +RNG validity error: file ./test/relaxng/tutor9_5_3.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor9_6_2.err b/result/relaxng/tutor9_6_2.err index 34c0ef1c..939fa38a 100644 --- a/result/relaxng/tutor9_6_2.err +++ b/result/relaxng/tutor9_6_2.err @@ -1,2 +1,4 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor9_6_2.xml line 2 element card +Element card failed to validate content +RNG validity error: file ./test/relaxng/tutor9_6_2.xml line 2 element card +Element addressBook has extra content: card diff --git a/result/relaxng/tutor9_6_3.err b/result/relaxng/tutor9_6_3.err index 34c0ef1c..f9f34834 100644 --- a/result/relaxng/tutor9_6_3.err +++ b/result/relaxng/tutor9_6_3.err @@ -1,2 +1,4 @@ -error detected at relaxng.c:6770 -Extra content for element addressBook: card +RNG validity error: file ./test/relaxng/tutor9_6_3.xml line 2 element card +Invalid attribute error for element card +RNG validity error: file ./test/relaxng/tutor9_6_3.xml line 2 element card +Element addressBook has extra content: card diff --git a/test/xsdtest/xsdtest.xml b/test/xsdtest/xsdtest.xml index 45d0be1d..b8a6de9b 100644 --- a/test/xsdtest/xsdtest.xml +++ b/test/xsdtest/xsdtest.xml @@ -22,10 +22,10 @@ foobar http://www.example.com http://ji%6d@www.example.com +http://www.example.co%6d nosuchscheme:stuff foo$bar:stuff f%oobar -http://www.example.co%6d 10 diff --git a/uri.c b/uri.c index ffdad9fc..70aee471 100644 --- a/uri.c +++ b/uri.c @@ -1463,8 +1463,10 @@ xmlParseURIAuthority(xmlURIPtr uri, const char **str) { * try first to parse it as a server string. */ ret = xmlParseURIServer(uri, str); - if (ret == 0) + if ((ret == 0) && (*str != NULL) && + ((**str == 0) || (**str == '/') || (**str == '?'))) return(0); + *str = cur; /* * failed, fallback to reg_name @@ -2020,7 +2022,7 @@ xmlCanonicPath(const xmlChar *path) p++; } #else - uri->path = (char *) xmlStrdup((const char *) path); + uri->path = (char *) xmlStrdup((const xmlChar *) path); #endif ret = xmlSaveUri(uri); diff --git a/xmllint.c b/xmllint.c index 8b47f74e..a88de5b7 100644 --- a/xmllint.c +++ b/xmllint.c @@ -1066,6 +1066,10 @@ static void parseAndPrintFile(char *filename) { xmlRelaxNGValidCtxtPtr ctxt; int ret; + if ((timing) && (!repeat)) { + startTimer(); + } + ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas); xmlRelaxNGSetValidErrors(ctxt, (xmlRelaxNGValidityErrorFunc) fprintf, @@ -1081,6 +1085,9 @@ static void parseAndPrintFile(char *filename) { filename); } xmlRelaxNGFreeValidCtxt(ctxt); + if ((timing) && (!repeat)) { + endTimer("Validating"); + } #endif } @@ -1470,6 +1477,9 @@ main(int argc, char **argv) { if (relaxng != NULL) { xmlRelaxNGParserCtxtPtr ctxt; + if (timing) { + startTimer(); + } ctxt = xmlRelaxNGNewParserCtxt(relaxng); xmlRelaxNGSetParserErrors(ctxt, (xmlRelaxNGValidityErrorFunc) fprintf, @@ -1477,6 +1487,9 @@ main(int argc, char **argv) { stderr); relaxngschemas = xmlRelaxNGParse(ctxt); xmlRelaxNGFreeParserCtxt(ctxt); + if (timing) { + endTimer("Compiling the schemas"); + } } #endif for (i = 1; i < argc ; i++) {