summaryrefslogtreecommitdiffstats
path: root/xsd2c/xsd2c.c
diff options
context:
space:
mode:
Diffstat (limited to 'xsd2c/xsd2c.c')
-rw-r--r--xsd2c/xsd2c.c1038
1 files changed, 670 insertions, 368 deletions
diff --git a/xsd2c/xsd2c.c b/xsd2c/xsd2c.c
index d8d5cb1..ccb821b 100644
--- a/xsd2c/xsd2c.c
+++ b/xsd2c/xsd2c.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: xsd2c.c,v 1.6 2004/06/03 20:23:03 snowdrop Exp $
+ * $Id: xsd2c.c,v 1.7 2004/10/15 13:35:39 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -38,45 +38,86 @@
#define NODE_NAME_EQUALS(xmlnode, text) \
(!xmlStrcmp(xmlnode->name, (const xmlChar *)text))
-static xmlNodePtr _xmlGetChild(xmlNodePtr node);
-static xmlNodePtr _xmlGetNext(xmlNodePtr node);
-static HCOMPLEXTYPE xsdProcComplexType(xmlNodePtr node, const char* type);
+static xmlNodePtr _xmlGetChild (xmlNodePtr node);
+static xmlNodePtr _xmlGetNext (xmlNodePtr node);
+static HCOMPLEXTYPE xsdProcComplexType (xmlNodePtr node, const char *type);
-static
-xsdKeyword xsdGetKeyword(xmlNodePtr node)
+static xsdKeyword
+xsdGetKeyword (xmlNodePtr node)
{
- if (node == NULL) return XSD_UNKNOWN;
-
- if (NODE_NAME_EQUALS(node, XSD_ALL_STR)) return XSD_ALL;
- if (NODE_NAME_EQUALS(node, XSD_ANNOTATION_STR)) return XSD_ANNOTATION;
- if (NODE_NAME_EQUALS(node, XSD_ANY_STR)) return XSD_ANY;
- if (NODE_NAME_EQUALS(node, XSD_ANY_ATTRIBUTE_STR)) return XSD_ANY_ATTRIBUTE;
- if (NODE_NAME_EQUALS(node, XSD_APPINFO_STR)) return XSD_APPINFO;
- if (NODE_NAME_EQUALS(node, XSD_ATTRIBUTE_STR)) return XSD_ATTRIBUTE;
- if (NODE_NAME_EQUALS(node, XSD_ATTRIBUTE_GROUP_STR)) return XSD_ATTRIBUTE_GROUP;
- if (NODE_NAME_EQUALS(node, XSD_CHOICE_STR)) return XSD_CHOICE;
- if (NODE_NAME_EQUALS(node, XSD_COMPLEX_TYPE_STR)) return XSD_COMPLEX_TYPE;
- if (NODE_NAME_EQUALS(node, XSD_COMPLEX_CONTENT_STR)) return XSD_COMPLEX_CONTENT;
- if (NODE_NAME_EQUALS(node, XSD_DOCUMENTATION_STR)) return XSD_DOCUMENTATION;
- if (NODE_NAME_EQUALS(node, XSD_ELEMENT_STR)) return XSD_ELEMENT;
- if (NODE_NAME_EQUALS(node, XSD_EXTENSION_STR)) return XSD_EXTENSION;
- if (NODE_NAME_EQUALS(node, XSD_FIELD_STR)) return XSD_FIELD;
- if (NODE_NAME_EQUALS(node, XSD_GROUP_STR)) return XSD_GROUP;
- if (NODE_NAME_EQUALS(node, XSD_IMPORT_STR)) return XSD_IMPORT;
- if (NODE_NAME_EQUALS(node, XSD_INCLUDE_STR)) return XSD_INCLUDE;
- if (NODE_NAME_EQUALS(node, XSD_KEY_STR)) return XSD_KEY;
- if (NODE_NAME_EQUALS(node, XSD_KEYREF_STR)) return XSD_KEYREF;
- if (NODE_NAME_EQUALS(node, XSD_LIST_STR)) return XSD_LIST;
- if (NODE_NAME_EQUALS(node, XSD_NOTATION_STR)) return XSD_NOTATION;
- if (NODE_NAME_EQUALS(node, XSD_REDEFINE_STR)) return XSD_REDEFINE;
- if (NODE_NAME_EQUALS(node, XSD_RESTRICTION_STR)) return XSD_RESTRICTION;
- if (NODE_NAME_EQUALS(node, XSD_SCHEMA_STR)) return XSD_SCHEMA;
- if (NODE_NAME_EQUALS(node, XSD_SELECTOR_STR)) return XSD_SELECTOR;
- if (NODE_NAME_EQUALS(node, XSD_SEQUENCE_STR)) return XSD_SEQUENCE;
- if (NODE_NAME_EQUALS(node, XSD_SIMPLE_CONTENT_STR)) return XSD_SIMPLE_CONTENT;
- if (NODE_NAME_EQUALS(node, XSD_SIMPLE_TYPE_STR)) return XSD_SIMPLE_TYPE;
- if (NODE_NAME_EQUALS(node, XSD_UNION_STR)) return XSD_UNION;
- if (NODE_NAME_EQUALS(node, XSD_UNIQUE_STR)) return XSD_UNIQUE;
+ if (node == NULL)
+ return XSD_UNKNOWN;
+
+ if (NODE_NAME_EQUALS (node, XSD_ALL_STR))
+ return XSD_ALL;
+ if (NODE_NAME_EQUALS (node, XSD_ANNOTATION_STR))
+ return XSD_ANNOTATION;
+ if (NODE_NAME_EQUALS (node, XSD_ANY_STR))
+ return XSD_ANY;
+ if (NODE_NAME_EQUALS (node, XSD_ANY_ATTRIBUTE_STR))
+ return XSD_ANY_ATTRIBUTE;
+ if (NODE_NAME_EQUALS (node, XSD_APPINFO_STR))
+ return XSD_APPINFO;
+ if (NODE_NAME_EQUALS (node, XSD_ATTRIBUTE_STR))
+ return XSD_ATTRIBUTE;
+ if (NODE_NAME_EQUALS (node, XSD_ATTRIBUTE_GROUP_STR))
+ return XSD_ATTRIBUTE_GROUP;
+ if (NODE_NAME_EQUALS (node, XSD_CHOICE_STR))
+ return XSD_CHOICE;
+ if (NODE_NAME_EQUALS (node, XSD_COMPLEX_TYPE_STR))
+ return XSD_COMPLEX_TYPE;
+ if (NODE_NAME_EQUALS (node, XSD_COMPLEX_CONTENT_STR))
+ return XSD_COMPLEX_CONTENT;
+ if (NODE_NAME_EQUALS (node, XSD_DOCUMENTATION_STR))
+ return XSD_DOCUMENTATION;
+ if (NODE_NAME_EQUALS (node, XSD_ELEMENT_STR))
+ return XSD_ELEMENT;
+ if (NODE_NAME_EQUALS (node, XSD_ENUMERATION_STR))
+ return XSD_ENUMERATION;
+ if (NODE_NAME_EQUALS (node, XSD_EXTENSION_STR))
+ return XSD_EXTENSION;
+ if (NODE_NAME_EQUALS (node, XSD_FIELD_STR))
+ return XSD_FIELD;
+ if (NODE_NAME_EQUALS (node, XSD_GROUP_STR))
+ return XSD_GROUP;
+ if (NODE_NAME_EQUALS (node, XSD_IMPORT_STR))
+ return XSD_IMPORT;
+ if (NODE_NAME_EQUALS (node, XSD_INCLUDE_STR))
+ return XSD_INCLUDE;
+ if (NODE_NAME_EQUALS (node, XSD_KEY_STR))
+ return XSD_KEY;
+ if (NODE_NAME_EQUALS (node, XSD_KEYREF_STR))
+ return XSD_KEYREF;
+ if (NODE_NAME_EQUALS (node, XSD_LIST_STR))
+ return XSD_LIST;
+ if (NODE_NAME_EQUALS (node, XSD_NOTATION_STR))
+ return XSD_NOTATION;
+ if (NODE_NAME_EQUALS (node, XSD_REDEFINE_STR))
+ return XSD_REDEFINE;
+ if (NODE_NAME_EQUALS (node, XSD_RESTRICTION_STR))
+ return XSD_RESTRICTION;
+ if (NODE_NAME_EQUALS (node, XSD_SCHEMA_STR))
+ return XSD_SCHEMA;
+ if (NODE_NAME_EQUALS (node, XSD_SELECTOR_STR))
+ return XSD_SELECTOR;
+ if (NODE_NAME_EQUALS (node, XSD_SEQUENCE_STR))
+ return XSD_SEQUENCE;
+ if (NODE_NAME_EQUALS (node, XSD_SIMPLE_CONTENT_STR))
+ return XSD_SIMPLE_CONTENT;
+ if (NODE_NAME_EQUALS (node, XSD_SIMPLE_TYPE_STR))
+ return XSD_SIMPLE_TYPE;
+ if (NODE_NAME_EQUALS (node, XSD_UNION_STR))
+ return XSD_UNION;
+ if (NODE_NAME_EQUALS (node, XSD_UNIQUE_STR))
+ return XSD_UNIQUE;
+ if (NODE_NAME_EQUALS (node, XSD_MIN_INCLUSIVE_STR))
+ return XSD_MIN_INCLUSIVE;
+ if (NODE_NAME_EQUALS (node, XSD_MAX_INCLUSIVE_STR))
+ return XSD_MAX_INCLUSIVE;
+ if (NODE_NAME_EQUALS (node, XSD_MIN_EXCLUSIVE_STR))
+ return XSD_MIN_EXCLUSIVE;
+ if (NODE_NAME_EQUALS (node, XSD_MAX_EXCLUSIVE_STR))
+ return XSD_MAX_EXCLUSIVE;
return XSD_UNKNOWN;
}
@@ -87,20 +128,23 @@ static char outDir[1054];
-static
-xmlNodePtr xmlFindSubElement(xmlNodePtr root, const char* element_name)
+static xmlNodePtr
+xmlFindSubElement (xmlNodePtr root, const char *element_name)
{
xmlNodePtr cur;
cur = root->xmlChildrenNode;
- while (cur != NULL) {
-
- if (cur->type != XML_ELEMENT_NODE) {
+ while (cur != NULL)
+ {
+
+ if (cur->type != XML_ELEMENT_NODE)
+ {
cur = cur->next;
continue;
}
- if (!xmlStrcmp(cur->name, (const xmlChar*)element_name)) {
+ if (!xmlStrcmp (cur->name, (const xmlChar *) element_name))
+ {
return cur;
}
@@ -110,67 +154,75 @@ xmlNodePtr xmlFindSubElement(xmlNodePtr root, const char* element_name)
return NULL;
}
-xmlNodePtr xsdLoadFile(const char* filename)
+xmlNodePtr
+xsdLoadFile (const char *filename)
{
xmlDocPtr doc;
xmlNodePtr cur;
- doc = xmlParseFile(filename);
- if (doc == NULL) return NULL;
+ doc = xmlParseFile (filename);
+ if (doc == NULL)
+ return NULL;
- cur = xmlDocGetRootElement(doc);
+ cur = xmlDocGetRootElement (doc);
return cur;
}
-xmlNodePtr wsdlLoadFile(const char* filename)
+xmlNodePtr
+wsdlLoadFile (const char *filename)
{
xmlDocPtr doc;
xmlNodePtr cur;
xmlNodePtr sub;
xsdKeyword keyword;
- doc = xmlParseFile(filename);
- if (doc == NULL) return NULL;
+ doc = xmlParseFile (filename);
+ if (doc == NULL)
+ return NULL;
- cur = xmlDocGetRootElement(doc);
- if (cur == NULL) {
+ cur = xmlDocGetRootElement (doc);
+ if (cur == NULL)
+ {
return NULL;
}
- cur = xmlFindSubElement(cur, "types");
- if (cur == NULL) return NULL;
+ cur = xmlFindSubElement (cur, "types");
+ if (cur == NULL)
+ return NULL;
/*
sub = xmlFindSubElement(cur, "schema");
if (sub != NULL)
return sub;
*/
/* some wsdl's defines xsd without root <schema> element */
- sub = _xmlGetChild(cur);
- keyword = xsdGetKeyword(sub);
- switch (keyword)
+ sub = _xmlGetChild (cur);
+ keyword = xsdGetKeyword (sub);
+ switch (keyword)
{
- case XSD_ELEMENT:
- case XSD_COMPLEX_TYPE:
- case XSD_SIMPLE_TYPE:
- case XSD_SCHEMA:
- return sub;
- default:
- fprintf(stderr, "Unexpected node: '%s'\n", cur->name);
+ case XSD_ELEMENT:
+ case XSD_COMPLEX_TYPE:
+ case XSD_SIMPLE_TYPE:
+ case XSD_SCHEMA:
+ return sub;
+ default:
+ fprintf (stderr, "Unexpected node: '%s'\n", cur->name);
}
return NULL;
}
-static
-xmlNodePtr _xmlGetChild(xmlNodePtr node)
+static xmlNodePtr
+_xmlGetChild (xmlNodePtr node)
{
xmlNodePtr cur = NULL;
cur = node->xmlChildrenNode;
- while (cur != NULL) {
- if (cur->type != XML_ELEMENT_NODE) {
+ while (cur != NULL)
+ {
+ if (cur->type != XML_ELEMENT_NODE)
+ {
cur = cur->next;
continue;
}
@@ -179,13 +231,15 @@ xmlNodePtr _xmlGetChild(xmlNodePtr node)
return cur;
}
-static
-xmlNodePtr _xmlGetNext(xmlNodePtr node)
+static xmlNodePtr
+_xmlGetNext (xmlNodePtr node)
{
xmlNodePtr cur = NULL;
cur = node->next;
- while (cur != NULL) {
- if (cur->type != XML_ELEMENT_NODE) {
+ while (cur != NULL)
+ {
+ if (cur->type != XML_ELEMENT_NODE)
+ {
cur = cur->next;
continue;
}
@@ -194,37 +248,37 @@ xmlNodePtr _xmlGetNext(xmlNodePtr node)
return cur;
}
-static
-void xsdProcAttribute(HCOMPLEXTYPE parent, xmlNodePtr node)
+static void
+xsdProcAttribute (HCOMPLEXTYPE parent, xmlNodePtr node)
{
char *name, *type;
/* xmlNodePtr cur;
char buffer[1054];
*/
- name = xmlGetProp(node, ATTR_NAME_STR);
- type = xmlGetProp(node, ATTR_TYPE_STR);
+ name = xmlGetProp (node, ATTR_NAME_STR);
+ type = xmlGetProp (node, ATTR_TYPE_STR);
- /* printf(" %s: %s\n", type?type:"(null)",
- name?name:"(null)");
-*/
+ /* printf(" %s: %s\n", type?type:"(null)",
+ name?name:"(null)");
+ */
if (name == NULL)
{
- fprintf(stderr, "WARNING: Attribute without name!\n");
+ fprintf (stderr, "WARNING: Attribute without name!\n");
return;
}
if (type == NULL)
{
- fprintf(stderr, "WARNING: Attribute '%s' has no type\n", name);
+ fprintf (stderr, "WARNING: Attribute '%s' has no type\n", name);
}
/* sprintf(buffer, "attr_%s", name); */
- objAddAttribute(parent, name, type, 0);
+ objAddAttribute (parent, name, type, 0);
}
-static
-void xsdProcElement(HCOMPLEXTYPE parent, xmlNodePtr node)
+static void
+xsdProcElement (HCOMPLEXTYPE parent, xmlNodePtr node)
{
char *name, *type, *minostr, *maxostr;
xmlNodePtr cur;
@@ -232,231 +286,366 @@ void xsdProcElement(HCOMPLEXTYPE parent, xmlNodePtr node)
char buffer[1054];
HCOMPLEXTYPE ct;
int mino, maxo;
-
- name = xmlGetProp(node, ATTR_NAME_STR);
- type = xmlGetProp(node, ATTR_TYPE_STR);
- minostr = xmlGetProp(node, ATTR_MIN_OCCURS_STR);
- maxostr = xmlGetProp(node, ATTR_MAX_OCCURS_STR);
+
+ name = xmlGetProp (node, ATTR_NAME_STR);
+ type = xmlGetProp (node, ATTR_TYPE_STR);
+ minostr = xmlGetProp (node, ATTR_MIN_OCCURS_STR);
+ maxostr = xmlGetProp (node, ATTR_MAX_OCCURS_STR);
/* printf(" %s: %s\n", type?type:"(null)",
name?name:"(null)");
*/
- if (minostr == NULL) mino = 1;
- else mino = atoi(minostr);
+ if (minostr == NULL)
+ mino = 1;
+ else
+ mino = atoi (minostr);
- if (maxostr == NULL) maxo = 1;
- else {
- if (!strcmp(maxostr, ATTR_VALUE_UNBOUNDED))
+ if (maxostr == NULL)
+ maxo = 1;
+ else
+ {
+ if (!strcmp (maxostr, ATTR_VALUE_UNBOUNDED))
maxo = -1;
else
- maxo = atoi(maxostr);
+ maxo = atoi (maxostr);
}
-
+
if (type == NULL)
{
/* check for complexType */
- cur = _xmlGetChild(node);
+ cur = _xmlGetChild (node);
if (cur == NULL)
{
- fprintf(stderr, "WARNING: Element '%s' has no childs\n", name);
+ fprintf (stderr, "WARNING: Element '%s' has no childs\n", name);
return;
}
do
{
- keyword = xsdGetKeyword(cur);
+ keyword = xsdGetKeyword (cur);
switch (keyword)
{
- case XSD_COMPLEX_TYPE:
- /*
- type = xmlGetProp(cur, ATTR_NAME_STR);
- if (type == NULL)
- {
- fprintf(stderr, "WARNING: Type name not found\n");
- break;
- }
- */
-
- sprintf(buffer, "%s_%s", parent->type, (const char*)name);
- ct = xsdProcComplexType(cur, (const char*)buffer);
- if (ct != NULL)
- {
- objAddElement(parent, name, buffer,0, mino, maxo);
- }
- break;
-
- default:
- fprintf(stderr, "Unexpected node: '%s'\n", cur->name);
+ case XSD_COMPLEX_TYPE:
+ /*
+ type = xmlGetProp(cur, ATTR_NAME_STR);
+ if (type == NULL)
+ {
+ fprintf(stderr, "WARNING: Type name not found\n");
+ break;
+ }
+ */
+
+ sprintf (buffer, "%s_%s", parent->type, (const char *) name);
+ ct = xsdProcComplexType (cur, (const char *) buffer);
+ if (ct != NULL)
+ {
+ objAddElement (parent, name, buffer, 0, mino, maxo);
+ }
+ break;
+
+ default:
+ fprintf (stderr, "Unexpected node: '%s'\n", cur->name);
}
- } while ((cur = _xmlGetNext(cur)) != NULL);
+ } while ((cur = _xmlGetNext (cur)) != NULL);
}
else
{
- objAddElement(parent, name, type,0, mino, maxo);
+ objAddElement (parent, name, type, 0, mino, maxo);
}
- if (name) xmlFree(name);
- if (type) xmlFree(type);
+/* if (name) xmlFree(name);
+ if (type) xmlFree(type);*/
}
-static
-void xsdProcSequence(HCOMPLEXTYPE ct, xmlNodePtr node)
+static void
+xsdProcSequence (HCOMPLEXTYPE ct, xmlNodePtr node)
{
xmlNodePtr cur = NULL;
xsdKeyword keyword;
- cur = _xmlGetChild(node);
- if (cur == NULL) {
- fprintf(stderr, "WARNING: Empty sequence\n");
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty sequence\n");
return;
}
- do {
- keyword = xsdGetKeyword(cur);
+ do
+ {
+ keyword = xsdGetKeyword (cur);
- switch (keyword)
+ switch (keyword)
{
- case XSD_ANNOTATION:
- /* nothing to do*/
- break;
+ case XSD_ANNOTATION:
+ /* nothing to do */
+ break;
- case XSD_GROUP:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
- break;
+ case XSD_GROUP:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
+ break;
- case XSD_CHOICE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
- break;
+ case XSD_CHOICE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
+ break;
- case XSD_SEQUENCE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_SEQUENCE_STR);
- break;
+ case XSD_SEQUENCE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_SEQUENCE_STR);
+ break;
- case XSD_ANY:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ANY_STR);
- break;
+ case XSD_ANY:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_ANY_STR);
+ break;
- case XSD_ELEMENT:
- xsdProcElement(ct, cur);
- break;
+ case XSD_ELEMENT:
+ xsdProcElement (ct, cur);
+ break;
- default:
- fprintf(stderr, "WARNING: Unknown child ('%s')!\n", (char*)cur->name);
+ default:
+ fprintf (stderr, "WARNING: Unknown child ('%s')!\n",
+ (char *) cur->name);
};
- } while ((cur = _xmlGetNext(cur)) != NULL);
+ } while ((cur = _xmlGetNext (cur)) != NULL);
}
-static
-void xsdProcExtension(HCOMPLEXTYPE ct, xmlNodePtr node, const char* type)
+static void
+xsdProcExtension (HCOMPLEXTYPE ct, xmlNodePtr node, const char *type)
{
xmlNodePtr cur = NULL;
xsdKeyword keyword;
- char * base;
+ char *base;
- base = xmlGetProp(node, ATTR_BASE_STR);
- if (base == NULL) {
- fprintf(stderr, "WARNING: No base defined\n");
+ base = xmlGetProp (node, ATTR_BASE_STR);
+ if (base == NULL)
+ {
+ fprintf (stderr, "WARNING: No base defined\n");
return;
}
-
- printf(" =[Base] -> %s\n", base);
- objSetBaseType(ct, base);
- xmlFree(base);
-
- cur = _xmlGetChild(node);
- if (cur == NULL) {
- fprintf(stderr, "WARNING: Empty node\n");
+
+ printf (" =[Base] -> %s\n", base);
+ objSetBaseType (ct, base);
+/* xmlFree(base);*/
+
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty node\n");
return;
}
- do {
- keyword = xsdGetKeyword(cur);
+ do
+ {
+ keyword = xsdGetKeyword (cur);
- switch (keyword)
+ switch (keyword)
{
- case XSD_ANNOTATION:
- /* nothing to do*/
- break;
+ case XSD_ANNOTATION:
+ /* nothing to do */
+ break;
- case XSD_ALL:
- fprintf(stderr, " WARNING: %s not supported\n", XSD_ALL_STR);
- break;
+ case XSD_ALL:
+ fprintf (stderr, " WARNING: %s not supported\n", XSD_ALL_STR);
+ break;
- case XSD_GROUP:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
- break;
+ case XSD_GROUP:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
+ break;
- case XSD_CHOICE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
- break;
+ case XSD_CHOICE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
+ break;
- case XSD_ATTRIBUTE:
- xsdProcAttribute(ct, cur);
- break;
+ case XSD_ATTRIBUTE:
+ xsdProcAttribute (ct, cur);
+ break;
- case XSD_ATTRIBUTE_GROUP:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ATTRIBUTE_GROUP_STR);
- break;
+ case XSD_ATTRIBUTE_GROUP:
+ fprintf (stderr, "WARNING: %s not supported\n",
+ XSD_ATTRIBUTE_GROUP_STR);
+ break;
- case XSD_ANY_ATTRIBUTE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ANY_ATTRIBUTE_STR);
- break;
+ case XSD_ANY_ATTRIBUTE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_ANY_ATTRIBUTE_STR);
+ break;
+
+ case XSD_SEQUENCE:
+ xsdProcSequence (ct, cur);
+ break;
- case XSD_SEQUENCE:
- xsdProcSequence(ct, cur);
- break;
-
- default:
- fprintf(stderr, "WARNING: Unknown child ('%s')!\n", (char*)cur->name);
+ default:
+ fprintf (stderr, "WARNING: Unknown child ('%s')!\n",
+ (char *) cur->name);
};
-
- } while ((cur = _xmlGetNext(cur)) != NULL);
+
+ } while ((cur = _xmlGetNext (cur)) != NULL);
}
-static
-void xsdProcComplexContent(HCOMPLEXTYPE ct, xmlNodePtr node, const char* type)
+static void
+xsdProcComplexContent (HCOMPLEXTYPE ct, xmlNodePtr node, const char *type)
{
xmlNodePtr cur = NULL;
xsdKeyword keyword;
- cur = _xmlGetChild(node);
- if (cur == NULL) {
- fprintf(stderr, "WARNING: Empty sequence\n");
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty sequence\n");
return;
}
- do {
- keyword = xsdGetKeyword(cur);
+ do
+ {
+ keyword = xsdGetKeyword (cur);
- switch (keyword)
+ switch (keyword)
{
- case XSD_ANNOTATION:
- /* nothing to do*/
- break;
+ case XSD_ANNOTATION:
+ /* nothing to do */
+ break;
- case XSD_EXTENSION:
- xsdProcExtension(ct, cur, type);
- break;
+ case XSD_EXTENSION:
+ xsdProcExtension (ct, cur, type);
+ break;
- case XSD_RESTRICTION:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_RESTRICTION_STR);
- break;
+ case XSD_RESTRICTION:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_RESTRICTION_STR);
+ break;
+
+ default:
+ fprintf (stderr, "WARNING: Unknown child ('%s')!\n",
+ (char *) cur->name);
+ };
+
+ } while ((cur = _xmlGetNext (cur)) != NULL);
+}
+
+void
+xsdProcRestriction(HCOMPLEXTYPE ct, xmlNodePtr node, const char *type)
+{
+ xmlNodePtr cur = NULL;
+ xsdKeyword keyword;
+ char *value;
+ HRESTRICTION res;
+ char *base;
+
+
+ base = xmlGetProp (node, ATTR_BASE_STR);
+ if (base == NULL)
+ {
+ fprintf (stderr, "WARNING: No base defined\n");
+ return;
+ }
+
+ printf (" =[Base] -> %s\n", base);
+ res = resCreate(base);
+ ct->restriction = res;
+
+/* xmlFree(base);*/
+
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty sequence\n");
+ return;
+ }
+
+ do
+ {
+ value = xmlGetProp (cur, ATTR_VALUE_STR);
+ if (!value) {
+ fprintf(stderr, "WARNING: Found SimpleContent->%s without attribute value.\n",
+ cur->name);
+ continue;
+ }
+
+ keyword = xsdGetKeyword (cur);
+
+ switch (keyword)
+ {
+ case XSD_MIN_INCLUSIVE:
+ res->minInclusive = atoi(value);
+ res->minInclusiveSet = 1;
+ res->mode = RES_MODE_MINMAX;
+ break;
+
+ case XSD_MAX_INCLUSIVE:
+ res->maxInclusive = atoi(value);
+ res->maxInclusiveSet = 1;
+ res->mode = RES_MODE_MINMAX;
+ break;
+
+ case XSD_MIN_EXCLUSIVE:
+ res->minExclusive = atoi(value);
+ res->minExclusiveSet = 1;
+ res->mode = RES_MODE_MINMAX;
+ break;
+
+ case XSD_MAX_EXCLUSIVE:
+ res->maxExclusive = atoi(value);
+ res->maxExclusiveSet = 1;
+ res->mode = RES_MODE_MINMAX;
+ break;
+
+ case XSD_ENUMERATION:
+ Enumeration_Add_value(res->enumeration, value);
+ res->mode = RES_MODE_ENUMERATION;
+ default:
+ fprintf (stderr, "WARNING: Unknown child (SimpleContent->'%s')!\n",
+ (char *) cur->name);
+ };
- default:
- fprintf(stderr, "WARNING: Unknown child ('%s')!\n", (char*)cur->name);
+ } while ((cur = _xmlGetNext (cur)) != NULL);
+
+}
+
+void
+xsdProcSimpleContent (HCOMPLEXTYPE ct, xmlNodePtr node, const char *type)
+{
+ xmlNodePtr cur = NULL;
+ xsdKeyword keyword;
+
+ ct->isSimpleContent = 1;
+
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty node\n");
+ return;
+ }
+
+ do
+ {
+ keyword = xsdGetKeyword (cur);
+
+ switch (keyword)
+ {
+ case XSD_ANNOTATION:
+ /* nothing to do */
+ break;
+
+ case XSD_RESTRICTION:
+ xsdProcRestriction(ct, cur, type);
+ break;
+
+ case XSD_ATTRIBUTE:
+ xsdProcAttribute (ct, cur);
+ break;
+
+ default:
+ fprintf (stderr, "WARNING: Unknown child (SimpleContent->'%s')!\n",
+ (char *) cur->name);
};
-
- } while ((cur = _xmlGetNext(cur)) != NULL);
+
+ } while ((cur = _xmlGetNext (cur)) != NULL);
}
-static
-HCOMPLEXTYPE xsdProcComplexType(xmlNodePtr node, const char* type)
+static HCOMPLEXTYPE
+xsdProcComplexType (xmlNodePtr node, const char *type)
{
char *name;
xmlNodePtr cur = NULL;
@@ -465,232 +654,343 @@ HCOMPLEXTYPE xsdProcComplexType(xmlNodePtr node, const char* type)
if (!type)
- name = xmlGetProp(node, ATTR_NAME_STR);
- else {
- name = (char*)malloc(strlen(type)+1);
- strcpy(name, type);
+ name = xmlGetProp (node, ATTR_NAME_STR);
+ else
+ {
+ name = (char *) malloc (strlen (type) + 1);
+ strcpy (name, type);
}
if (!name)
{
- fprintf(stderr, "\nWARNING: complexType has no typename!\n");
+ fprintf (stderr, "\nWARNING: complexType has no typename!\n");
return NULL;
}
-
- ct = objCreateComplexType(name);
-
- printf("\ncomplexType->%s\n", name);
-
- cur = _xmlGetChild(node);
- if (cur == NULL) {
- fprintf(stderr, "WARNING: Empty complexType\n");
+
+ ct = objCreateComplexType (name);
+
+ printf ("\ncomplexType->%s\n", name);
+
+ cur = _xmlGetChild (node);
+ if (cur == NULL)
+ {
+ fprintf (stderr, "WARNING: Empty complexType\n");
return ct;
}
+
+ do
+ {
+ keyword = xsdGetKeyword (cur);
- do {
- keyword = xsdGetKeyword(cur);
-
- switch (keyword)
+ switch (keyword)
{
- case XSD_ANNOTATION:
- /* nothing to do*/
- break;
+ case XSD_ANNOTATION:
+ /* nothing to do */
+ break;
- case XSD_SIMPLE_CONTENT:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_SIMPLE_CONTENT_STR);
- break;
+ case XSD_SIMPLE_CONTENT:
+ xsdProcSimpleContent (ct, cur, name);
+ break;
- case XSD_COMPLEX_CONTENT:
- xsdProcComplexContent(ct, cur, name);
+ case XSD_COMPLEX_CONTENT:
+ xsdProcComplexContent (ct, cur, name);
/* fprintf(stderr, "WARNING: %s not supported\n", XSD_COMPLEX_CONTENT_STR); */
- break;
+ break;
- case XSD_ALL:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ALL_STR);
- break;
+ case XSD_ALL:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_ALL_STR);
+ break;
- case XSD_GROUP:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
- break;
+ case XSD_GROUP:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_GROUP_STR);
+ break;
- case XSD_CHOICE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
- break;
+ case XSD_CHOICE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_CHOICE_STR);
+ break;
- case XSD_ATTRIBUTE:
- xsdProcAttribute(ct, cur);
- break;
+ case XSD_ATTRIBUTE:
+ xsdProcAttribute (ct, cur);
+ break;
- case XSD_ATTRIBUTE_GROUP:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ATTRIBUTE_GROUP_STR);
- break;
+ case XSD_ATTRIBUTE_GROUP:
+ fprintf (stderr, "WARNING: %s not supported\n",
+ XSD_ATTRIBUTE_GROUP_STR);
+ break;
- case XSD_ANY_ATTRIBUTE:
- fprintf(stderr, "WARNING: %s not supported\n", XSD_ANY_ATTRIBUTE_STR);
- break;
+ case XSD_ANY_ATTRIBUTE:
+ fprintf (stderr, "WARNING: %s not supported\n", XSD_ANY_ATTRIBUTE_STR);
+ break;
+
+ case XSD_SEQUENCE:
+ xsdProcSequence (ct, cur);
+ break;
- case XSD_SEQUENCE:
- xsdProcSequence(ct, cur);
- break;
-
- default:
- fprintf(stderr, "WARNING: Unknown child ('%s')!\n", (char*)cur->name);
+ default:
+ fprintf (stderr, "WARNING: Unknown child ('%s')!\n",
+ (char *) cur->name);
};
-
- } while ((cur = _xmlGetNext(cur)) != NULL);
- xmlFree(name);
+ } while ((cur = _xmlGetNext (cur)) != NULL);
+
+/* xmlFree(name);*/
return ct;
}
-static
-void runGenerator(xmlNodePtr xsdRoot)
+static void
+runGenerator (xmlNodePtr xsdRoot)
{
xmlNodePtr cur;
xmlNodePtr node;
xmlChar *type;
cur = xsdRoot->xmlChildrenNode;
- while (cur != NULL) {
+ while (cur != NULL)
+ {
- if (cur->type != XML_ELEMENT_NODE) {
+ if (cur->type != XML_ELEMENT_NODE)
+ {
cur = cur->next;
continue;
}
- if (xsdGetKeyword(cur) == XSD_COMPLEX_TYPE){
-
- xsdProcComplexType(cur, NULL);
-
- } else if (xsdGetKeyword(cur) == XSD_ELEMENT) {
-
- type = xmlGetProp(cur, "name");
- if (type == NULL) {
- fprintf(stderr, "WARNING: Element found without name ('%s')\n", cur->name);
- } else {
-
- node = xmlFindSubElement(cur, XSD_COMPLEX_TYPE_STR);
- if (node != NULL) {
- xsdProcComplexType(node, type);
- }
+ if (xsdGetKeyword (cur) == XSD_COMPLEX_TYPE)
+ {
+ xsdProcComplexType (cur, NULL);
+
+ }
+ else if (xsdGetKeyword (cur) == XSD_SIMPLE_TYPE)
+ {
+
+ fprintf (stderr, "WARNING: SimpleType not supported!\n");
+
+ }
+ else if (xsdGetKeyword (cur) == XSD_ELEMENT)
+ {
+
+ type = xmlGetProp (cur, "name");
+ if (type == NULL)
+ {
+ fprintf (stderr, "WARNING: Element found without name ('%s')\n",
+ cur->name);
}
+ else
+ {
- /*xsdProcElement(..., cur);*/
+ node = xmlFindSubElement (cur, XSD_COMPLEX_TYPE_STR);
+ if (node != NULL)
+ {
+ xsdProcComplexType (node, type);
+ }
+ else
+ {
+ /* fprintf (stderr, "WARNING: Element on root node will be ignored\n"); */
+ /* TODO: I don't know if this is a good idea!?
+ make typedef instead.*/
+ xsdProcComplexType(cur, type);
+ }
+ }
+ /*xsdProcElement(..., cur); */
+ }
+ else
+ {
+ fprintf(stderr, "WARNING: '%s' not supported!\n", cur->name);
}
cur = cur->next;
}
}
-int declareStructs(HCOMPLEXTYPE ct)
+int
+declareStructs (HCOMPLEXTYPE ct)
{
char fname[255];
- FILE* f;
+ FILE *f;
- sprintf(fname, "%s/%s.h", outDir, ct->type); /* _xsd*/
- printf("Generating file '%s' ...\n", fname);
- f = fopen(fname, "w");
+ sprintf (fname, "%s/%s.h", outDir, ct->type); /* _xsd */
+ printf ("Generating file '%s' ...\n", fname);
+ f = fopen (fname, "w");
if (f == NULL)
{
- fprintf(stderr, "Can not open '%s'\n", fname);
+ fprintf (stderr, "Can not open '%s'\n", fname);
return 0;
}
- writeComplexTypeHeaderFile(f, ct);
- fclose(f);
+ writeComplexTypeHeaderFile (f, ct);
+ fclose (f);
return 1;
-}
+}
-int writeSource(HCOMPLEXTYPE ct)
+int
+writeSource (HCOMPLEXTYPE ct)
{
char fname[255];
- FILE* f;
+ FILE *f;
- sprintf(fname, "%s/%s.c", outDir, ct->type); /* _xsd*/
- printf("Generating file '%s' ...\n", fname);
- f = fopen(fname, "w");
+ sprintf (fname, "%s/%s.c", outDir, ct->type); /* _xsd */
+ printf ("Generating file '%s' ...\n", fname);
+ f = fopen (fname, "w");
if (f == NULL)
{
- fprintf(stderr, "Can not open '%s'\n", fname);
+ fprintf (stderr, "Can not open '%s'\n", fname);
return 0;
}
- writeComplexTypeSourceFile(f, ct);
- fclose(f);
+ writeComplexTypeSourceFile (f, ct);
+ fclose (f);
return 1;
}
-int xsdInitTrModule(xmlNodePtr xsdNode)
+int
+xsdInitTrModule (xmlNodePtr xsdNode)
{
xmlNsPtr ns = NULL;
+ char xsd_ns[50];
+
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xsdNode,
+ "http://www.w3.org/2001/XMLSchema");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xsdNode,
+ "http://www.w3.org/2001/XMLSchema/");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xsdNode,
+ "http://www.w3.org/1999/XMLSchema");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xsdNode,
+ "http://www.w3.org/1999/XMLSchema/");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xmlDocGetRootElement (xsdNode->doc),
+ "http://www.w3.org/2001/XMLSchema");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xmlDocGetRootElement (xsdNode->doc),
+ "http://www.w3.org/2001/XMLSchema/");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xmlDocGetRootElement (xsdNode->doc),
+ "http://www.w3.org/1999/XMLSchema");
+ if (ns == NULL)
+ ns =
+ xmlSearchNsByHref (xsdNode->doc, xmlDocGetRootElement (xsdNode->doc),
+ "http://www.w3.org/1999/XMLSchema/");
- if (xsdNode != NULL) {
-
- ns = xmlSearchNsByHref(xsdNode->doc, xsdNode, "http://www.w3.org/2001/XMLSchema");
-
+/*
if (ns != NULL && ns->prefix != NULL) {
fprintf(stdout, "XMLSchema namespace prefix: '%s'\n", ns->prefix);
trInitModule(ns->prefix);
- } else {
- /*
- Search for:
- <definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <type>
- <schema xmlns="http://www.w3.org/2001/XMLSchema">
- ...
- */
- ns = xmlSearchNsByHref(xsdNode->doc, xmlDocGetRootElement(xsdNode->doc), "http://www.w3.org/2001/XMLSchema");
- if (ns != NULL && ns->prefix != NULL) {
- fprintf(stdout, "XMLSchema namespace prefix: '%s'\n", ns->prefix);
- trInitModule(ns->prefix);
- } else {
- trInitModule("xs");
- }
- }
-
- } else {
- trInitModule("xs");
+ } else { */
+ /*
+ Search for:
+ <definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <type>
+ <schema xmlns="http://www.w3.org/2001/XMLSchema">
+ ...
+ */
+ /*if (ns != NULL && ns->prefix != NULL) {
+ fprintf(stdout, "XMLSchema namespace prefix: '%s'\n", ns->prefix);
+ trInitModule(ns->prefix);
+ } else {
+ printf("Initializing XML Schema type register with default 'xs'\n");
+ trInitModule("xs");
+ }
+ }
+
+ } else {
+ printf("Initializing XML Schema type register with default 'xs'\n");
+ trInitModule("xs");
+ }
+ */
+ if (ns != NULL && ns->prefix != NULL)
+ {
+ strcpy (xsd_ns, ns->prefix);
+ }
+ else
+ {
+ fprintf (stderr, "WARNING: using XML Schema prefix 'xsd' as default!\n");
+ strcpy (xsd_ns, "xsd");
}
+ trInitModule ();
+
+ fprintf(stdout, "XML Schema prefix: '%s'\n", xsd_ns);
+
+ trRegisterTypeNS (xsd_ns, "ID", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "IDREF", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "IDREFS", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "string", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "integer", "int", 1);
+ trRegisterTypeNS (xsd_ns, "int", "int", 1);
+ trRegisterTypeNS (xsd_ns, "double", "double", 1);
+ trRegisterTypeNS (xsd_ns, "float", "float", 1);
+ trRegisterTypeNS (xsd_ns, "boolean", "int", 1);
+
+ ns = xmlSearchNsByHref (xsdNode->doc, xsdNode, "http://www.w3.org/2003/05/soap-encoding");
+ if (ns == NULL)
+ ns = xmlSearchNsByHref (xsdNode->doc, xsdNode, "http://www.w3.org/2003/05/soap-encoding/");
+ if (ns != NULL && ns->prefix != NULL) {
+ strcpy(xsd_ns, ns->prefix);
+ trRegisterTypeNS (xsd_ns, "ID", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "IDREF", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "IDREFS", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "string", "char*", 1);
+ trRegisterTypeNS (xsd_ns, "integer", "int", 1);
+ trRegisterTypeNS (xsd_ns, "int", "int", 1);
+ trRegisterTypeNS (xsd_ns, "double", "double", 1);
+ trRegisterTypeNS (xsd_ns, "float", "float", 1);
+ trRegisterTypeNS (xsd_ns, "boolean", "int", 1);
+ }
+
return 1;
}
-int xsdInitObjModule(xmlNodePtr xsdNode)
+int
+xsdInitObjModule (xmlNodePtr xsdNode)
{
xmlChar *tns = NULL;
xmlNsPtr ns;
- if (xsdNode != NULL)
- tns = xmlGetProp(xsdNode, (const xmlChar*)"targetNamespace");
+ if (xsdNode != NULL)
+ tns = xmlGetProp (xsdNode, (const xmlChar *) "targetNamespace");
- if (tns == NULL) {
-
- objInitModule(NULL);
+ if (tns == NULL)
+ {
+
+ objInitModule (NULL);
- } else {
+ }
+ else
+ {
- ns = xmlSearchNsByHref(xsdNode->doc, xsdNode, tns);
- if (ns == NULL) {
- fprintf(stderr, "WARNING: Target namespace not found!\n");
+ ns = xmlSearchNsByHref (xsdNode->doc, xsdNode, tns);
+ if (ns == NULL)
+ {
+ fprintf (stderr, "WARNING: Target namespace not found!\n");
return 0;
- }
+ }
- if (ns->prefix == NULL) {
- fprintf(stderr, "WARNING: Target namespace not found!\n");
+ if (ns->prefix == NULL)
+ {
+ fprintf (stderr, "WARNING: Target namespace not found!\n");
return 0;
}
- fprintf(stdout, "Target namespace ('%s') prefix: '%s'\n", tns, ns->prefix);
- objInitModule(ns->prefix);
+ fprintf (stdout, "Target namespace ('%s') prefix: '%s'\n", tns,
+ ns->prefix);
+ objInitModule (ns->prefix);
}
@@ -698,31 +998,33 @@ int xsdInitObjModule(xmlNodePtr xsdNode)
return 1;
}
-void xsdSetDestDir(const char* destDir)
+void
+xsdSetDestDir (const char *destDir)
{
- strcpy(outDir, destDir);
-
- mkdir(destDir, S_IRUSR|S_IWUSR|S_IXUSR |
- S_IRGRP|S_IWGRP|S_IXGRP |
- S_IROTH|S_IXOTH );
+ strcpy (outDir, destDir);
+
+#ifdef __MINGW32__
+ mkdir (destDir);
+#else
+ mkdir (destDir, S_IRUSR | S_IWUSR | S_IXUSR |
+ S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH);
+#endif
}
-int xsdEngineRun(xmlNodePtr xsdNode, const char* destDir)
+int
+xsdEngineRun (xmlNodePtr xsdNode, const char *destDir)
{
- xsdSetDestDir(destDir);
+ xsdSetDestDir (destDir);
- if (xsdNode != NULL) {
- runGenerator(xsdNode);
- objRegistryEnumComplexType(declareStructs);
- objRegistryEnumComplexType(writeSource);
+ if (xsdNode != NULL)
+ {
+ runGenerator (xsdNode);
+ objRegistryEnumComplexType (declareStructs);
+ objRegistryEnumComplexType (writeSource);
}
-
+
return 0;
}
-
-
-
-