applied patch from Steve Ball to make a schema parser from a preparsed

* xmlschemas.c include/libxml/xmlschemas.h: applied patch
  from Steve Ball to make a schema parser from a preparsed document.
Daniel
diff --git a/xmlschemas.c b/xmlschemas.c
index 7c6c5fb..f64c1b5 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -3184,6 +3184,35 @@
 }
 
 /**
+ * xmlSchemaNewDocParserCtxt:
+ * @doc:  a preparsed document tree
+ *
+ * Create an XML Schemas parse context for that document.
+ * NB. The document may be modified during the parsing process.
+ *
+ * Returns the parser context or NULL in case of error
+ */
+xmlSchemaParserCtxtPtr
+xmlSchemaNewDocParserCtxt(xmlDocPtr doc)
+{
+    xmlSchemaParserCtxtPtr ret;
+
+    if (doc == NULL)
+      return (NULL);
+
+    ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
+    if (ret == NULL) {
+      xmlSchemaPErrMemory(NULL, "allocating schema parser context",
+			  NULL);
+      return (NULL);
+    }
+    memset(ret, 0, sizeof(xmlSchemaParserCtxt));
+    ret->doc = doc;
+
+    return (ret);
+}
+
+/**
  * xmlSchemaFreeParserCtxt:
  * @ctxt:  the schema parser context
  *
@@ -4224,6 +4253,8 @@
         }
         doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
         ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
+    } else if (ctxt->doc != NULL) {
+        doc = ctxt->doc;
     } else {
 	xmlSchemaPErr(ctxt, NULL,
 		      XML_SCHEMAP_NOTHING_TO_PARSE,