From 154877e55495468de2e971531fb7f18a644a3412 Mon Sep 17 00:00:00 2001
From: Daniel Veillard
Date: Thu, 30 Jan 2003 12:17:05 +0000
Subject: [PATCH] more work done in the train augmented/updated the regression
tests Daniel
* relaxng: more work done in the train
* test/relaxng/* result/relaxng/*: augmented/updated the
regression tests
Daniel
---
ChangeLog | 6 +++
doc/FAQ.html | 4 +-
doc/architecture.html | 2 +-
doc/catalog.html | 4 +-
doc/contribs.html | 2 +-
doc/index.html | 2 +-
doc/xmldtd.html | 2 +-
doc/xmlmem.html | 2 +-
relaxng.c | 95 +++++++++++++++++++++++------------
result/relaxng/tutor3_2_1.err | 4 +-
result/relaxng/tutor3_5_2.err | 2 +-
result/relaxng/tutor4_1_1 | 3 +-
result/relaxng/tutor4_1_1.err | 9 ++--
result/relaxng/tutor5_3_1.err | 2 +-
result/relaxng/tutor6_1_3.err | 2 +-
result/relaxng/tutor6_2_4.err | 2 +-
result/relaxng/tutor6_3_1.err | 2 +-
result/relaxng/tutor7_1_2.err | 6 +--
result/relaxng/tutor7_1_3.err | 6 +--
result/relaxng/tutor7_2_4.err | 4 +-
result/relaxng/tutor7_3_4.err | 6 +--
result/relaxng/tutor7_3_5.err | 6 +--
result/relaxng/tutor8_2_4.err | 2 +-
result/relaxng/tutor8_2_5.err | 4 +-
result/relaxng/tutor8_2_6.err | 2 +-
result/relaxng/tutor9_3_1 | 1 +
result/relaxng/tutor9_3_1.err | 7 +++
result/relaxng/tutor9_3_2 | 1 +
result/relaxng/tutor9_3_2.err | 8 +++
result/relaxng/tutor9_4_1 | 1 +
result/relaxng/tutor9_4_1.err | 6 +++
result/relaxng/tutor9_4_2 | 1 +
result/relaxng/tutor9_4_2.err | 7 +++
test/relaxng/tutor9_3.rng | 37 ++++++++++++++
test/relaxng/tutor9_3_1.xml | 1 +
test/relaxng/tutor9_3_2.xml | 1 +
test/relaxng/tutor9_4.rng | 36 +++++++++++++
test/relaxng/tutor9_4_1.xml | 1 +
test/relaxng/tutor9_4_2.xml | 1 +
test/relaxng/tutor9_5.rng | 25 +++++++++
40 files changed, 243 insertions(+), 72 deletions(-)
create mode 100644 result/relaxng/tutor9_3_1
create mode 100644 result/relaxng/tutor9_3_1.err
create mode 100644 result/relaxng/tutor9_3_2
create mode 100644 result/relaxng/tutor9_3_2.err
create mode 100644 result/relaxng/tutor9_4_1
create mode 100644 result/relaxng/tutor9_4_1.err
create mode 100644 result/relaxng/tutor9_4_2
create mode 100644 result/relaxng/tutor9_4_2.err
create mode 100644 test/relaxng/tutor9_3.rng
create mode 100644 test/relaxng/tutor9_3_1.xml
create mode 100644 test/relaxng/tutor9_3_2.xml
create mode 100644 test/relaxng/tutor9_4.rng
create mode 100644 test/relaxng/tutor9_4_1.xml
create mode 100644 test/relaxng/tutor9_4_2.xml
create mode 100644 test/relaxng/tutor9_5.rng
diff --git a/ChangeLog b/ChangeLog
index fef26623..60c94639 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Jan 30 14:06:55 CET 2003 Daniel Veillard
+
+ * relaxng: more work done in the train
+ * test/relaxng/* result/relaxng/*: augmented/updated the
+ regression tests
+
Wed Jan 29 23:44:58 CET 2003 Daniel Veillard
* relaxng.c: debugging of externalRef
diff --git a/doc/FAQ.html b/doc/FAQ.html
index 84093c5c..6201fe6a 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -264,7 +264,7 @@ pnode=pxmlDoc->children->children;
but it does not work. If I change it to
pnode=pxmlDoc->children->children->next;
then it works. Can someone explain it to me.
-
+
In XML all characters in the content of the document are significant
including blanks and formatting line breaks.
The extra nodes you are wondering about are just that, text nodes with
@@ -367,7 +367,7 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
etc ...
-
+
Daniel Veillard
diff --git a/doc/architecture.html b/doc/architecture.html
index 4762ba80..7f3844e8 100644
--- a/doc/architecture.html
+++ b/doc/architecture.html
@@ -113,7 +113,7 @@ of the block interfaces are public. The main components are:
Graphically this gives the following:

-
+
Daniel Veillard
diff --git a/doc/catalog.html b/doc/catalog.html
index 706ca47c..ee8adc38 100644
--- a/doc/catalog.html
+++ b/doc/catalog.html
@@ -149,7 +149,7 @@ started.
Catalogs is far more flexible, more recent, uses an XML syntax and
should scale quite better. This is the default option of libxml.
-
+
In a normal environment libxml will by default check the presence of a
catalog in /etc/xml/catalog, and assuming it has been correctly populated,
@@ -388,7 +388,7 @@ provided because this functionality may be useful for client tools.
try to avoid troubles in multithreaded environments. The code is now thread
safe assuming that the libxml library has been compiled with threads
support.
-
+
The XML Catalog specification is relatively recent so there isn't much
literature to point at:
diff --git a/doc/contribs.html b/doc/contribs.html
index cc7fd694..77b7e201 100644
--- a/doc/contribs.html
+++ b/doc/contribs.html
@@ -136,7 +136,7 @@ A:link, A:visited, A:active { text-decoration: underline }
Digital Signature implementations for libxml2
-
+
Daniel Veillard
diff --git a/doc/index.html b/doc/index.html
index 2d09aa0c..1e432250 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -95,7 +95,7 @@ A:link, A:visited, A:active { text-decoration: underline }
-
+
Libxml is the XML C library developed for the Gnome project. XML itself
is a metalanguage to design markup languages, i.e. text language where
semantic and structure are added to the content using extra "markup"
diff --git a/doc/xmldtd.html b/doc/xmldtd.html
index 2e129fcb..c6c25281 100644
--- a/doc/xmldtd.html
+++ b/doc/xmldtd.html
@@ -249,7 +249,7 @@ will just list one for now, others pointers welcome:
I suggest looking at the examples found under test/valid/dtd and any of
the large number of books available on XML. The dia example in test/valid
should be both simple and complete enough to allow you to build your own.
-
+
Daniel Veillard
|
|
|
|
diff --git a/doc/xmlmem.html b/doc/xmlmem.html
index f863c80d..ddce58c3 100644
--- a/doc/xmlmem.html
+++ b/doc/xmlmem.html
@@ -218,7 +218,7 @@ of a number of things:
validation, DOM, XPath or XPointer, but really need to work fixed memory
requirements, then the SAX interface should be used.
-
+
Daniel Veillard
diff --git a/relaxng.c b/relaxng.c
index 85c49a07..86ad215c 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -1248,7 +1248,7 @@ static xmlRelaxNGDefinePtr xmlRelaxNGParseAttribute(
static xmlRelaxNGDefinePtr xmlRelaxNGParseElement(
xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node);
static xmlRelaxNGDefinePtr xmlRelaxNGParsePatterns(
- xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes);
+ xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes, int group);
static xmlRelaxNGDefinePtr xmlRelaxNGParsePattern(
xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node);
static xmlRelaxNGPtr xmlRelaxNGParseDocument(
@@ -1494,6 +1494,8 @@ xmlRelaxNGCompareElemDefLists(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
xmlRelaxNGDefinePtr *def2) {
xmlRelaxNGDefinePtr *basedef2 = def2;
+ if ((def1 == NULL) || (def2 == NULL))
+ return(1);
if ((*def1 == NULL) || (*def2 == NULL))
return(1);
while (*def1 != NULL) {
@@ -1584,7 +1586,8 @@ xmlRelaxNGGetElements(xmlRelaxNGParserCtxtPtr ctxt,
continue;
}
}
- if (cur == def) return(ret);
+ if (cur == def)
+ return(ret);
if (cur->next != NULL) {
cur = cur->next;
continue;
@@ -1651,16 +1654,13 @@ xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
goto error;
cur = def->content;
while (cur != NULL) {
- list = xmlRelaxNGGetElements(ctxt, cur);
- if (list != NULL) {
- groups[nbgroups] = (xmlRelaxNGInterleaveGroupPtr)
- xmlMalloc(sizeof(xmlRelaxNGInterleaveGroup));
- if (groups[nbgroups] == NULL)
- goto error;
- groups[nbgroups]->rule = cur;
- groups[nbgroups]->defs = list;
- nbgroups++;
- }
+ groups[nbgroups] = (xmlRelaxNGInterleaveGroupPtr)
+ xmlMalloc(sizeof(xmlRelaxNGInterleaveGroup));
+ if (groups[nbgroups] == NULL)
+ goto error;
+ groups[nbgroups]->rule = cur;
+ groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur);
+ nbgroups++;
cur = cur->next;
}
list = NULL;
@@ -1817,8 +1817,7 @@ xmlRelaxNGParseDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
} else {
olddefine = ctxt->define;
ctxt->define = name;
- def->content = xmlRelaxNGParsePatterns(ctxt,
- node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 0);
ctxt->define = olddefine;
}
if (ctxt->grammar->defs == NULL)
@@ -1833,11 +1832,22 @@ xmlRelaxNGParseDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
} else {
tmp = xmlHashAddEntry(ctxt->grammar->defs, name, def);
if (tmp < 0) {
- TODO
- /* store and implement 4.17 on combining */
- ctxt->nbErrors++;
- ret = -1;
- xmlRelaxNGFreeDefine(def);
+ xmlRelaxNGDefinePtr prev;
+
+ prev = xmlHashLookup(ctxt->grammar->defs, name);
+ if (prev == NULL) {
+ if (ctxt->error != NULL)
+ ctxt->error(ctxt->userData,
+ "Internal error on define aggregation of %s\n",
+ name);
+ ctxt->nbErrors++;
+ ret = -1;
+ xmlRelaxNGFreeDefine(def);
+ } else {
+ while (prev->nextHash != NULL)
+ prev = prev->nextHash;
+ prev->nextHash = def;
+ }
}
}
}
@@ -1882,31 +1892,31 @@ xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_ZEROORMORE;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 1);
} else if (IS_RELAXNG(node, "oneOrMore")) {
def = xmlRelaxNGNewDefine(ctxt, node);
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_ONEORMORE;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 1);
} else if (IS_RELAXNG(node, "optional")) {
def = xmlRelaxNGNewDefine(ctxt, node);
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_OPTIONAL;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 1);
} else if (IS_RELAXNG(node, "choice")) {
def = xmlRelaxNGNewDefine(ctxt, node);
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_CHOICE;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 0);
} else if (IS_RELAXNG(node, "group")) {
def = xmlRelaxNGNewDefine(ctxt, node);
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_GROUP;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 0);
} else if (IS_RELAXNG(node, "ref")) {
def = xmlRelaxNGNewDefine(ctxt, node);
if (def == NULL)
@@ -1978,7 +1988,7 @@ xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
if (def == NULL)
return(NULL);
def->type = XML_RELAXNG_LIST;
- def->content = xmlRelaxNGParsePatterns(ctxt, node->children);
+ def->content = xmlRelaxNGParsePatterns(ctxt, node->children, 0);
} else if (IS_RELAXNG(node, "interleave")) {
def = xmlRelaxNGParseInterleave(ctxt, node);
} else if (IS_RELAXNG(node, "externalRef")) {
@@ -2244,13 +2254,15 @@ xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
* xmlRelaxNGParsePatterns:
* @ctxt: a Relax-NG parser context
* @nodes: list of nodes
+ * @group: use an implicit for elements
*
* parse the content of a RelaxNG start node.
*
* Returns the definition pointer or NULL in case of error.
*/
static xmlRelaxNGDefinePtr
-xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes) {
+xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes,
+ int group) {
xmlRelaxNGDefinePtr def = NULL, last = NULL, cur, parent;
parent = ctxt->def;
@@ -2260,7 +2272,8 @@ xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes) {
if (def == NULL) {
def = last = cur;
} else {
- if ((def->type == XML_RELAXNG_ELEMENT) && (def == last)) {
+ if ((group == 1) && (def->type == XML_RELAXNG_ELEMENT) &&
+ (def == last)) {
def = xmlRelaxNGNewDefine(ctxt, nodes);
def->type = XML_RELAXNG_GROUP;
def->content = last;
@@ -2306,7 +2319,7 @@ xmlRelaxNGParseStart(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes) {
TODO
xmlElemDump(stdout, nodes->doc, nodes);
} else {
- def = xmlRelaxNGParsePatterns(ctxt, nodes);
+ def = xmlRelaxNGParsePatterns(ctxt, nodes, 1);
ctxt->grammar->start = def;
}
nodes = nodes->next;
@@ -2450,7 +2463,7 @@ xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
name);
ctxt->nbErrors++;
}
- } else if (xmlStrEqual(combine, BAD_CAST "choice")) {
+ } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
if (choiceOrInterleave == -1)
choiceOrInterleave = 0;
else if (choiceOrInterleave == 1) {
@@ -2493,9 +2506,9 @@ xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
if (cur == NULL)
return;
if (choiceOrInterleave == 0)
- cur->type = XML_RELAXNG_CHOICE;
- else
cur->type = XML_RELAXNG_INTERLEAVE;
+ else
+ cur->type = XML_RELAXNG_CHOICE;
tmp = define;
last = NULL;
while (tmp != NULL) {
@@ -2523,6 +2536,26 @@ xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
tmp = tmp->nextHash;
}
define->content = cur;
+ if (choiceOrInterleave == 0) {
+ if (ctxt->interleaves == NULL)
+ ctxt->interleaves = xmlHashCreate(10);
+ if (ctxt->interleaves == NULL) {
+ if (ctxt->error != NULL)
+ ctxt->error(ctxt->userData,
+ "Failed to create interleaves hash table\n");
+ ctxt->nbErrors++;
+ } else {
+ char tmpname[32];
+
+ snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
+ if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) < 0) {
+ if (ctxt->error != NULL)
+ ctxt->error(ctxt->userData,
+ "Failed to add %s to hash table\n", tmpname);
+ ctxt->nbErrors++;
+ }
+ }
+ }
}
/**
diff --git a/result/relaxng/tutor3_2_1.err b/result/relaxng/tutor3_2_1.err
index bb09dbc8..28a6d518 100644
--- a/result/relaxng/tutor3_2_1.err
+++ b/result/relaxng/tutor3_2_1.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4260
-error detected at relaxng.c:4308
+error detected at relaxng.c:4293
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor3_5_2.err b/result/relaxng/tutor3_5_2.err
index 3b9d5ead..fc5adef9 100644
--- a/result/relaxng/tutor3_5_2.err
+++ b/result/relaxng/tutor3_5_2.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(name): -1
xmlRelaxNGValidateDefinition(): validated email : 0
xmlRelaxNGValidateDefinition(): validated card : -1
-error detected at relaxng.c:4308
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated addressBook : -1
diff --git a/result/relaxng/tutor4_1_1 b/result/relaxng/tutor4_1_1
index d8f436de..373a10d7 100644
--- a/result/relaxng/tutor4_1_1
+++ b/result/relaxng/tutor4_1_1
@@ -1 +1,2 @@
-./test/relaxng/tutor4_1_1.xml validates
+Extra content for element addressBook
+./test/relaxng/tutor4_1_1.xml validation generated an internal error
diff --git a/result/relaxng/tutor4_1_1.err b/result/relaxng/tutor4_1_1.err
index adaf345e..1e44ce99 100644
--- a/result/relaxng/tutor4_1_1.err
+++ b/result/relaxng/tutor4_1_1.err
@@ -1,7 +1,4 @@
xmlRelaxNGValidateDefinition(): validated name : 0
-xmlRelaxNGValidateDefinition(): validated email : 0
-xmlRelaxNGValidateDefinition(): validated card : 0
-xmlRelaxNGValidateDefinition(): validated name : 0
-xmlRelaxNGValidateDefinition(): validated email : 0
-xmlRelaxNGValidateDefinition(): validated card : 0
-xmlRelaxNGValidateDefinition(): validated addressBook : 0
+xmlRelaxNGValidateDefinition(): validated card : -1
+error detected at relaxng.c:4341
+xmlRelaxNGValidateDefinition(): validated addressBook : -1
diff --git a/result/relaxng/tutor5_3_1.err b/result/relaxng/tutor5_3_1.err
index 7c13c3c8..a719419f 100644
--- a/result/relaxng/tutor5_3_1.err
+++ b/result/relaxng/tutor5_3_1.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:4439
+error detected at relaxng.c:4472
xmlRelaxNGValidateDefinition(): validated note : 0
xmlRelaxNGValidateDefinition(): validated bad : -1
diff --git a/result/relaxng/tutor6_1_3.err b/result/relaxng/tutor6_1_3.err
index 722275e5..bfb47f32 100644
--- a/result/relaxng/tutor6_1_3.err
+++ b/result/relaxng/tutor6_1_3.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(preferredFormat): -1
xmlRelaxNGValidateAttribute(email): 0
xmlRelaxNGValidateAttribute(name): 0
-error detected at relaxng.c:4316
+error detected at relaxng.c:4349
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor6_2_4.err b/result/relaxng/tutor6_2_4.err
index 86b2dbbb..02ace4cb 100644
--- a/result/relaxng/tutor6_2_4.err
+++ b/result/relaxng/tutor6_2_4.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateDefinition(): validated name : 0
xmlRelaxNGValidateDefinition(): validated email : 0
-error detected at relaxng.c:4308
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated preferredFormat : -1
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor6_3_1.err b/result/relaxng/tutor6_3_1.err
index 722275e5..bfb47f32 100644
--- a/result/relaxng/tutor6_3_1.err
+++ b/result/relaxng/tutor6_3_1.err
@@ -1,5 +1,5 @@
xmlRelaxNGValidateAttribute(preferredFormat): -1
xmlRelaxNGValidateAttribute(email): 0
xmlRelaxNGValidateAttribute(name): 0
-error detected at relaxng.c:4316
+error detected at relaxng.c:4349
xmlRelaxNGValidateDefinition(): validated card : -1
diff --git a/result/relaxng/tutor7_1_2.err b/result/relaxng/tutor7_1_2.err
index 472f0e67..d31ade5c 100644
--- a/result/relaxng/tutor7_1_2.err
+++ b/result/relaxng/tutor7_1_2.err
@@ -1,5 +1,5 @@
Unimplemented block at xmlschemastypes.c:1132
-error detected at relaxng.c:3518
-error detected at relaxng.c:4493
-error detected at relaxng.c:4308
+error detected at relaxng.c:3551
+error detected at relaxng.c:4526
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor7_1_3.err b/result/relaxng/tutor7_1_3.err
index 095756e9..1bb9ef05 100644
--- a/result/relaxng/tutor7_1_3.err
+++ b/result/relaxng/tutor7_1_3.err
@@ -1,6 +1,6 @@
Unimplemented block at xmlschemastypes.c:1132
Unimplemented block at xmlschemastypes.c:1132
-error detected at relaxng.c:3706
-error detected at relaxng.c:4493
-error detected at relaxng.c:4308
+error detected at relaxng.c:3739
+error detected at relaxng.c:4526
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor7_2_4.err b/result/relaxng/tutor7_2_4.err
index edb18a44..aa5e8aef 100644
--- a/result/relaxng/tutor7_2_4.err
+++ b/result/relaxng/tutor7_2_4.err
@@ -1,3 +1,3 @@
-error detected at relaxng.c:3681
-error detected at relaxng.c:4493
+error detected at relaxng.c:3714
+error detected at relaxng.c:4526
xmlRelaxNGValidateDefinition(): validated vector : -1
diff --git a/result/relaxng/tutor7_3_4.err b/result/relaxng/tutor7_3_4.err
index e955ba51..880a6092 100644
--- a/result/relaxng/tutor7_3_4.err
+++ b/result/relaxng/tutor7_3_4.err
@@ -1,7 +1,7 @@
Unimplemented block at xmlschemastypes.c:1135
Unimplemented block at xmlschemastypes.c:1135
Unimplemented block at xmlschemastypes.c:1135
-error detected at relaxng.c:3706
-error detected at relaxng.c:4493
-error detected at relaxng.c:4308
+error detected at relaxng.c:3739
+error detected at relaxng.c:4526
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated path : -1
diff --git a/result/relaxng/tutor7_3_5.err b/result/relaxng/tutor7_3_5.err
index b0622fe7..b49a8a5b 100644
--- a/result/relaxng/tutor7_3_5.err
+++ b/result/relaxng/tutor7_3_5.err
@@ -1,5 +1,5 @@
Unimplemented block at xmlschemastypes.c:1135
-error detected at relaxng.c:3518
-error detected at relaxng.c:4493
-error detected at relaxng.c:4308
+error detected at relaxng.c:3551
+error detected at relaxng.c:4526
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated path : -1
diff --git a/result/relaxng/tutor8_2_4.err b/result/relaxng/tutor8_2_4.err
index e4d178a8..bfce578a 100644
--- a/result/relaxng/tutor8_2_4.err
+++ b/result/relaxng/tutor8_2_4.err
@@ -3,5 +3,5 @@ xmlRelaxNGComputeInterleaves(interleave0)
6 groups
xmlRelaxNGValidateDefinition(): validated title : 0
xmlRelaxNGValidateDefinition(): validated title : 0
-error detected at relaxng.c:4308
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/result/relaxng/tutor8_2_5.err b/result/relaxng/tutor8_2_5.err
index 1ddcbe63..40809094 100644
--- a/result/relaxng/tutor8_2_5.err
+++ b/result/relaxng/tutor8_2_5.err
@@ -1,6 +1,6 @@
xmlRelaxNGComputeInterleaves(interleave0)
6 child
6 groups
-error detected at relaxng.c:4254
-error detected at relaxng.c:4308
+error detected at relaxng.c:4287
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/result/relaxng/tutor8_2_6.err b/result/relaxng/tutor8_2_6.err
index e4b1e126..2632bfd2 100644
--- a/result/relaxng/tutor8_2_6.err
+++ b/result/relaxng/tutor8_2_6.err
@@ -4,5 +4,5 @@ xmlRelaxNGComputeInterleaves(interleave0)
xmlRelaxNGValidateDefinition(): validated title : 0
xmlRelaxNGValidateDefinition(): validated base : 0
xmlRelaxNGValidateDefinition(): validated base : 0
-error detected at relaxng.c:4308
+error detected at relaxng.c:4341
xmlRelaxNGValidateDefinition(): validated head : -1
diff --git a/result/relaxng/tutor9_3_1 b/result/relaxng/tutor9_3_1
new file mode 100644
index 00000000..80ac24ca
--- /dev/null
+++ b/result/relaxng/tutor9_3_1
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3_1.xml validates
diff --git a/result/relaxng/tutor9_3_1.err b/result/relaxng/tutor9_3_1.err
new file mode 100644
index 00000000..246daabd
--- /dev/null
+++ b/result/relaxng/tutor9_3_1.err
@@ -0,0 +1,7 @@
+xmlRelaxNGCheckCombine(): merging inline.class defines: 1
+xmlRelaxNGComputeInterleaves(interleave0)
+ 2 child
+ 2 groups
+xmlRelaxNGValidateDefinition(): validated em : 0
+xmlRelaxNGValidateDefinition(): validated bold : 0
+xmlRelaxNGValidateDefinition(): validated data : 0
diff --git a/result/relaxng/tutor9_3_2 b/result/relaxng/tutor9_3_2
new file mode 100644
index 00000000..a361c934
--- /dev/null
+++ b/result/relaxng/tutor9_3_2
@@ -0,0 +1 @@
+./test/relaxng/tutor9_3_2.xml validates
diff --git a/result/relaxng/tutor9_3_2.err b/result/relaxng/tutor9_3_2.err
new file mode 100644
index 00000000..5010dcfd
--- /dev/null
+++ b/result/relaxng/tutor9_3_2.err
@@ -0,0 +1,8 @@
+xmlRelaxNGCheckCombine(): merging inline.class defines: 1
+xmlRelaxNGComputeInterleaves(interleave0)
+ 2 child
+ 2 groups
+xmlRelaxNGValidateDefinition(): validated code : 0
+xmlRelaxNGValidateDefinition(): validated em : 0
+xmlRelaxNGValidateDefinition(): validated italic : 0
+xmlRelaxNGValidateDefinition(): validated data : 0
diff --git a/result/relaxng/tutor9_4_1 b/result/relaxng/tutor9_4_1
new file mode 100644
index 00000000..514eb980
--- /dev/null
+++ b/result/relaxng/tutor9_4_1
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4_1.xml validates
diff --git a/result/relaxng/tutor9_4_1.err b/result/relaxng/tutor9_4_1.err
new file mode 100644
index 00000000..67598dcc
--- /dev/null
+++ b/result/relaxng/tutor9_4_1.err
@@ -0,0 +1,6 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 2 child
+ 2 groups
+xmlRelaxNGValidateDefinition(): validated em : 0
+xmlRelaxNGValidateDefinition(): validated bold : 0
+xmlRelaxNGValidateDefinition(): validated data : 0
diff --git a/result/relaxng/tutor9_4_2 b/result/relaxng/tutor9_4_2
new file mode 100644
index 00000000..ba780dc6
--- /dev/null
+++ b/result/relaxng/tutor9_4_2
@@ -0,0 +1 @@
+./test/relaxng/tutor9_4_2.xml validates
diff --git a/result/relaxng/tutor9_4_2.err b/result/relaxng/tutor9_4_2.err
new file mode 100644
index 00000000..74f84174
--- /dev/null
+++ b/result/relaxng/tutor9_4_2.err
@@ -0,0 +1,7 @@
+xmlRelaxNGComputeInterleaves(interleave0)
+ 2 child
+ 2 groups
+xmlRelaxNGValidateDefinition(): validated code : 0
+xmlRelaxNGValidateDefinition(): validated em : 0
+xmlRelaxNGValidateDefinition(): validated italic : 0
+xmlRelaxNGValidateDefinition(): validated data : 0
diff --git a/test/relaxng/tutor9_3.rng b/test/relaxng/tutor9_3.rng
new file mode 100644
index 00000000..62c6e7d2
--- /dev/null
+++ b/test/relaxng/tutor9_3.rng
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/relaxng/tutor9_3_1.xml b/test/relaxng/tutor9_3_1.xml
new file mode 100644
index 00000000..50bfa207
--- /dev/null
+++ b/test/relaxng/tutor9_3_1.xml
@@ -0,0 +1 @@
+ a b c d e
diff --git a/test/relaxng/tutor9_3_2.xml b/test/relaxng/tutor9_3_2.xml
new file mode 100644
index 00000000..f0895425
--- /dev/null
+++ b/test/relaxng/tutor9_3_2.xml
@@ -0,0 +1 @@
+ a b c
d foo e
diff --git a/test/relaxng/tutor9_4.rng b/test/relaxng/tutor9_4.rng
new file mode 100644
index 00000000..d3b7e8ef
--- /dev/null
+++ b/test/relaxng/tutor9_4.rng
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/relaxng/tutor9_4_1.xml b/test/relaxng/tutor9_4_1.xml
new file mode 100644
index 00000000..50bfa207
--- /dev/null
+++ b/test/relaxng/tutor9_4_1.xml
@@ -0,0 +1 @@
+ a b c d e
diff --git a/test/relaxng/tutor9_4_2.xml b/test/relaxng/tutor9_4_2.xml
new file mode 100644
index 00000000..f0895425
--- /dev/null
+++ b/test/relaxng/tutor9_4_2.xml
@@ -0,0 +1 @@
+ a b c
d foo e
diff --git a/test/relaxng/tutor9_5.rng b/test/relaxng/tutor9_5.rng
new file mode 100644
index 00000000..b8b0a846
--- /dev/null
+++ b/test/relaxng/tutor9_5.rng
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+