aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Makefile.am17
-rw-r--r--libxml.spec.in2
-rw-r--r--relaxng.c180
-rw-r--r--result/relaxng/addressBook_err0
-rw-r--r--result/relaxng/addressBook_valid1
-rw-r--r--result/relaxng/inline2_err0
-rw-r--r--result/relaxng/inline2_valid1
-rw-r--r--result/relaxng/inline3_err0
-rw-r--r--result/relaxng/inline3_valid1
-rw-r--r--result/relaxng/inline_err0
-rw-r--r--result/relaxng/inline_valid1
-rw-r--r--result/relaxng/interleave0_0_err0
-rw-r--r--result/relaxng/interleave0_0_valid1
-rw-r--r--result/relaxng/interleave1_0_err0
-rw-r--r--result/relaxng/interleave1_0_valid1
-rw-r--r--result/relaxng/pattern1_err0
-rw-r--r--result/relaxng/pattern1_valid1
-rw-r--r--result/relaxng/pattern2_err0
-rw-r--r--result/relaxng/pattern2_valid1
-rw-r--r--result/relaxng/spec1_err1
-rw-r--r--result/relaxng/spec1_valid1
-rw-r--r--result/relaxng/table_err0
-rw-r--r--result/relaxng/table_valid1
-rw-r--r--result/relaxng/tutor10_10_err0
-rw-r--r--result/relaxng/tutor10_10_valid1
-rw-r--r--result/relaxng/tutor10_1_4.err4
-rw-r--r--result/relaxng/tutor10_1_5.err4
-rw-r--r--result/relaxng/tutor10_1_6.err4
-rw-r--r--result/relaxng/tutor10_1_err0
-rw-r--r--result/relaxng/tutor10_1_valid1
-rw-r--r--result/relaxng/tutor10_2_3.err4
-rw-r--r--result/relaxng/tutor10_2_4.err4
-rw-r--r--result/relaxng/tutor10_2_err0
-rw-r--r--result/relaxng/tutor10_2_valid1
-rw-r--r--result/relaxng/tutor10_3_err0
-rw-r--r--result/relaxng/tutor10_3_valid1
-rw-r--r--result/relaxng/tutor10_4_err0
-rw-r--r--result/relaxng/tutor10_4_valid1
-rw-r--r--result/relaxng/tutor10_5_err0
-rw-r--r--result/relaxng/tutor10_5_valid1
-rw-r--r--result/relaxng/tutor10_6_err0
-rw-r--r--result/relaxng/tutor10_6_valid1
-rw-r--r--result/relaxng/tutor10_7_3.err2
-rw-r--r--result/relaxng/tutor10_7_err0
-rw-r--r--result/relaxng/tutor10_7_valid1
-rw-r--r--result/relaxng/tutor10_8_3.err2
-rw-r--r--result/relaxng/tutor10_8_err0
-rw-r--r--result/relaxng/tutor10_8_valid1
-rw-r--r--result/relaxng/tutor10_9_err0
-rw-r--r--result/relaxng/tutor10_9_valid1
-rw-r--r--result/relaxng/tutor11_1_err0
-rw-r--r--result/relaxng/tutor11_1_valid1
-rw-r--r--result/relaxng/tutor11_2_2.err2
-rw-r--r--result/relaxng/tutor11_2_3.err2
-rw-r--r--result/relaxng/tutor11_2_err0
-rw-r--r--result/relaxng/tutor11_2_valid1
-rw-r--r--result/relaxng/tutor11_3_err0
-rw-r--r--result/relaxng/tutor11_3_valid1
-rw-r--r--result/relaxng/tutor11_4_err0
-rw-r--r--result/relaxng/tutor11_4_valid1
-rw-r--r--result/relaxng/tutor12_1_err1
-rw-r--r--result/relaxng/tutor12_1_valid1
-rw-r--r--result/relaxng/tutor13_1_err0
-rw-r--r--result/relaxng/tutor13_1_valid1
-rw-r--r--result/relaxng/tutor14_1_err0
-rw-r--r--result/relaxng/tutor14_1_valid1
-rw-r--r--result/relaxng/tutor1_1_err0
-rw-r--r--result/relaxng/tutor1_1_valid1
-rw-r--r--result/relaxng/tutor1_2_err0
-rw-r--r--result/relaxng/tutor1_2_valid1
-rw-r--r--result/relaxng/tutor1_3_err0
-rw-r--r--result/relaxng/tutor1_3_valid1
-rw-r--r--result/relaxng/tutor1_4_err0
-rw-r--r--result/relaxng/tutor1_4_valid1
-rw-r--r--result/relaxng/tutor2_1_err0
-rw-r--r--result/relaxng/tutor2_1_valid1
-rw-r--r--result/relaxng/tutor3_1_err0
-rw-r--r--result/relaxng/tutor3_1_valid1
-rw-r--r--result/relaxng/tutor3_2_1.err4
-rw-r--r--result/relaxng/tutor3_2_err0
-rw-r--r--result/relaxng/tutor3_2_valid1
-rw-r--r--result/relaxng/tutor3_3_err0
-rw-r--r--result/relaxng/tutor3_3_valid1
-rw-r--r--result/relaxng/tutor3_4_err0
-rw-r--r--result/relaxng/tutor3_4_valid1
-rw-r--r--result/relaxng/tutor3_5_2.err2
-rw-r--r--result/relaxng/tutor3_5_err0
-rw-r--r--result/relaxng/tutor3_5_valid1
-rw-r--r--result/relaxng/tutor3_6_err0
-rw-r--r--result/relaxng/tutor3_6_valid1
-rw-r--r--result/relaxng/tutor3_7_err1
-rw-r--r--result/relaxng/tutor3_7_valid2
-rw-r--r--result/relaxng/tutor3_8_err0
-rw-r--r--result/relaxng/tutor3_8_valid1
-rw-r--r--result/relaxng/tutor3_9_err0
-rw-r--r--result/relaxng/tutor3_9_valid1
-rw-r--r--result/relaxng/tutor4_1_err0
-rw-r--r--result/relaxng/tutor4_1_valid1
-rw-r--r--result/relaxng/tutor4_2_err0
-rw-r--r--result/relaxng/tutor4_2_valid1
-rw-r--r--result/relaxng/tutor4_3_err0
-rw-r--r--result/relaxng/tutor4_3_valid1
-rw-r--r--result/relaxng/tutor4_4_err0
-rw-r--r--result/relaxng/tutor4_4_valid1
-rw-r--r--result/relaxng/tutor5_1_err0
-rw-r--r--result/relaxng/tutor5_1_valid1
-rw-r--r--result/relaxng/tutor5_2_err0
-rw-r--r--result/relaxng/tutor5_2_valid1
-rw-r--r--result/relaxng/tutor5_3_1.err2
-rw-r--r--result/relaxng/tutor5_3_err0
-rw-r--r--result/relaxng/tutor5_3_valid1
-rw-r--r--result/relaxng/tutor5_4_err0
-rw-r--r--result/relaxng/tutor5_4_valid1
-rw-r--r--result/relaxng/tutor5_5_err0
-rw-r--r--result/relaxng/tutor5_5_valid1
-rw-r--r--result/relaxng/tutor6_1_3.err2
-rw-r--r--result/relaxng/tutor6_1_err0
-rw-r--r--result/relaxng/tutor6_1_valid1
-rw-r--r--result/relaxng/tutor6_2_4.err2
-rw-r--r--result/relaxng/tutor6_2_err0
-rw-r--r--result/relaxng/tutor6_2_valid1
-rw-r--r--result/relaxng/tutor6_3_1.err2
-rw-r--r--result/relaxng/tutor6_3_err0
-rw-r--r--result/relaxng/tutor6_3_valid1
-rw-r--r--result/relaxng/tutor7_1_2.err6
-rw-r--r--result/relaxng/tutor7_1_3.err6
-rw-r--r--result/relaxng/tutor7_1_err0
-rw-r--r--result/relaxng/tutor7_1_valid1
-rw-r--r--result/relaxng/tutor7_2_4.err4
-rw-r--r--result/relaxng/tutor7_2_err0
-rw-r--r--result/relaxng/tutor7_2_valid1
-rw-r--r--result/relaxng/tutor7_3_4.err6
-rw-r--r--result/relaxng/tutor7_3_5.err6
-rw-r--r--result/relaxng/tutor7_3_err0
-rw-r--r--result/relaxng/tutor7_3_valid1
-rw-r--r--result/relaxng/tutor8_1_err0
-rw-r--r--result/relaxng/tutor8_1_valid1
-rw-r--r--result/relaxng/tutor8_2_4.err4
-rw-r--r--result/relaxng/tutor8_2_52
-rw-r--r--result/relaxng/tutor8_2_5.err4
-rw-r--r--result/relaxng/tutor8_2_6.err2
-rw-r--r--result/relaxng/tutor8_2_err0
-rw-r--r--result/relaxng/tutor8_2_valid1
-rw-r--r--result/relaxng/tutor8_3_err0
-rw-r--r--result/relaxng/tutor8_3_valid1
-rw-r--r--result/relaxng/tutor9_10_err0
-rw-r--r--result/relaxng/tutor9_10_valid1
-rw-r--r--result/relaxng/tutor9_11_err0
-rw-r--r--result/relaxng/tutor9_11_valid1
-rw-r--r--result/relaxng/tutor9_12_err0
-rw-r--r--result/relaxng/tutor9_12_valid1
-rw-r--r--result/relaxng/tutor9_1_err0
-rw-r--r--result/relaxng/tutor9_1_valid1
-rw-r--r--result/relaxng/tutor9_2_err0
-rw-r--r--result/relaxng/tutor9_2_valid1
-rw-r--r--result/relaxng/tutor9_3_err0
-rw-r--r--result/relaxng/tutor9_3_valid1
-rw-r--r--result/relaxng/tutor9_4_err0
-rw-r--r--result/relaxng/tutor9_4_valid1
-rw-r--r--result/relaxng/tutor9_5_2.err2
-rw-r--r--result/relaxng/tutor9_5_3.err2
-rw-r--r--result/relaxng/tutor9_5_err0
-rw-r--r--result/relaxng/tutor9_5_valid1
-rw-r--r--result/relaxng/tutor9_6_2.err2
-rw-r--r--result/relaxng/tutor9_6_3.err2
-rw-r--r--result/relaxng/tutor9_6_err0
-rw-r--r--result/relaxng/tutor9_6_valid1
-rw-r--r--result/relaxng/tutor9_7_err0
-rw-r--r--result/relaxng/tutor9_7_valid1
-rw-r--r--result/relaxng/tutor9_8_err0
-rw-r--r--result/relaxng/tutor9_8_valid1
-rw-r--r--result/relaxng/tutor9_9_err0
-rw-r--r--result/relaxng/tutor9_9_valid1
-rw-r--r--result/relaxng/tutorA_err0
-rw-r--r--result/relaxng/tutorA_valid1
-rw-r--r--test/relaxng/interleave0_0.rng24
-rw-r--r--test/relaxng/interleave1_0.rng15
-rw-r--r--test/relaxng/tutor14_1.rng53
-rw-r--r--test/relaxng/tutorA.rng334
180 files changed, 724 insertions, 76 deletions
diff --git a/ChangeLog b/ChangeLog
index 203c08a9..3c5f78b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sun Feb 9 15:18:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
+
+ * libxml.spec.in: fixes a libtool problem on AMD 64bits builds
+ * relaxng.c: found the validation problem I had with interleave
+ when not covering all remaining siblings
+ * Makefile.am test.relaxng/* result/relaxng/*: augmented the
+ testsuite and check the RNG schemas against the RNG schemas
+ given in appendix A
+
Sat Feb 8 18:55:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>
* win32/Makefile.msvc: updates for RelaxNG
diff --git a/Makefile.am b/Makefile.am
index 862cdfc4..ca4d6953 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -693,6 +693,23 @@ Relaxtests: xmllint$(EXEEXT)
@echo "##"
-@(for i in $(srcdir)/test/relaxng/*.rng ; do \
name=`basename $$i | sed 's+\.rng++'`; \
+ if [ ! -f $(srcdir)/result/relaxng/"$$name"_valid ] ; then \
+ echo New schemas $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > $(srcdir)/result/relaxng/"$$name"_valid \
+ 2> $(srcdir)/result/relaxng/"$$name"_err; \
+ else \
+ echo Checking schemas $$name ; \
+ $(CHECKER) $(top_builddir)/xmllint$(EXEEXT) --noout --relaxng $(srcdir)/test/relaxng/tutorA.rng $$i \
+ > res.$$name 2> err.$$name;\
+ grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
+ diff $(srcdir)/result/relaxng/"$$name"_valid \
+ res.$$name;\
+ diff $(srcdir)/result/relaxng/"$$name"_err \
+ err.$$name | grep -v "error detected at";\
+ grep Unimplemented err.$$name; \
+ rm res.$$name err.$$name ; \
+ fi; \
for j in $(srcdir)/test/relaxng/"$$name"_*.xml ; do \
if [ -f $$j ] ; then \
xno=`basename $$j | sed 's+.*_\(.*\).xml+\1+'`; \
diff --git a/libxml.spec.in b/libxml.spec.in
index c4f12288..4feaea2e 100644
--- a/libxml.spec.in
+++ b/libxml.spec.in
@@ -61,7 +61,7 @@ at parse time or later once the document has been modified.
%build
%configure
-make
+make LIBTOOL=/usr/bin/libtool
%install
rm -fr %{buildroot}
diff --git a/relaxng.c b/relaxng.c
index 114167d6..4ff9a7c0 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -259,6 +259,7 @@ struct _xmlRelaxNGValidCtxt {
xmlDocPtr doc; /* the document being validated */
xmlRelaxNGValidStatePtr state; /* the current validation state */
int flags; /* validation flags */
+ int depth; /* validation depth */
};
/**
@@ -1175,11 +1176,42 @@ xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar *URL,
************************************************************************/
#define VALID_CTXT() \
- if (ctxt->flags == 0) xmlGenericError(xmlGenericErrorContext, \
+ if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \
+ xmlGenericError(xmlGenericErrorContext, \
"error detected at %s:%d\n", \
__FILE__, __LINE__);
-#define VALID_ERROR if (ctxt->flags == 0) printf
+#define VALID_ERROR \
+ if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \
+ printf
+static const char *
+xmlRelaxNGDefName(xmlRelaxNGDefinePtr def) {
+ if (def == NULL)
+ return("none");
+ switch(def->type) {
+ case XML_RELAXNG_EMPTY: return("empty");
+ case XML_RELAXNG_NOT_ALLOWED: return("notAllowed");
+ case XML_RELAXNG_EXCEPT: return("except");
+ case XML_RELAXNG_TEXT: return("text");
+ case XML_RELAXNG_ELEMENT: return("element");
+ case XML_RELAXNG_DATATYPE: return("datatype");
+ case XML_RELAXNG_VALUE: return("value");
+ case XML_RELAXNG_LIST: return("list");
+ case XML_RELAXNG_ATTRIBUTE: return("attribute");
+ case XML_RELAXNG_DEF: return("def");
+ case XML_RELAXNG_REF: return("ref");
+ case XML_RELAXNG_EXTERNALREF: return("externalRef");
+ case XML_RELAXNG_PARENTREF: return("parentRef");
+ case XML_RELAXNG_OPTIONAL: return("optional");
+ case XML_RELAXNG_ZEROORMORE: return("zeroOrMore");
+ case XML_RELAXNG_ONEORMORE: return("oneOrMore");
+ case XML_RELAXNG_CHOICE: return("choice");
+ case XML_RELAXNG_GROUP: return("group");
+ case XML_RELAXNG_INTERLEAVE: return("interleave");
+ case XML_RELAXNG_START: return("start");
+ }
+ return("unknown");
+}
#if 0
/**
* xmlRelaxNGErrorContext:
@@ -4502,11 +4534,13 @@ xmlRelaxNGValidateAttribute(xmlRelaxNGValidCtxtPtr ctxt,
value = xmlNodeListGetString(prop->doc, prop->children, 1);
oldvalue = ctxt->state->value;
ctxt->state->value = value;
+ ctxt->state->endvalue = NULL;
ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
- value = ctxt->state->value;
- ctxt->state->value = oldvalue;
+ if (ctxt->state->value != NULL)
+ value = ctxt->state->value;
if (value != NULL)
xmlFree(value);
+ ctxt->state->value = oldvalue;
if (ret == 0) {
/*
* flag the attribute as processed
@@ -4535,10 +4569,11 @@ xmlRelaxNGValidateAttribute(xmlRelaxNGValidCtxtPtr ctxt,
oldvalue = ctxt->state->value;
ctxt->state->value = value;
ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
- value = ctxt->state->value;
- ctxt->state->value = oldvalue;
+ if (ctxt->state->value != NULL)
+ value = ctxt->state->value;
if (value != NULL)
xmlFree(value);
+ ctxt->state->value = oldvalue;
if (ret == 0) {
/*
* flag the attribute as processed
@@ -4736,7 +4771,7 @@ static int
xmlRelaxNGValidatePartGroup(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGInterleaveGroupPtr *groups,
int nbgroups, xmlNodePtr *nodes, int len) {
- int level, ret = -1, i, j, k;
+ int level, ret = -1, i, j, k, top_j, max_j;
xmlNodePtr *array = NULL, *list, oldseq;
xmlRelaxNGInterleaveGroupPtr group;
@@ -4755,19 +4790,24 @@ xmlRelaxNGValidatePartGroup(xmlRelaxNGValidCtxtPtr ctxt,
* Partition the elements and validate the subsets.
*/
oldseq = ctxt->state->seq;
+ max_j = -1;
for (i = 0;i < nbgroups;i++) {
group = groups[i];
if (group == NULL)
continue;
k = 0;
+ top_j = -1;
for (j = 0;j < len;j++) {
if (nodes[j] == NULL)
continue;
if (xmlRelaxNGNodeMatchesList(nodes[j], group->defs)) {
list[k++] = nodes[j];
nodes[j] = NULL;
+ top_j = j;
}
}
+ if (top_j > max_j)
+ max_j = top_j;
ctxt->state->seq = oldseq;
if (k > 1) {
memset(array, 0, k * sizeof(xmlNodePtr));
@@ -4783,6 +4823,18 @@ xmlRelaxNGValidatePartGroup(xmlRelaxNGValidCtxtPtr ctxt,
}
}
+ for (j = 0;j < max_j;j++) {
+ if (nodes[j] != NULL) {
+ TODO /* problem, one of the nodes didn't got a match */
+ }
+ }
+ if (ret == 0) {
+ if (max_j + 1 < len)
+ ctxt->state->seq = nodes[max_j + 1];
+ else
+ ctxt->state->seq = NULL;
+ }
+
xmlFree(list);
xmlFree(array);
return(ret);
@@ -4804,7 +4856,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGPartitionPtr partitions;
xmlNodePtr *children = NULL;
xmlNodePtr *order = NULL;
- xmlNodePtr cur;
+ xmlNodePtr cur, oldseq;
if (define->data != NULL) {
partitions = (xmlRelaxNGPartitionPtr) define->data;
@@ -4819,6 +4871,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
* initial order.
*/
cur = ctxt->state->seq;
+ oldseq = ctxt->state->seq;
nbchildren = 0;
nbtot = 0;
while (cur != NULL) {
@@ -4858,9 +4911,8 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
/* TODO: retry with a maller set of child if there is a next... */
ret = xmlRelaxNGValidatePartGroup(ctxt, partitions->groups,
partitions->nbgroups, children, nbchildren);
- if (ret == 0) {
- ctxt->state->seq = NULL;
- }
+ if (ret != 0)
+ ctxt->state->seq = oldseq;
/*
* Cleanup: rebuid the child sequence and free the structure
@@ -4957,23 +5009,37 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
} else {
node = NULL;
}
+#ifdef DEBUG
+ for (i = 0;i < ctxt->depth;i++)
+ xmlGenericError(xmlGenericErrorContext, " ");
+ xmlGenericError(xmlGenericErrorContext,
+ "Start validating %s ", xmlRelaxNGDefName(define));
+ if (define->name != NULL)
+ xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
+ if ((node != NULL) && (node->name != NULL))
+ xmlGenericError(xmlGenericErrorContext, "on %s\n", node->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, "\n");
+#endif
+ ctxt->depth++;
switch (define->type) {
case XML_RELAXNG_EMPTY:
if (node != NULL) {
VALID_CTXT();
VALID_ERROR("Expecting an empty element\n");
- return(-1);
+ ret = -1;
+ break;
}
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateDefinition(): validated empty\n");
-#endif
- return(0);
+ ret = 0;
+ break;
case XML_RELAXNG_NOT_ALLOWED:
- return(-1);
+ ret = -1;
+ break;
case XML_RELAXNG_TEXT:
- if (node == NULL)
- return(0);
+ if (node == NULL) {
+ ret = 0;
+ break;
+ }
while ((node != NULL) &&
((node->type == XML_TEXT_NODE) ||
(node->type == XML_COMMENT_NODE) ||
@@ -4989,10 +5055,17 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
break;
case XML_RELAXNG_ELEMENT:
node = xmlRelaxNGSkipIgnored(ctxt, node);
- if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) {
+ if (node == NULL) {
VALID_CTXT();
- VALID_ERROR("Expecting an element\n");
- return(-1);
+ VALID_ERROR("Expecting an element, got empty\n");
+ ret = -1;
+ break;
+ }
+ if (node->type != XML_ELEMENT_NODE) {
+ VALID_CTXT();
+ VALID_ERROR("Expecting an element got %d type\n", node->type);
+ ret = -1;
+ break;
}
/*
* This node was already validated successfully against
@@ -5005,7 +5078,8 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
VALID_CTXT();
VALID_ERROR("Expecting element %s, got %s\n",
define->name, node->name);
- return(-1);
+ ret = -1;
+ break;
}
}
if ((define->ns != NULL) && (define->ns[0] != 0)) {
@@ -5013,38 +5087,54 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
VALID_CTXT();
VALID_ERROR("Expecting a namespace for element %s\n",
node->name);
- return(-1);
+ ret = -1;
+ break;
} else if (!xmlStrEqual(node->ns->href, define->ns)) {
VALID_CTXT();
VALID_ERROR("Expecting element %s has wrong namespace: expecting %s\n",
node->name, define->ns);
- return(-1);
+ ret = -1;
+ break;
}
} else if (define->name != NULL) {
if (node->ns != NULL) {
VALID_CTXT();
VALID_ERROR("Expecting no namespace for element %s\n",
define->name);
- return(-1);
+ ret = -1;
+ break;
}
}
state = xmlRelaxNGNewValidState(ctxt, node);
if (state == NULL) {
- return(-1);
+ ret = -1;
+ break;
}
oldstate = ctxt->state;
ctxt->state = state;
if (define->attrs != NULL) {
tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
- if (tmp != 0)
+ if (tmp != 0) {
ret = -1;
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "E: Element %s failed to validate attributes\n",
+ node->name);
+#endif
+ }
}
if (define->content != NULL) {
tmp = xmlRelaxNGValidateElementContent(ctxt, define->content);
- if (tmp != 0)
+ if (tmp != 0) {
ret = -1;
+#ifdef DEBUG
+ xmlGenericError(xmlGenericErrorContext,
+ "E: Element %s failed to validate element content\n",
+ node->name);
+#endif
+ }
}
state = ctxt->state;
if (state->seq != NULL) {
@@ -5054,6 +5144,11 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
VALID_ERROR("Extra content for element %s: %s\n",
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++) {
@@ -5074,8 +5169,18 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateDefinition(): validated %s : %d\n",
+ "xmlRelaxNGValidateDefinition(): validated %s : %d",
node->name, ret);
+ if (oldstate == NULL)
+ xmlGenericError(xmlGenericErrorContext, ": no state\n");
+ else if (oldstate->seq == NULL)
+ xmlGenericError(xmlGenericErrorContext, ": done\n");
+ else if (oldstate->seq->type == XML_ELEMENT_NODE)
+ xmlGenericError(xmlGenericErrorContext, ": next elem %s\n",
+ oldstate->seq->name);
+ else
+ xmlGenericError(xmlGenericErrorContext, ": next %s %d\n",
+ oldstate->seq->name, oldstate->seq->type);
#endif
break;
case XML_RELAXNG_OPTIONAL:
@@ -5277,6 +5382,19 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
TODO
break;
}
+ ctxt->depth--;
+#ifdef DEBUG
+ for (i = 0;i < ctxt->depth;i++)
+ xmlGenericError(xmlGenericErrorContext, " ");
+ xmlGenericError(xmlGenericErrorContext,
+ "Validating %s ", xmlRelaxNGDefName(define));
+ if (define->name != NULL)
+ xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
+ if (ret == 0)
+ xmlGenericError(xmlGenericErrorContext, "suceeded\n");
+ else
+ xmlGenericError(xmlGenericErrorContext, "failed\n");
+#endif
return(ret);
}
diff --git a/result/relaxng/addressBook_err b/result/relaxng/addressBook_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/addressBook_err
diff --git a/result/relaxng/addressBook_valid b/result/relaxng/addressBook_valid
new file mode 100644
index 00000000..584d55ab
--- /dev/null
+++ b/result/relaxng/addressBook_valid
@@ -0,0 +1 @@
+./test/relaxng/addressBook.rng validates
diff --git a/result/relaxng/inline2_err b/result/relaxng/inline2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/inline2_err
diff --git a/result/relaxng/inline2_valid b/result/relaxng/inline2_valid
new file mode 100644
index 00000000..027408e2
--- /dev/null
+++ b/result/relaxng/inline2_valid
@@ -0,0 +1 @@
+./test/relaxng/inline2.rng validates
diff --git a/result/relaxng/inline3_err b/result/relaxng/inline3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/inline3_err
diff --git a/result/relaxng/inline3_valid b/result/relaxng/inline3_valid
new file mode 100644
index 00000000..1ceccb83
--- /dev/null
+++ b/result/relaxng/inline3_valid
@@ -0,0 +1 @@
+./test/relaxng/inline3.rng validates
diff --git a/result/relaxng/inline_err b/result/relaxng/inline_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/inline_err
diff --git a/result/relaxng/inline_valid b/result/relaxng/inline_valid
new file mode 100644
index 00000000..8ba0e5cf
--- /dev/null
+++ b/result/relaxng/inline_valid
@@ -0,0 +1 @@
+./test/relaxng/inline.rng validates
diff --git a/result/relaxng/interleave0_0_err b/result/relaxng/interleave0_0_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/interleave0_0_err
diff --git a/result/relaxng/interleave0_0_valid b/result/relaxng/interleave0_0_valid
new file mode 100644
index 00000000..0d865ec2
--- /dev/null
+++ b/result/relaxng/interleave0_0_valid
@@ -0,0 +1 @@
+./test/relaxng/interleave0_0.rng validates
diff --git a/result/relaxng/interleave1_0_err b/result/relaxng/interleave1_0_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/interleave1_0_err
diff --git a/result/relaxng/interleave1_0_valid b/result/relaxng/interleave1_0_valid
new file mode 100644
index 00000000..48023528
--- /dev/null
+++ b/result/relaxng/interleave1_0_valid
@@ -0,0 +1 @@
+./test/relaxng/interleave1_0.rng validates
diff --git a/result/relaxng/pattern1_err b/result/relaxng/pattern1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/pattern1_err
diff --git a/result/relaxng/pattern1_valid b/result/relaxng/pattern1_valid
new file mode 100644
index 00000000..88564462
--- /dev/null
+++ b/result/relaxng/pattern1_valid
@@ -0,0 +1 @@
+./test/relaxng/pattern1.rng validates
diff --git a/result/relaxng/pattern2_err b/result/relaxng/pattern2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/pattern2_err
diff --git a/result/relaxng/pattern2_valid b/result/relaxng/pattern2_valid
new file mode 100644
index 00000000..acccc55b
--- /dev/null
+++ b/result/relaxng/pattern2_valid
@@ -0,0 +1 @@
+./test/relaxng/pattern2.rng validates
diff --git a/result/relaxng/spec1_err b/result/relaxng/spec1_err
new file mode 100644
index 00000000..e40f6074
--- /dev/null
+++ b/result/relaxng/spec1_err
@@ -0,0 +1 @@
+Unimplemented block at relaxng.c:4828
diff --git a/result/relaxng/spec1_valid b/result/relaxng/spec1_valid
new file mode 100644
index 00000000..8551c1e1
--- /dev/null
+++ b/result/relaxng/spec1_valid
@@ -0,0 +1 @@
+./test/relaxng/spec1.rng validates
diff --git a/result/relaxng/table_err b/result/relaxng/table_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/table_err
diff --git a/result/relaxng/table_valid b/result/relaxng/table_valid
new file mode 100644
index 00000000..47e79962
--- /dev/null
+++ b/result/relaxng/table_valid
@@ -0,0 +1 @@
+./test/relaxng/table.rng validates
diff --git a/result/relaxng/tutor10_10_err b/result/relaxng/tutor10_10_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_10_err
diff --git a/result/relaxng/tutor10_10_valid b/result/relaxng/tutor10_10_valid
new file mode 100644
index 00000000..24a5f7e5
--- /dev/null
+++ b/result/relaxng/tutor10_10_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_10.rng validates
diff --git a/result/relaxng/tutor10_1_4.err b/result/relaxng/tutor10_1_4.err
index 55d5ba57..79345542 100644
--- a/result/relaxng/tutor10_1_4.err
+++ b/result/relaxng/tutor10_1_4.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5013
-error detected at relaxng.c:5319
+error detected at relaxng.c:5087
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor10_1_5.err b/result/relaxng/tutor10_1_5.err
index 89b8f6da..e8d4bb13 100644
--- a/result/relaxng/tutor10_1_5.err
+++ b/result/relaxng/tutor10_1_5.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5018
-error detected at relaxng.c:5319
+error detected at relaxng.c:5093
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor10_1_6.err b/result/relaxng/tutor10_1_6.err
index 89b8f6da..e8d4bb13 100644
--- a/result/relaxng/tutor10_1_6.err
+++ b/result/relaxng/tutor10_1_6.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5018
-error detected at relaxng.c:5319
+error detected at relaxng.c:5093
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor10_1_err b/result/relaxng/tutor10_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_1_err
diff --git a/result/relaxng/tutor10_1_valid b/result/relaxng/tutor10_1_valid
new file mode 100644
index 00000000..85be3be0
--- /dev/null
+++ b/result/relaxng/tutor10_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_1.rng validates
diff --git a/result/relaxng/tutor10_2_3.err b/result/relaxng/tutor10_2_3.err
index 11ceab2c..35b54a40 100644
--- a/result/relaxng/tutor10_2_3.err
+++ b/result/relaxng/tutor10_2_3.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5025
-error detected at relaxng.c:5319
+error detected at relaxng.c:5101
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor10_2_4.err b/result/relaxng/tutor10_2_4.err
index 11ceab2c..35b54a40 100644
--- a/result/relaxng/tutor10_2_4.err
+++ b/result/relaxng/tutor10_2_4.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5025
-error detected at relaxng.c:5319
+error detected at relaxng.c:5101
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor10_2_err b/result/relaxng/tutor10_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_2_err
diff --git a/result/relaxng/tutor10_2_valid b/result/relaxng/tutor10_2_valid
new file mode 100644
index 00000000..b3e32a63
--- /dev/null
+++ b/result/relaxng/tutor10_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_2.rng validates
diff --git a/result/relaxng/tutor10_3_err b/result/relaxng/tutor10_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_3_err
diff --git a/result/relaxng/tutor10_3_valid b/result/relaxng/tutor10_3_valid
new file mode 100644
index 00000000..3c714aac
--- /dev/null
+++ b/result/relaxng/tutor10_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_3.rng validates
diff --git a/result/relaxng/tutor10_4_err b/result/relaxng/tutor10_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_4_err
diff --git a/result/relaxng/tutor10_4_valid b/result/relaxng/tutor10_4_valid
new file mode 100644
index 00000000..32081376
--- /dev/null
+++ b/result/relaxng/tutor10_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_4.rng validates
diff --git a/result/relaxng/tutor10_5_err b/result/relaxng/tutor10_5_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_5_err
diff --git a/result/relaxng/tutor10_5_valid b/result/relaxng/tutor10_5_valid
new file mode 100644
index 00000000..49808cfe
--- /dev/null
+++ b/result/relaxng/tutor10_5_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_5.rng validates
diff --git a/result/relaxng/tutor10_6_err b/result/relaxng/tutor10_6_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_6_err
diff --git a/result/relaxng/tutor10_6_valid b/result/relaxng/tutor10_6_valid
new file mode 100644
index 00000000..09368c1b
--- /dev/null
+++ b/result/relaxng/tutor10_6_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_6.rng validates
diff --git a/result/relaxng/tutor10_7_3.err b/result/relaxng/tutor10_7_3.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor10_7_3.err
+++ b/result/relaxng/tutor10_7_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor10_7_err b/result/relaxng/tutor10_7_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_7_err
diff --git a/result/relaxng/tutor10_7_valid b/result/relaxng/tutor10_7_valid
new file mode 100644
index 00000000..081a2302
--- /dev/null
+++ b/result/relaxng/tutor10_7_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_7.rng validates
diff --git a/result/relaxng/tutor10_8_3.err b/result/relaxng/tutor10_8_3.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor10_8_3.err
+++ b/result/relaxng/tutor10_8_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor10_8_err b/result/relaxng/tutor10_8_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_8_err
diff --git a/result/relaxng/tutor10_8_valid b/result/relaxng/tutor10_8_valid
new file mode 100644
index 00000000..1a864cc0
--- /dev/null
+++ b/result/relaxng/tutor10_8_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_8.rng validates
diff --git a/result/relaxng/tutor10_9_err b/result/relaxng/tutor10_9_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor10_9_err
diff --git a/result/relaxng/tutor10_9_valid b/result/relaxng/tutor10_9_valid
new file mode 100644
index 00000000..942058e9
--- /dev/null
+++ b/result/relaxng/tutor10_9_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor10_9.rng validates
diff --git a/result/relaxng/tutor11_1_err b/result/relaxng/tutor11_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor11_1_err
diff --git a/result/relaxng/tutor11_1_valid b/result/relaxng/tutor11_1_valid
new file mode 100644
index 00000000..88347feb
--- /dev/null
+++ b/result/relaxng/tutor11_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor11_1.rng validates
diff --git a/result/relaxng/tutor11_2_2.err b/result/relaxng/tutor11_2_2.err
index 22c50637..43abea66 100644
--- a/result/relaxng/tutor11_2_2.err
+++ b/result/relaxng/tutor11_2_2.err
@@ -1 +1 @@
-error detected at relaxng.c:5061
+error detected at relaxng.c:5156
diff --git a/result/relaxng/tutor11_2_3.err b/result/relaxng/tutor11_2_3.err
index 22c50637..43abea66 100644
--- a/result/relaxng/tutor11_2_3.err
+++ b/result/relaxng/tutor11_2_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5061
+error detected at relaxng.c:5156
diff --git a/result/relaxng/tutor11_2_err b/result/relaxng/tutor11_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor11_2_err
diff --git a/result/relaxng/tutor11_2_valid b/result/relaxng/tutor11_2_valid
new file mode 100644
index 00000000..3294c13b
--- /dev/null
+++ b/result/relaxng/tutor11_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor11_2.rng validates
diff --git a/result/relaxng/tutor11_3_err b/result/relaxng/tutor11_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor11_3_err
diff --git a/result/relaxng/tutor11_3_valid b/result/relaxng/tutor11_3_valid
new file mode 100644
index 00000000..14d9d447
--- /dev/null
+++ b/result/relaxng/tutor11_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor11_3.rng validates
diff --git a/result/relaxng/tutor11_4_err b/result/relaxng/tutor11_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor11_4_err
diff --git a/result/relaxng/tutor11_4_valid b/result/relaxng/tutor11_4_valid
new file mode 100644
index 00000000..f0a83393
--- /dev/null
+++ b/result/relaxng/tutor11_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor11_4.rng validates
diff --git a/result/relaxng/tutor12_1_err b/result/relaxng/tutor12_1_err
new file mode 100644
index 00000000..e40f6074
--- /dev/null
+++ b/result/relaxng/tutor12_1_err
@@ -0,0 +1 @@
+Unimplemented block at relaxng.c:4828
diff --git a/result/relaxng/tutor12_1_valid b/result/relaxng/tutor12_1_valid
new file mode 100644
index 00000000..a02fb415
--- /dev/null
+++ b/result/relaxng/tutor12_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor12_1.rng validates
diff --git a/result/relaxng/tutor13_1_err b/result/relaxng/tutor13_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor13_1_err
diff --git a/result/relaxng/tutor13_1_valid b/result/relaxng/tutor13_1_valid
new file mode 100644
index 00000000..ccd11ad1
--- /dev/null
+++ b/result/relaxng/tutor13_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor13_1.rng validates
diff --git a/result/relaxng/tutor14_1_err b/result/relaxng/tutor14_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor14_1_err
diff --git a/result/relaxng/tutor14_1_valid b/result/relaxng/tutor14_1_valid
new file mode 100644
index 00000000..191ec3d5
--- /dev/null
+++ b/result/relaxng/tutor14_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor14_1.rng validates
diff --git a/result/relaxng/tutor1_1_err b/result/relaxng/tutor1_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor1_1_err
diff --git a/result/relaxng/tutor1_1_valid b/result/relaxng/tutor1_1_valid
new file mode 100644
index 00000000..d7cbfe85
--- /dev/null
+++ b/result/relaxng/tutor1_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor1_1.rng validates
diff --git a/result/relaxng/tutor1_2_err b/result/relaxng/tutor1_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor1_2_err
diff --git a/result/relaxng/tutor1_2_valid b/result/relaxng/tutor1_2_valid
new file mode 100644
index 00000000..97d32b2f
--- /dev/null
+++ b/result/relaxng/tutor1_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor1_2.rng validates
diff --git a/result/relaxng/tutor1_3_err b/result/relaxng/tutor1_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor1_3_err
diff --git a/result/relaxng/tutor1_3_valid b/result/relaxng/tutor1_3_valid
new file mode 100644
index 00000000..4941f8fb
--- /dev/null
+++ b/result/relaxng/tutor1_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor1_3.rng validates
diff --git a/result/relaxng/tutor1_4_err b/result/relaxng/tutor1_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor1_4_err
diff --git a/result/relaxng/tutor1_4_valid b/result/relaxng/tutor1_4_valid
new file mode 100644
index 00000000..a1fd60cf
--- /dev/null
+++ b/result/relaxng/tutor1_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor1_4.rng validates
diff --git a/result/relaxng/tutor2_1_err b/result/relaxng/tutor2_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor2_1_err
diff --git a/result/relaxng/tutor2_1_valid b/result/relaxng/tutor2_1_valid
new file mode 100644
index 00000000..df4778eb
--- /dev/null
+++ b/result/relaxng/tutor2_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor2_1.rng validates
diff --git a/result/relaxng/tutor3_1_err b/result/relaxng/tutor3_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_1_err
diff --git a/result/relaxng/tutor3_1_valid b/result/relaxng/tutor3_1_valid
new file mode 100644
index 00000000..949ef9ac
--- /dev/null
+++ b/result/relaxng/tutor3_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_1.rng validates
diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err
index c1214b45..eabd308d 100644
--- a/result/relaxng/tutor3_2_1.err
+++ b/result/relaxng/tutor3_2_1.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:5005
-error detected at relaxng.c:5053
+error detected at relaxng.c:5078
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor3_2_err b/result/relaxng/tutor3_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_2_err
diff --git a/result/relaxng/tutor3_2_valid b/result/relaxng/tutor3_2_valid
new file mode 100644
index 00000000..b6cb1ad8
--- /dev/null
+++ b/result/relaxng/tutor3_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_2.rng validates
diff --git a/result/relaxng/tutor3_3_err b/result/relaxng/tutor3_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_3_err
diff --git a/result/relaxng/tutor3_3_valid b/result/relaxng/tutor3_3_valid
new file mode 100644
index 00000000..92e83b68
--- /dev/null
+++ b/result/relaxng/tutor3_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_3.rng validates
diff --git a/result/relaxng/tutor3_4_err b/result/relaxng/tutor3_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_4_err
diff --git a/result/relaxng/tutor3_4_valid b/result/relaxng/tutor3_4_valid
new file mode 100644
index 00000000..61ef41f9
--- /dev/null
+++ b/result/relaxng/tutor3_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_4.rng validates
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor3_5_2.err
+++ b/result/relaxng/tutor3_5_2.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor3_5_err b/result/relaxng/tutor3_5_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_5_err
diff --git a/result/relaxng/tutor3_5_valid b/result/relaxng/tutor3_5_valid
new file mode 100644
index 00000000..2e368687
--- /dev/null
+++ b/result/relaxng/tutor3_5_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_5.rng validates
diff --git a/result/relaxng/tutor3_6_err b/result/relaxng/tutor3_6_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_6_err
diff --git a/result/relaxng/tutor3_6_valid b/result/relaxng/tutor3_6_valid
new file mode 100644
index 00000000..8479bea9
--- /dev/null
+++ b/result/relaxng/tutor3_6_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_6.rng validates
diff --git a/result/relaxng/tutor3_7_err b/result/relaxng/tutor3_7_err
new file mode 100644
index 00000000..96dd8eed
--- /dev/null
+++ b/result/relaxng/tutor3_7_err
@@ -0,0 +1 @@
+error detected at relaxng.c:5437
diff --git a/result/relaxng/tutor3_7_valid b/result/relaxng/tutor3_7_valid
new file mode 100644
index 00000000..1e179695
--- /dev/null
+++ b/result/relaxng/tutor3_7_valid
@@ -0,0 +1,2 @@
+extra data on the document
+./test/relaxng/tutor3_7.rng fails to validate
diff --git a/result/relaxng/tutor3_8_err b/result/relaxng/tutor3_8_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_8_err
diff --git a/result/relaxng/tutor3_8_valid b/result/relaxng/tutor3_8_valid
new file mode 100644
index 00000000..44fe75d5
--- /dev/null
+++ b/result/relaxng/tutor3_8_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_8.rng validates
diff --git a/result/relaxng/tutor3_9_err b/result/relaxng/tutor3_9_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor3_9_err
diff --git a/result/relaxng/tutor3_9_valid b/result/relaxng/tutor3_9_valid
new file mode 100644
index 00000000..d54fbe0d
--- /dev/null
+++ b/result/relaxng/tutor3_9_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor3_9.rng validates
diff --git a/result/relaxng/tutor4_1_err b/result/relaxng/tutor4_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor4_1_err
diff --git a/result/relaxng/tutor4_1_valid b/result/relaxng/tutor4_1_valid
new file mode 100644
index 00000000..94f0289b
--- /dev/null
+++ b/result/relaxng/tutor4_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor4_1.rng validates
diff --git a/result/relaxng/tutor4_2_err b/result/relaxng/tutor4_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor4_2_err
diff --git a/result/relaxng/tutor4_2_valid b/result/relaxng/tutor4_2_valid
new file mode 100644
index 00000000..82085d0a
--- /dev/null
+++ b/result/relaxng/tutor4_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor4_2.rng validates
diff --git a/result/relaxng/tutor4_3_err b/result/relaxng/tutor4_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor4_3_err
diff --git a/result/relaxng/tutor4_3_valid b/result/relaxng/tutor4_3_valid
new file mode 100644
index 00000000..74eb8b2f
--- /dev/null
+++ b/result/relaxng/tutor4_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor4_3.rng validates
diff --git a/result/relaxng/tutor4_4_err b/result/relaxng/tutor4_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor4_4_err
diff --git a/result/relaxng/tutor4_4_valid b/result/relaxng/tutor4_4_valid
new file mode 100644
index 00000000..641ee87c
--- /dev/null
+++ b/result/relaxng/tutor4_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor4_4.rng validates
diff --git a/result/relaxng/tutor5_1_err b/result/relaxng/tutor5_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor5_1_err
diff --git a/result/relaxng/tutor5_1_valid b/result/relaxng/tutor5_1_valid
new file mode 100644
index 00000000..586fd985
--- /dev/null
+++ b/result/relaxng/tutor5_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor5_1.rng validates
diff --git a/result/relaxng/tutor5_2_err b/result/relaxng/tutor5_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor5_2_err
diff --git a/result/relaxng/tutor5_2_valid b/result/relaxng/tutor5_2_valid
new file mode 100644
index 00000000..de8f4236
--- /dev/null
+++ b/result/relaxng/tutor5_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor5_2.rng validates
diff --git a/result/relaxng/tutor5_3_1.err b/result/relaxng/tutor5_3_1.err
index 594d855c..62269a00 100644
--- a/result/relaxng/tutor5_3_1.err
+++ b/result/relaxng/tutor5_3_1.err
@@ -1 +1 @@
-error detected at relaxng.c:5201
+error detected at relaxng.c:5306
diff --git a/result/relaxng/tutor5_3_err b/result/relaxng/tutor5_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor5_3_err
diff --git a/result/relaxng/tutor5_3_valid b/result/relaxng/tutor5_3_valid
new file mode 100644
index 00000000..f00a5436
--- /dev/null
+++ b/result/relaxng/tutor5_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor5_3.rng validates
diff --git a/result/relaxng/tutor5_4_err b/result/relaxng/tutor5_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor5_4_err
diff --git a/result/relaxng/tutor5_4_valid b/result/relaxng/tutor5_4_valid
new file mode 100644
index 00000000..669b41d4
--- /dev/null
+++ b/result/relaxng/tutor5_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor5_4.rng validates
diff --git a/result/relaxng/tutor5_5_err b/result/relaxng/tutor5_5_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor5_5_err
diff --git a/result/relaxng/tutor5_5_valid b/result/relaxng/tutor5_5_valid
new file mode 100644
index 00000000..4f9f0f55
--- /dev/null
+++ b/result/relaxng/tutor5_5_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor5_5.rng validates
diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err
index 22c50637..43abea66 100644
--- a/result/relaxng/tutor6_1_3.err
+++ b/result/relaxng/tutor6_1_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5061
+error detected at relaxng.c:5156
diff --git a/result/relaxng/tutor6_1_err b/result/relaxng/tutor6_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor6_1_err
diff --git a/result/relaxng/tutor6_1_valid b/result/relaxng/tutor6_1_valid
new file mode 100644
index 00000000..7440829a
--- /dev/null
+++ b/result/relaxng/tutor6_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor6_1.rng validates
diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor6_2_4.err
+++ b/result/relaxng/tutor6_2_4.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor6_2_err b/result/relaxng/tutor6_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor6_2_err
diff --git a/result/relaxng/tutor6_2_valid b/result/relaxng/tutor6_2_valid
new file mode 100644
index 00000000..ba78ec98
--- /dev/null
+++ b/result/relaxng/tutor6_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor6_2.rng validates
diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err
index 22c50637..43abea66 100644
--- a/result/relaxng/tutor6_3_1.err
+++ b/result/relaxng/tutor6_3_1.err
@@ -1 +1 @@
-error detected at relaxng.c:5061
+error detected at relaxng.c:5156
diff --git a/result/relaxng/tutor6_3_err b/result/relaxng/tutor6_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor6_3_err
diff --git a/result/relaxng/tutor6_3_valid b/result/relaxng/tutor6_3_valid
new file mode 100644
index 00000000..35dbe510
--- /dev/null
+++ b/result/relaxng/tutor6_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor6_3.rng validates
diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err
index dea493fd..3a8a7dbb 100644
--- a/result/relaxng/tutor7_1_2.err
+++ b/result/relaxng/tutor7_1_2.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4164
-error detected at relaxng.c:5255
-error detected at relaxng.c:5053
+error detected at relaxng.c:4196
+error detected at relaxng.c:5360
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err
index 17a46f66..ac8d77aa 100644
--- a/result/relaxng/tutor7_1_3.err
+++ b/result/relaxng/tutor7_1_3.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4353
-error detected at relaxng.c:5255
-error detected at relaxng.c:5053
+error detected at relaxng.c:4385
+error detected at relaxng.c:5360
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor7_1_err b/result/relaxng/tutor7_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor7_1_err
diff --git a/result/relaxng/tutor7_1_valid b/result/relaxng/tutor7_1_valid
new file mode 100644
index 00000000..03d273f0
--- /dev/null
+++ b/result/relaxng/tutor7_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor7_1.rng validates
diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err
index c8637a88..119e2331 100644
--- a/result/relaxng/tutor7_2_4.err
+++ b/result/relaxng/tutor7_2_4.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:4328
-error detected at relaxng.c:5255
+error detected at relaxng.c:4360
+error detected at relaxng.c:5360
diff --git a/result/relaxng/tutor7_2_err b/result/relaxng/tutor7_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor7_2_err
diff --git a/result/relaxng/tutor7_2_valid b/result/relaxng/tutor7_2_valid
new file mode 100644
index 00000000..cec5245f
--- /dev/null
+++ b/result/relaxng/tutor7_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor7_2.rng validates
diff --git a/result/relaxng/tutor7_3_4.err b/result/relaxng/tutor7_3_4.err
index 17a46f66..ac8d77aa 100644
--- a/result/relaxng/tutor7_3_4.err
+++ b/result/relaxng/tutor7_3_4.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4353
-error detected at relaxng.c:5255
-error detected at relaxng.c:5053
+error detected at relaxng.c:4385
+error detected at relaxng.c:5360
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor7_3_5.err b/result/relaxng/tutor7_3_5.err
index dea493fd..3a8a7dbb 100644
--- a/result/relaxng/tutor7_3_5.err
+++ b/result/relaxng/tutor7_3_5.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4164
-error detected at relaxng.c:5255
-error detected at relaxng.c:5053
+error detected at relaxng.c:4196
+error detected at relaxng.c:5360
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor7_3_err b/result/relaxng/tutor7_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor7_3_err
diff --git a/result/relaxng/tutor7_3_valid b/result/relaxng/tutor7_3_valid
new file mode 100644
index 00000000..9f1c5a38
--- /dev/null
+++ b/result/relaxng/tutor7_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor7_3.rng validates
diff --git a/result/relaxng/tutor8_1_err b/result/relaxng/tutor8_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor8_1_err
diff --git a/result/relaxng/tutor8_1_valid b/result/relaxng/tutor8_1_valid
new file mode 100644
index 00000000..a4f6ce54
--- /dev/null
+++ b/result/relaxng/tutor8_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor8_1.rng validates
diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err
index d0012f71..4317d77a 100644
--- a/result/relaxng/tutor8_2_4.err
+++ b/result/relaxng/tutor8_2_4.err
@@ -1 +1,3 @@
-error detected at relaxng.c:5053
+Unimplemented block at relaxng.c:4828
+Unimplemented block at relaxng.c:4828
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor8_2_5 b/result/relaxng/tutor8_2_5
index dcd25f93..453f7561 100644
--- a/result/relaxng/tutor8_2_5
+++ b/result/relaxng/tutor8_2_5
@@ -1,3 +1,3 @@
-Expecting an element
+Expecting an element, got empty
Extra content for element head: meta
./test/relaxng/tutor8_2_5.xml fails to validate
diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err
index 3a34a13a..9f6bbaaa 100644
--- a/result/relaxng/tutor8_2_5.err
+++ b/result/relaxng/tutor8_2_5.err
@@ -1,2 +1,2 @@
-error detected at relaxng.c:4993
-error detected at relaxng.c:5053
+error detected at relaxng.c:5059
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor8_2_6.err
+++ b/result/relaxng/tutor8_2_6.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor8_2_err b/result/relaxng/tutor8_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor8_2_err
diff --git a/result/relaxng/tutor8_2_valid b/result/relaxng/tutor8_2_valid
new file mode 100644
index 00000000..fa3dcb22
--- /dev/null
+++ b/result/relaxng/tutor8_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor8_2.rng validates
diff --git a/result/relaxng/tutor8_3_err b/result/relaxng/tutor8_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor8_3_err
diff --git a/result/relaxng/tutor8_3_valid b/result/relaxng/tutor8_3_valid
new file mode 100644
index 00000000..01c6184d
--- /dev/null
+++ b/result/relaxng/tutor8_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor8_3.rng validates
diff --git a/result/relaxng/tutor9_10_err b/result/relaxng/tutor9_10_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_10_err
diff --git a/result/relaxng/tutor9_10_valid b/result/relaxng/tutor9_10_valid
new file mode 100644
index 00000000..a8a7cb6a
--- /dev/null
+++ b/result/relaxng/tutor9_10_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_10.rng validates
diff --git a/result/relaxng/tutor9_11_err b/result/relaxng/tutor9_11_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_11_err
diff --git a/result/relaxng/tutor9_11_valid b/result/relaxng/tutor9_11_valid
new file mode 100644
index 00000000..edd98bfa
--- /dev/null
+++ b/result/relaxng/tutor9_11_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_11.rng validates
diff --git a/result/relaxng/tutor9_12_err b/result/relaxng/tutor9_12_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_12_err
diff --git a/result/relaxng/tutor9_12_valid b/result/relaxng/tutor9_12_valid
new file mode 100644
index 00000000..8881730d
--- /dev/null
+++ b/result/relaxng/tutor9_12_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_12.rng validates
diff --git a/result/relaxng/tutor9_1_err b/result/relaxng/tutor9_1_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_1_err
diff --git a/result/relaxng/tutor9_1_valid b/result/relaxng/tutor9_1_valid
new file mode 100644
index 00000000..22c5f370
--- /dev/null
+++ b/result/relaxng/tutor9_1_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_1.rng validates
diff --git a/result/relaxng/tutor9_2_err b/result/relaxng/tutor9_2_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_2_err
diff --git a/result/relaxng/tutor9_2_valid b/result/relaxng/tutor9_2_valid
new file mode 100644
index 00000000..83c34ff7
--- /dev/null
+++ b/result/relaxng/tutor9_2_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_2.rng validates
diff --git a/result/relaxng/tutor9_3_err b/result/relaxng/tutor9_3_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_3_err
diff --git a/result/relaxng/tutor9_3_valid b/result/relaxng/tutor9_3_valid
new file mode 100644
index 00000000..0a82f8eb
--- /dev/null
+++ b/result/relaxng/tutor9_3_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3.rng validates
diff --git a/result/relaxng/tutor9_4_err b/result/relaxng/tutor9_4_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_4_err
diff --git a/result/relaxng/tutor9_4_valid b/result/relaxng/tutor9_4_valid
new file mode 100644
index 00000000..42d087f3
--- /dev/null
+++ b/result/relaxng/tutor9_4_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4.rng validates
diff --git a/result/relaxng/tutor9_5_2.err b/result/relaxng/tutor9_5_2.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor9_5_2.err
+++ b/result/relaxng/tutor9_5_2.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor9_5_3.err b/result/relaxng/tutor9_5_3.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor9_5_3.err
+++ b/result/relaxng/tutor9_5_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor9_5_err b/result/relaxng/tutor9_5_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_5_err
diff --git a/result/relaxng/tutor9_5_valid b/result/relaxng/tutor9_5_valid
new file mode 100644
index 00000000..e6ddd7a3
--- /dev/null
+++ b/result/relaxng/tutor9_5_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_5.rng validates
diff --git a/result/relaxng/tutor9_6_2.err b/result/relaxng/tutor9_6_2.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor9_6_2.err
+++ b/result/relaxng/tutor9_6_2.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor9_6_3.err b/result/relaxng/tutor9_6_3.err
index d0012f71..8fcd1831 100644
--- a/result/relaxng/tutor9_6_3.err
+++ b/result/relaxng/tutor9_6_3.err
@@ -1 +1 @@
-error detected at relaxng.c:5053
+error detected at relaxng.c:5143
diff --git a/result/relaxng/tutor9_6_err b/result/relaxng/tutor9_6_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_6_err
diff --git a/result/relaxng/tutor9_6_valid b/result/relaxng/tutor9_6_valid
new file mode 100644
index 00000000..897a0929
--- /dev/null
+++ b/result/relaxng/tutor9_6_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_6.rng validates
diff --git a/result/relaxng/tutor9_7_err b/result/relaxng/tutor9_7_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_7_err
diff --git a/result/relaxng/tutor9_7_valid b/result/relaxng/tutor9_7_valid
new file mode 100644
index 00000000..e171320b
--- /dev/null
+++ b/result/relaxng/tutor9_7_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_7.rng validates
diff --git a/result/relaxng/tutor9_8_err b/result/relaxng/tutor9_8_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_8_err
diff --git a/result/relaxng/tutor9_8_valid b/result/relaxng/tutor9_8_valid
new file mode 100644
index 00000000..41a926c7
--- /dev/null
+++ b/result/relaxng/tutor9_8_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_8.rng validates
diff --git a/result/relaxng/tutor9_9_err b/result/relaxng/tutor9_9_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutor9_9_err
diff --git a/result/relaxng/tutor9_9_valid b/result/relaxng/tutor9_9_valid
new file mode 100644
index 00000000..c4a95fd1
--- /dev/null
+++ b/result/relaxng/tutor9_9_valid
@@ -0,0 +1 @@
+./test/relaxng/tutor9_9.rng validates
diff --git a/result/relaxng/tutorA_err b/result/relaxng/tutorA_err
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/result/relaxng/tutorA_err
diff --git a/result/relaxng/tutorA_valid b/result/relaxng/tutorA_valid
new file mode 100644
index 00000000..b4ab892f
--- /dev/null
+++ b/result/relaxng/tutorA_valid
@@ -0,0 +1 @@
+./test/relaxng/tutorA.rng validates
diff --git a/test/relaxng/interleave0_0.rng b/test/relaxng/interleave0_0.rng
new file mode 100644
index 00000000..b1055496
--- /dev/null
+++ b/test/relaxng/interleave0_0.rng
@@ -0,0 +1,24 @@
+<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
+ <zeroOrMore>
+ <element name="card">
+ <interleave>
+ <zeroOrMore>
+ <element name="name">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="company">
+ <text/>
+ </element>
+ <element name="email">
+ <text/>
+ </element>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </zeroOrMore>
+</element>
diff --git a/test/relaxng/interleave1_0.rng b/test/relaxng/interleave1_0.rng
new file mode 100644
index 00000000..e8e94d01
--- /dev/null
+++ b/test/relaxng/interleave1_0.rng
@@ -0,0 +1,15 @@
+<element name="doc" xmlns="http://relaxng.org/ns/structure/1.0">
+ <interleave>
+ <element name="a">
+ <empty/>
+ </element>
+ <zeroOrMore>
+ <element name="b">
+ <empty/>
+ </element>
+ </zeroOrMore>
+ </interleave>
+ <element name="c">
+ <empty/>
+ </element>
+</element>
diff --git a/test/relaxng/tutor14_1.rng b/test/relaxng/tutor14_1.rng
new file mode 100644
index 00000000..87443563
--- /dev/null
+++ b/test/relaxng/tutor14_1.rng
@@ -0,0 +1,53 @@
+<element name="html" xmlns="http://relaxng.org/ns/structure/1.0">
+ <element name="head">
+ <element name="title">
+ <text/>
+ </element>
+ </element>
+ <element name="body">
+ <element name="table">
+ <attribute name="class">
+ <value>addressBook</value>
+ </attribute>
+ <oneOrMore>
+ <element name="tr">
+ <attribute name="class">
+ <value>card</value>
+ </attribute>
+ <element name="td">
+ <attribute name="class">
+ <value>name</value>
+ </attribute>
+ <interleave>
+ <text/>
+ <optional>
+ <element name="span">
+ <attribute name="class">
+ <value>givenName</value>
+ </attribute>
+ <text/>
+ </element>
+ </optional>
+ <optional>
+ <element name="span">
+ <attribute name="class">
+ <value>familyName</value>
+ </attribute>
+ <text/>
+ </element>
+ </optional>
+ </interleave>
+ </element>
+ <element name="td">
+ <attribute name="class">
+ <value>email</value>
+ </attribute>
+ <text/>
+ </element>
+ </element>
+ </oneOrMore>
+ </element>
+ </element>
+</element>
+
+
diff --git a/test/relaxng/tutorA.rng b/test/relaxng/tutorA.rng
new file mode 100644
index 00000000..b9ef4e17
--- /dev/null
+++ b/test/relaxng/tutorA.rng
@@ -0,0 +1,334 @@
+<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+ ns="http://relaxng.org/ns/structure/1.0"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="pattern"/>
+ </start>
+
+ <define name="pattern">
+ <choice>
+ <element name="element">
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="attribute">
+ <ref name="common-atts"/>
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <ref name="pattern"/>
+ </optional>
+ </interleave>
+ </element>
+ <element name="group">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="interleave">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="optional">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="zeroOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="oneOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="list">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="mixed">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="ref">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="parentRef">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="empty">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="text">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="value">
+ <optional>
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ </optional>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ <element name="data">
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <interleave>
+ <ref name="other"/>
+ <group>
+ <zeroOrMore>
+ <element name="param">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="except">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </optional>
+ </group>
+ </interleave>
+ </element>
+ <element name="notAllowed">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="externalRef">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="grammar">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="grammar-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ <element name="include">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="include-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="start-element">
+ <element name="start">
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-pattern"/>
+ </element>
+ </define>
+
+ <define name="define-element">
+ <element name="define">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </define>
+
+ <define name="combine-att">
+ <optional>
+ <attribute name="combine">
+ <choice>
+ <value>choice</value>
+ <value>interleave</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+
+ <define name="open-patterns">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="pattern"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-pattern">
+ <interleave>
+ <ref name="other"/>
+ <ref name="pattern"/>
+ </interleave>
+ </define>
+
+ <define name="name-class">
+ <choice>
+ <element name="name">
+ <ref name="common-atts"/>
+ <data type="QName"/>
+ </element>
+ <element name="anyName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="nsName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-name-classes"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="except-name-class">
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <element name="except">
+ <ref name="open-name-classes"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="open-name-classes">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="name-class"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-name-class">
+ <interleave>
+ <ref name="other"/>
+ <ref name="name-class"/>
+ </interleave>
+ </define>
+
+ <define name="common-atts">
+ <optional>
+ <attribute name="ns"/>
+ </optional>
+ <optional>
+ <attribute name="datatypeLibrary">
+ <data type="anyURI"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName/>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ </define>
+
+ <define name="other">
+ <zeroOrMore>
+ <element>
+ <anyName>
+ <except>
+ <nsName/>
+ </except>
+ </anyName>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </zeroOrMore>
+ </define>
+
+ <define name="any">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
+