a bit of work on Schemas try to make it more useful changed the Schemas

* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
  a bit of work on Schemas
* testSchemas.c: try to make it more useful
* test/schemas/* result/schemas/* Makefile.am: changed the
  Schemas regression test procedure, started adding a few samples
Daniel
diff --git a/xmlschemas.c b/xmlschemas.c
index f211095..4ccc1f1 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -24,8 +24,9 @@
 #include <libxml/xmlautomata.h>
 #include <libxml/xmlregexp.h>
 
-#define DEBUG 1                 /* very verobose output */
-/* #define DEBUG_CONTENT 1 */
+#define DEBUG 1                 /* very verbose output */
+#define DEBUG_CONTENT 1
+#define DEBUG_TYPE 1
 /* #define DEBUG_AUTOMATA 1 */
 
 #define UNBOUNDED (1 << 30)
@@ -3058,8 +3059,9 @@
     xmlAutomataSetFinalState(ctxt->am, ctxt->state);
     elem->contModel = xmlAutomataCompile(ctxt->am);
 #ifdef DEBUG_CONTENT
-    printf("Content model of %s:\n", name);
-    xmlRegexpPrint(stdout, elem->contModel);
+    xmlGenericError(xmlGenericErrorContext,
+                    "Content model of %s:\n", name);
+    xmlRegexpPrint(stderr, elem->contModel);
 #endif
     ctxt->state = NULL;
     xmlFreeAutomata(ctxt->am);
@@ -3205,6 +3207,7 @@
 		if (typeDecl->subtypes != NULL)
 		    xmlSchemaTypeFixup(typeDecl->subtypes, ctxt, NULL);
 
+		explicitContentType = XML_SCHEMA_CONTENT_ELEMENTS;
 		if (typeDecl->subtypes == NULL)
 		    /* 1.1.1 */
 		    explicitContentType = XML_SCHEMA_CONTENT_EMPTY;
@@ -3299,6 +3302,37 @@
 		break;
 	}
     } 
+#ifdef DEBUG_TYPE
+    xmlGenericError(xmlGenericErrorContext,
+	    "Type of %s : %s:%d :", name, typeDecl->node->doc->URL,
+	            xmlGetLineNo(typeDecl->node));
+    switch (typeDecl->contentType) {
+	case XML_SCHEMA_CONTENT_SIMPLE:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "simple\n"); break;
+	case XML_SCHEMA_CONTENT_ELEMENTS:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "elements\n"); break;
+        case XML_SCHEMA_CONTENT_UNKNOWN:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "unknown !!!\n"); break;
+        case XML_SCHEMA_CONTENT_EMPTY:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "empty\n"); break;
+        case XML_SCHEMA_CONTENT_MIXED:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "mixed\n"); break;
+        case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "mixed or elems\n"); break;
+        case XML_SCHEMA_CONTENT_BASIC:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "basic\n"); break;
+	default:
+	    xmlGenericError(xmlGenericErrorContext,
+		    "not registered !!!\n"); break;
+    }
+#endif
 }
 
 /**
@@ -3970,8 +4004,9 @@
     xmlSchemaTypePtr oldtype = ctxt->type;
     xmlNodePtr oldnode = ctxt->node;
 #ifdef DEBUG_CONTENT
-    printf("xmlSchemaValidateCallback: %s, %s, %s\n",
-	   name, type->name, node->name);
+    xmlGenericError(xmlGenericErrorContext,
+                    "xmlSchemaValidateCallback: %s, %s, %s\n",
+		    name, type->name, node->name);
 #endif
     ctxt->type = type;
     ctxt->node = node;
@@ -4195,10 +4230,12 @@
 		"====> %s : %d\n", node->name, ret);
 #endif
 	if (ret == 0) {
+	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failed\n",
 			    node->name);
 	} else if (ret < 0) {
+	    ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
 	    if (ctxt->error != NULL)
 		ctxt->error(ctxt->userData, "Element %s content check failure\n",
 			    node->name);
@@ -4335,7 +4372,7 @@
 static int
 xmlSchemaValidateComplexType(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr node) {
     xmlNodePtr child;
-    xmlSchemaTypePtr type, subtype, model;
+    xmlSchemaTypePtr type, subtype;
     int ret;
 
     child = ctxt->node;
@@ -4360,7 +4397,6 @@
 	     */
 	    child = xmlSchemaSkipIgnored(ctxt, type, child);
 	    subtype = type->subtypes;
-	    ctxt->type = model;
 	    while (child != NULL) {
 		if (child->type == XML_ELEMENT_NODE) {
 		    ret = xmlRegExecPushString(ctxt->regexp,
@@ -4735,10 +4771,12 @@
 	    "====> %s : %d\n", elem->name, ret);
 #endif
     if (ret == 0) {
+	ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s content check failed\n",
                         elem->name);
     } else if (ret < 0) {
+	ctxt->err = XML_SCHEMAS_ERR_ELEMCONT;
         if (ctxt->error != NULL)
             ctxt->error(ctxt->userData, "Element %s content check failed\n",
                         elem->name);