Mercurial > repos > ktnyt > gembassy
diff GEMBASSY-1.0.3/gsoap/wsdl/schema.h @ 0:8300eb051bea draft
Initial upload
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:19:29 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GEMBASSY-1.0.3/gsoap/wsdl/schema.h Fri Jun 26 05:19:29 2015 -0400 @@ -0,0 +1,498 @@ +/* + schema.h + + XSD binding schema interface + +-------------------------------------------------------------------------------- +gSOAP XML Web services tools +Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +This software is released under one of the following licenses: +GPL or Genivia's license for commercial use. +-------------------------------------------------------------------------------- +GPL license. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +Author contact information: +engelen@genivia.com / engelen@acm.org +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia, Inc., contact@genivia.com +-------------------------------------------------------------------------------- + +*/ + +//gsoap xs schema documentation: XSD binding schema +//gsoap xs schema namespace: http://www.w3.org/2001/XMLSchema +//gsoap xs schema elementForm: qualified +//gsoap xs schema attributeForm: unqualified + +/* For the wsdl:arrayType attribute to support old style SOAP arrays: */ +//gsoap wsdl schema namespace: http://schemas.xmlsoap.org/wsdl/ + +#import "imports.h" + +class xs__schema; // forward declaration +class xs__simpleType; // forward declaration +class xs__complexType; // forward declaration +class xs__extension; // forward declaration +class xs__restriction; // forward declaration +class xs__seqchoice; // forward declaration +class xs__group; // forward declaration +class xs__list; // forward declaration +class xs__union; // forward declaration + +class xs__annotation +{ public: + char *documentation; +}; + +enum xs__formChoice { unqualified, qualified }; + +class xs__element +{ public: + // @xsd__ID id; + @xsd__NCName name; + @xsd__QName ref; + @xsd__QName type; + @xsd__string default_; + @xsd__QName default__; // also get QName value if element type is QName + @xsd__string fixed; + @xsd__QName fixed_; // also get QName value if element type is QName + @enum xs__formChoice *form; + @xsd__boolean nillable = false; + @xsd__boolean abstract = false; + @xsd__QName substitutionGroup; + @xsd__string minOccurs; // xsd:nonNegativeInteger + @xsd__string maxOccurs; // xsd:nonNegativeInteger|unbounded + @xsd__string xmime__expectedContentTypes; + xs__annotation *annotation; + xs__simpleType *simpleType; // choice + xs__complexType *complexType; // choice + xsd__string unique; // dummy, not used + private: + xs__schema *schemaRef; // schema to which this belongs + xs__element *elementRef; // traverse() finds ref + xs__simpleType *simpleTypeRef; // traverse() finds type or = simpleType above + xs__complexType *complexTypeRef; // traverse() finds type or = complexType above + std::vector<xs__element*> substitutions; // traverse() finds substitutionGroup elements for this abstract element + public: + xs__element(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + void elementPtr(xs__element*); + void simpleTypePtr(xs__simpleType*); + void complexTypePtr(xs__complexType*); + xs__schema *schemaPtr() const; + xs__element *elementPtr() const; + xs__simpleType *simpleTypePtr() const; + xs__complexType *complexTypePtr() const; + const std::vector<xs__element*> *substitutionsPtr() const; +}; + +enum xs__attribute_use { optional, prohibited, required, default_, fixed_ }; + +class xs__attribute +{ public: + @xsd__NCName name; + @xsd__QName ref; + @xsd__QName type; + @enum xs__attribute_use use = optional; + @xsd__string default_; + @xsd__QName default__; // also get QName value if attribute type is QName + @xsd__string fixed; + @xsd__QName fixed_; // also get QName value if attribute type is QName + @enum xs__formChoice *form; + @xsd__QName wsdl__arrayType; // extensibility attribute added to simplify WSDL parsing + xs__annotation *annotation; + xs__simpleType *simpleType; + private: + xs__schema *schemaRef; // schema to which this belongs + xs__attribute *attributeRef; // traverse() finds ref + xs__simpleType *simpleTypeRef; // traverse() finds type or = simpleType above + public: + xs__attribute(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + void attributePtr(xs__attribute*); + void simpleTypePtr(xs__simpleType*); + xs__schema *schemaPtr() const; + xs__attribute *attributePtr() const; + xs__simpleType *simpleTypePtr() const; +}; + +class xs__all +{ public: + std::vector<xs__element> element; + public: + int traverse(xs__schema&); +}; + +enum xs__processContents { strict, skip, lax }; + +typedef char *xs__namespaceList; // "##any" or "##other" or list of URI, "##targetNamespace", "##local" + +class xs__any +{ public: + @xs__namespaceList namespace_ = "##any"; + @enum xs__processContents processContents = strict; + @xsd__string minOccurs; // xsd:nonNegativeInteger + @xsd__string maxOccurs; // xsd:nonNegativeInteger|unbounded + std::vector<xs__element> element; + public: + int traverse(xs__schema&); +}; + +class xs__contents +{ public: + $int __union; + union xs__union_content + { xs__element *element; + xs__group *group; + xs__seqchoice *choice; + xs__seqchoice *sequence; + xs__any *any; + } __content; + public: + int traverse(xs__schema&); +}; + +class xs__seqchoice +{ public: + @xsd__string minOccurs; // xsd:nonNegativeInteger + @xsd__string maxOccurs; // xsd:nonNegativeInteger|unbounded + xs__annotation *annotation; + std::vector<xs__contents> __contents; + private: + xs__schema *schemaRef; // schema to which this belongs + public: + xs__seqchoice(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; +}; + +class xs__group +{ public: + @xsd__NCName name; + @xsd__QName ref; + @xsd__string minOccurs; // xsd:nonNegativeInteger + @xsd__string maxOccurs; // xsd:nonNegativeInteger|unbounded + xs__annotation *annotation; + xs__all *all; + xs__seqchoice *choice; + xs__seqchoice *sequence; + private: + xs__schema *schemaRef; // schema to which this belongs + xs__group *groupRef; // traverse() finds ref + public: + xs__group(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + void groupPtr(xs__group*); + xs__schema *schemaPtr() const; + xs__group *groupPtr() const; +}; + +class xs__anyAttribute +{ public: + @xs__namespaceList namespace_ = "##any"; + @enum xs__processContents processContents = strict; +}; + +class xs__attributeGroup +{ public: + @xsd__NCName name; + @xsd__QName ref; + xs__annotation *annotation; + std::vector<xs__attribute> attribute; + std::vector<xs__attributeGroup> attributeGroup; + xs__anyAttribute *anyAttribute; + private: + xs__schema *schemaRef; + xs__attributeGroup *attributeGroupRef; + public: + xs__attributeGroup(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + void attributeGroupPtr(xs__attributeGroup*); + xs__schema *schemaPtr() const; + xs__attributeGroup *attributeGroupPtr() const; +}; + +class xs__enumeration +{ public: + @xsd__string value; + @xsd__QName value_; // also get QName value if base type is QName + xs__annotation *annotation; + public: + int traverse(xs__schema&); +}; + +class xs__pattern +{ public: + @xsd__string value; + public: + int traverse(xs__schema&); +}; + +class xs__simpleContent +{ public: + xs__extension *extension; // choice + xs__restriction *restriction; // choice + public: + int traverse(xs__schema&); +}; + +class xs__simpleType +{ public: + @xsd__NMTOKEN name; + xs__annotation *annotation; + xs__restriction *restriction; // choice + xs__list *list; // choice + xs__union *union_; // choice + private: + xs__schema *schemaRef; + int level; + public: + xs__simpleType(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; + int baseLevel(); +}; + +class xs__extension +{ public: + @xsd__QName base; + xs__group *group; + xs__all *all; + xs__seqchoice *choice; + xs__seqchoice *sequence; + std::vector<xs__attribute> attribute; + std::vector<xs__attributeGroup> attributeGroup; + xs__anyAttribute *anyAttribute; + private: + xs__simpleType *simpleTypeRef; // traverse() finds type + xs__complexType *complexTypeRef; // traverse() finds type + public: + xs__extension(); + int traverse(xs__schema&); + void simpleTypePtr(xs__simpleType*); + void complexTypePtr(xs__complexType*); + xs__simpleType *simpleTypePtr() const; + xs__complexType *complexTypePtr() const; +}; + +class xs__length +{ public: + @xsd__string value; + @xsd__boolean fixed; + xs__annotation *annotation; +}; + +class xs__whiteSpace +{ public: + @xsd__string value; +}; + +class xs__restriction +{ public: + @xsd__QName base; + xs__simpleType *simpleType; // used in <simpleType><restriction> + xs__attributeGroup *attributeGroup;// not used in <simpleType><restriction> + xs__group *group; // not used in <simpleType><restriction> + xs__all *all; // not used in <simpleType><restriction> + xs__seqchoice *choice; // not used in <simpleType><restriction> + xs__seqchoice *sequence; // not used in <simpleType><restriction> + std::vector<xs__attribute> attribute; // not used in <simpleType><restriction> + xs__anyAttribute *anyAttribute; // not used in <simpleType><restriction> + std::vector<xs__enumeration> enumeration; + std::vector<xs__pattern> pattern; + xs__whiteSpace *whiteSpace; + xs__length *length; + xs__length *minLength; + xs__length *maxLength; + xs__length *precision; // 2000 schema + xs__length *scale; // 2000 schema + xs__length *totalDigits; // 2001 schema + xs__length *fractionDigits; // 2001 schema + xs__length *minInclusive; + xs__length *maxInclusive; + xs__length *minExclusive; + xs__length *maxExclusive; + xs__annotation *annotation; + private: + xs__simpleType *simpleTypeRef; // traverse() finds type + xs__complexType *complexTypeRef; // traverse() finds type + public: + xs__restriction(); + int traverse(xs__schema&); + void simpleTypePtr(xs__simpleType*); + void complexTypePtr(xs__complexType*); + xs__simpleType *simpleTypePtr() const; + xs__complexType *complexTypePtr() const; +}; + +class xs__list +{ public: + @xsd__QName itemType; + xs__restriction *restriction; // choice + std::vector<xs__simpleType> simpleType; // choice + private: + xs__simpleType *itemTypeRef; + public: + xs__list(); + int traverse(xs__schema&); + void itemTypePtr(xs__simpleType*); + xs__simpleType *itemTypePtr() const; +}; + +class xs__union +{ public: + @xsd__NMTOKENS memberTypes; // check if NMTOKENS is ok??? + std::vector<xs__simpleType> simpleType; + public: + int traverse(xs__schema&); +}; + +class xs__complexContent +{ public: + @xsd__boolean mixed = false; + xs__extension *extension; + xs__restriction *restriction; + public: + int traverse(xs__schema&); +}; + +class xs__complexType +{ public: + @xsd__NMTOKEN name; + @xsd__boolean abstract = false; + @xsd__boolean mixed = false; + xs__annotation *annotation; + xs__simpleContent *simpleContent; + xs__complexContent *complexContent; + xs__all *all; + xs__seqchoice *choice; + xs__seqchoice *sequence; + xs__any *any; + std::vector<xs__attribute> attribute; + std::vector<xs__attributeGroup> attributeGroup; + xs__anyAttribute *anyAttribute; + private: + xs__schema *schemaRef; + int level; + public: + xs__complexType(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; + int baseLevel(); +}; + +class xs__import +{ public: + @xsd__anyURI namespace_; + @xsd__anyURI schemaLocation; + private: + xs__schema *schemaRef; // set by WSDL parser or via schemaLocation + public: + xs__import(); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; +}; + +class xs__include +{ public: + @xsd__anyURI schemaLocation; + private: + xs__schema *schemaRef; + public: + xs__include(); + int preprocess(xs__schema&); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; +}; + +class xs__redefine +{ public: + @xsd__anyURI schemaLocation; + std::vector<xs__group> group; + std::vector<xs__attributeGroup> attributeGroup; + std::vector<xs__simpleType> simpleType; + std::vector<xs__complexType> complexType; + private: + xs__schema *schemaRef; + public: + xs__redefine(); + int preprocess(xs__schema&); + int traverse(xs__schema&); + void schemaPtr(xs__schema*); + xs__schema *schemaPtr() const; +}; + +class xs__schema +{ public: + @xsd__anyURI targetNamespace = ""; + @xsd__string version; + @enum xs__formChoice attributeFormDefault = unqualified; + @enum xs__formChoice elementFormDefault = unqualified; + xs__annotation *annotation; + std::vector<xs__include> include; + std::vector<xs__redefine> redefine; + std::vector<xs__import> import; + std::vector<xs__attribute> attribute; + std::vector<xs__element> element; + std::vector<xs__group> group; + std::vector<xs__attributeGroup> attributeGroup; + std::vector<xs__simpleType> simpleType; + std::vector<xs__complexType> complexType; + struct soap *soap; + private: + bool updated; + char* location; + int redirs; + SetOfString builtinTypeSet; + SetOfString builtinElementSet; + SetOfString builtinAttributeSet; + public: + xs__schema(); + xs__schema(struct soap*); + xs__schema(struct soap*, const char*, const char*); + virtual ~xs__schema(); + int get(struct soap*); // gSOAP getter is triggered after parsing + int preprocess(); + int insert(xs__schema&); + int traverse(); + int read(const char*, const char*); + void sourceLocation(const char*); + const char* sourceLocation(); + int error(); + void print_fault(); + void builtinType(const char*); + void builtinElement(const char*); + void builtinAttribute(const char*); + const SetOfString& builtinTypes() const; + const SetOfString& builtinElements() const; + const SetOfString& builtinAttributes() const; + bool empty() const; + friend ostream& operator<<(ostream&, const xs__schema&); + friend istream& operator>>(istream&, xs__schema&); +}; + +extern ostream &operator<<(ostream &o, const xs__schema &e); +extern istream &operator>>(istream &i, xs__schema &e); +