more Schemas work added more tests coming from the spec. Daniel
* Makefile.am xmlschemas.c: more Schemas work
* test/schemas/* result/schemas/*: added more tests coming
from the spec.
Daniel
diff --git a/xmlschemas.c b/xmlschemas.c
index a7566c3..3a96b63 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -2676,7 +2676,7 @@
child = child->next;
}
if (IS_SCHEMA(child, "simpleContent")) {
- subtype = xmlSchemaParseSimpleContent(ctxt, schema, child);
+ type->subtypes = xmlSchemaParseSimpleContent(ctxt, schema, child);
child = child->next;
} else if (IS_SCHEMA(child, "complexContent")) {
type->subtypes = xmlSchemaParseComplexContent(ctxt, schema, child);
@@ -3085,17 +3085,20 @@
const xmlChar *name) {
xmlAutomataStatePtr start;
-#ifdef DEBUG_CONTENT
- xmlGenericError(xmlGenericErrorContext,
- "Building content model for %s\n", name);
-#endif
-
if (elem->contModel != NULL)
return;
if (elem->subtypes == NULL)
return;
if (elem->subtypes->type != XML_SCHEMA_TYPE_COMPLEX)
return;
+ if (elem->subtypes->contentType == XML_SCHEMA_CONTENT_BASIC)
+ return;
+
+#ifdef DEBUG_CONTENT
+ xmlGenericError(xmlGenericErrorContext,
+ "Building content model for %s\n", name);
+#endif
+
ctxt->am = xmlNewAutomata();
if (ctxt->am == NULL) {
xmlGenericError(xmlGenericErrorContext,
@@ -3351,9 +3354,14 @@
}
}
#ifdef DEBUG_TYPE
- xmlGenericError(xmlGenericErrorContext,
- "Type of %s : %s:%d :", name, typeDecl->node->doc->URL,
- xmlGetLineNo(typeDecl->node));
+ if (typeDecl->node != NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "Type of %s : %s:%d :", name, typeDecl->node->doc->URL,
+ xmlGetLineNo(typeDecl->node));
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Type of %s :", name);
+ }
switch (typeDecl->contentType) {
case XML_SCHEMA_CONTENT_SIMPLE:
xmlGenericError(xmlGenericErrorContext,
@@ -4465,6 +4473,21 @@
child = xmlSchemaSkipIgnored(ctxt, type, child);
}
break;
+ case XML_SCHEMA_CONTENT_BASIC: {
+ if (type->subtypes != NULL) {
+ ctxt->type = type->subtypes;
+ xmlSchemaValidateComplexType(ctxt, node);
+ }
+ if (type->baseType != NULL) {
+ ctxt->type = type->baseType;
+ xmlSchemaValidateBasicType(ctxt, node);
+ }
+ if (type->attributes != NULL) {
+ xmlSchemaValidateAttributes(ctxt, node, type->attributes);
+ }
+ ctxt->type = type;
+ break;
+ }
default:
TODO
xmlGenericError(xmlGenericErrorContext,
@@ -4813,29 +4836,29 @@
#endif
}
xmlSchemaValidateType(ctxt, elem, elemDecl, elemDecl->subtypes);
- ret = xmlRegExecPushString(ctxt->regexp, NULL, NULL);
+ if (elemDecl->contModel != NULL) {
+ ret = xmlRegExecPushString(ctxt->regexp, NULL, NULL);
#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext,
- "====> %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);
-#ifdef DEBUG_CONTENT
- } else {
xmlGenericError(xmlGenericErrorContext,
- "Element %s content check succeeded\n", elem->name);
+ "====> %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);
+#ifdef DEBUG_CONTENT
+ } else {
+ xmlGenericError(xmlGenericErrorContext,
+ "Element %s content check succeeded\n", elem->name);
#endif
- }
- if (elemDecl->contModel != NULL) {
+ }
xmlRegFreeExecCtxt(ctxt->regexp);
}
/*
@@ -4881,8 +4904,7 @@
if (ctxt->error != NULL)
ctxt->error(ctxt->userData, "Element %s not declared\n",
root->name);
- }
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_TOPLEVEL) == 0) {
+ } else if ((elemDecl->flags & XML_SCHEMAS_ELEM_TOPLEVEL) == 0) {
ctxt->err = XML_SCHEMAS_ERR_NOTTOPLEVEL;
if (ctxt->error != NULL)
ctxt->error(ctxt->userData, "Root element %s not toplevel\n",