From 0e3d3ce2676ddff2c1b35a583c5a40d31c807128 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Fri, 21 Mar 2003 12:43:18 +0000 Subject: [PATCH] fixed xmlRelaxNGNodeMatchesList augmented the test suite this fixes some * relaxng.c: fixed xmlRelaxNGNodeMatchesList * test/relaxng/testsuite.xml: augmented the test suite * result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes some schemas validation tests in the presence of foreign namespaces. Daniel --- ChangeLog | 8 ++++ relaxng.c | 68 +++++++++++++++--------------- test/relaxng/testsuite.xml | 85 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2cfbc52f..d3d7f238 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Fri Mar 21 13:41:23 CET 2003 Daniel Veillard + + * relaxng.c: fixed xmlRelaxNGNodeMatchesList + * test/relaxng/testsuite.xml: augmented the test suite + * result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes + some schemas validation tests in the presence of foreign + namespaces. + Fri Mar 21 02:23:34 CET 2003 Daniel Veillard * relaxng.c: added another interleave speedup. diff --git a/relaxng.c b/relaxng.c index 67423e91..bd2b0d60 100644 --- a/relaxng.c +++ b/relaxng.c @@ -7533,7 +7533,7 @@ xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt, static int xmlRelaxNGNodeMatchesList(xmlNodePtr node, xmlRelaxNGDefinePtr *list) { xmlRelaxNGDefinePtr cur; - int i = 0; + int i = 0, tmp; if ((node == NULL) || (list == NULL)) return(0); @@ -7542,25 +7542,9 @@ xmlRelaxNGNodeMatchesList(xmlNodePtr node, xmlRelaxNGDefinePtr *list) { while (cur != NULL) { if ((node->type == XML_ELEMENT_NODE) && (cur->type == XML_RELAXNG_ELEMENT)) { - if (cur->name == NULL) { - if ((cur->ns == NULL) || (cur->ns[0] == 0)) { - if (node->ns == NULL) - return(1); - } else { - if ((node->ns != NULL) && - (xmlStrEqual(node->ns->href, cur->ns))) - return(1); - } - } else if (xmlStrEqual(cur->name, node->name)) { - if ((cur->ns == NULL) || (cur->ns[0] == 0)) { - if (node->ns == NULL) - return(1); - } else { - if ((node->ns != NULL) && - (xmlStrEqual(node->ns->href, cur->ns))) - return(1); - } - } + tmp = xmlRelaxNGElementMatch(NULL, cur, node); + if (tmp == 1) + return(1); } else if (((node->type == XML_TEXT_NODE) || (node->type == XML_CDATA_SECTION_NODE)) && (cur->type == XML_RELAXNG_TEXT)) { @@ -7897,51 +7881,65 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt, define = define->nameClass; if (define->type == XML_RELAXNG_EXCEPT) { xmlRelaxNGDefinePtr list; - oldflags = ctxt->flags; - ctxt->flags |= FLAGS_IGNORABLE; + if (ctxt != NULL) { + oldflags = ctxt->flags; + ctxt->flags |= FLAGS_IGNORABLE; + } list = define->content; while (list != NULL) { ret = xmlRelaxNGElementMatch(ctxt, list, elem); if (ret == 1) { - ctxt->flags = oldflags; + if (ctxt != NULL) + ctxt->flags = oldflags; return(0); } if (ret < 0) { - ctxt->flags = oldflags; + if (ctxt != NULL) + ctxt->flags = oldflags; return(ret); } list = list->next; } ret = 1; - ctxt->flags = oldflags; + if (ctxt != NULL) { + ctxt->flags = oldflags; + } } else if (define->type == XML_RELAXNG_CHOICE) { xmlRelaxNGDefinePtr list; - oldflags = ctxt->flags; - ctxt->flags |= FLAGS_IGNORABLE; + if (ctxt != NULL) { + oldflags = ctxt->flags; + ctxt->flags |= FLAGS_IGNORABLE; + } list = define->nameClass; while (list != NULL) { ret = xmlRelaxNGElementMatch(ctxt, list, elem); if (ret == 1) { - ctxt->flags = oldflags; + if (ctxt != NULL) + ctxt->flags = oldflags; return(1); } if (ret < 0) { - ctxt->flags = oldflags; + if (ctxt != NULL) + ctxt->flags = oldflags; return(ret); } list = list->next; } - if (ret != 0) { - if ((ctxt->flags & FLAGS_IGNORABLE) == 0) - xmlRelaxNGDumpValidError(ctxt); - } else { - if (ctxt->errNr > 0) xmlRelaxNGPopErrors(ctxt, 0); + if (ctxt != NULL) { + if (ret != 0) { + if ((ctxt->flags & FLAGS_IGNORABLE) == 0) + xmlRelaxNGDumpValidError(ctxt); + } else { + if (ctxt->errNr > 0) xmlRelaxNGPopErrors(ctxt, 0); + } } ret = 0; - ctxt->flags = oldflags; + if (ctxt != NULL) { + ctxt->flags = oldflags; + } } else { TODO ret = -1; diff --git a/test/relaxng/testsuite.xml b/test/relaxng/testsuite.xml index 0d5a9474..09a8f381 100644 --- a/test/relaxng/testsuite.xml +++ b/test/relaxng/testsuite.xml @@ -3,6 +3,91 @@ daniel@veillard.com For libxml2 implementation of Relax NG spec. +Test of node matches + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test of indeterminism