 # Parser for WSDL Definitions:
 'WSDLdef' => {-common => {-start => 'nestState="Error"', 
			   -char => 'error("CDATA ", characters, "in", nestState, "for tag", name)'}, 
	       -onTag => {'wsdl:types' => {-start => 'nestState="WSDLtypes"; typeBag=GENID'}, 
			  'wsdl:message' => {-bind => {'wsdl:name' => 'defTNS[-2]."message_"messageName', 
						       'xsd:name' => 'defTNS[-2]."message_"messageName'}, # !!! [ns1]
					     -start => 'nestState="WSDLmessage"', 
					     -attr => {"wsdl:name" => undef, "xsd:name" => undef}, 
					     -otherAttr => ['literal', '
error("attribute", attribute, "=", value, "in", nestState, "for tag", name)']}, 
			  'wsdl:portType' => {-bind => {'wsdl:name' => ['defTNS[-2]."portType_"portTypeName', 'defTNS[-2]."abstract_"abstractName'], 
							'xsd:name' => 'defTNS[-2]."portType_"portTypeName'}, # !!! [ns1]
					      -start => 'nestState="WSDLpt";'}, 
			  'wsdl:binding' => {-bind => {'wsdl:name' => ['defTNS[-2]."binding_"bindingName', 'defTNS[-2]."abstract_"abstractName999'], 
						       'xsd:name' => 'defTNS[-2]."binding_"bindingName', 
						       'wsdl:type' => [':"portType_"bindingType', ':"abstract_"abstractName'], 
						       'xsd:type' => ':"portType_"bindingType'}, # !!! [ns1]
					     -start => '
nestState="WSDLbinding"; 
addStatement(\'wsdl:portType\', bindingName, bindingType, NULL,NULL)'},
			  'wsdl:service' => {-bind => {'wsdl:name' => 'defTNS[-2]."service_"serviceName', 
						       'xsd:name' => 'defTNS[-2]."service_"serviceName'}, # !!! [ns1]
					     -start => '
nestState="WSDLservice"; addStatement(\'wsdl:service\', defName[-2], serviceName, NULL, NULL);'}}},

 # 
 'WSDLtypes' => {-onTag => {'xsd:schema' => {-bind => {'xsd:targetNamespace' => 'xsdtns'}, 
					     -start => 'nestState="XSDschema"'}}}, 

 # 
 'WSDLmessage' => {-common => {-start => 'nestState="Error"'}, 
		   -onTag => {'wsdl:part' =>{-bind => {"wsdl:name" => '"partName"', "wsdl:element" => ':"xsd_"partElement'}, 
					     -start => '
partId=GENID;
addStatement(\'wsdl:part\', messageName[-2], partId, NULL, NULL);
addStatement(\'wsdl:partName\', partId, partName, NULL, NULL);
addStatement(\'wsdl:schemaRef\', partId, partElement, NULL, NULL);'}}}, 

 # 
 'WSDLpt' => {-common => {-start => 'nestState="Error"'}, 
#	      -onTag => {'wsdl:operation' => {-bind => {'wsdl:name' => ['abstractName[-2].opName', 'abstractNameTwo[-2].opNameTwo']}, 
	      -onTag => {'wsdl:operation' => {-bind => {'wsdl:name' => ['abstractName[-2].opName']}, 
					      -start => '
nestState="WSDLptOp";
addStatement(\'wsdl:abstractOperation\', portTypeName[-2], opName, NULL, NULL);
addStatement(\'rdf:type\', opName, \'wsdl:AbstractOperation\', NULL, NULL)'}}}, 

 # 
 'WSDLptOp' => {-common => {-bind => {'wsdl:message' => ':"message_"WSDLmessage'}}, 
		-onTag => {'wsdl:input' => {-start => 
						'addStatement(\'wsdl:abstractInput\', opName[-2], WSDLmessage, NULL, NULL)'},
			   'wsdl:output' => {-start => 
						 'addStatement(\'wsdl:abstractOutput\', opName[-2], WSDLmessage, NULL, NULL)'}, 
			   'wsdl:fault' => {-start => 
						'addStatement(\'wsdl:abstractFault\', opName[-2], WSDLmessage, NULL, NULL)'}}}, 

 # 
 'WSDLbinding' => {-common => {-start => 'nestState="Error"'}, 
		   -onTag => {'soap:binding' => {-bind => {'soap:style' => 'elementNs."styles_"soapStyle', 
							   'soap:transport' => 'soapTransport'}, 
						 -start => 'nestState="Error"; bindingId=GENID;
addStatement(\'soap:binding\', bindingName[-2], bindingId, NULL, NULL);
addStatement(\'soap:stype\', bindingId, soapStyle, NULL, NULL);
addStatement(\'soap:transport\', bindingId, soapTransport, NULL, NULL)'}, 
			      'wsdlHttp:binding' => {-bind => {'wsdlHttp:verb' => '"httpVerb"'}, 
						 -start => 'nestState="Error"; bindingId=GENID;
addStatement(\'wsdlHttp:binding\', bindingName[-2], bindingId, NULL, NULL);
addStatement(\'wsdlHttp:method\', bindingId, httpVerb, NULL, NULL)'}, 
			      'wsdl:operation' => {-bind => {'wsdl:name' => 'abstractName[-2].abstractOpName'}, 
						   -start => 'nestState="WSDLop";
boundOp=GENID;
addStatement(\'wsdl:boundOperation\', bindingName[-2], boundOp, NULL, NULL);
addStatement(\'wsdl:abstraction\', boundOp, abstractOpName, NULL, NULL)'}}}, 
#addStatement(\'rdf:type\', boundOp, \'wsdl:BoundOperation\', NULL, NULL);

 # 
 'WSDLop' => {-onTag => {'soap:operation' => {-bind => {'soap:soapAction' => 'soapAction'}, 
					      -start => 'addStatement(\'soap:address\', boundOp[-2], soapAction, NULL, NULL)'}, 
			 'wsdl:input' => {-start => '
literalMode(addStatement, \'wsdl:boundInput\', boundOp[-2], literal, NULL, NULL);'}, 
			     'wsdl:output' => {-start => '
literalMode(addStatement, \'wsdl:boundOutput\', boundOp[-2], literal, NULL, NULL);'}, 
			     'wsdl:fault' => {-start => '
literalMode(addStatement, \'wsdl:boundFault\', boundOp[-2], literal, NULL, NULL);'}}}, 

 # 
 'WSDLservice' => {-common => {-start => 'nestState="Error"'}, 
		   -onTag => {'wsdl:documentation' => {-start => 'nestState="WSDLsrvcDoc"'}, 
			      'wsdl:port' => {-bind => {'wsdl:name' => 'defTNS[-3]."port_"portName', 
							'wsdl:binding' => ':"binding_"portBinding'}, 
					      -start => 'nestState="WSDLsrvcPort";
addStatement(\'wsdl:port\', serviceName[-2], portName, NULL, NULL);
addStatement(\'wsdl:binding\', portName, portBinding, NULL, NULL)'}}}, 

 # 
 'WSDLsrvcDoc' => {-common => {-char => 'addStatement(\'wsdl:documentation\', serviceName[-3], characters, NULL, NULL)'}}, 

 # 
 'WSDLsrvcPort' => {-onTag => {'soap:address' => {-bind => {'soap:location' => 'soapAddress'}, 
						  -start => '
addStatement(\'soap:address\', portName[-2], soapAddress, NULL, NULL)'}}},

# XSD
 'XSDschema' => {-common => {-start => 'nestState="Error"'}, 
		 -onTag => {'xsd:element' => {-bind => {'xsd:name' => 'xsdtns[-2]."xsd_"XSDname'}, 
					      -start => '
literalMode(addStatement, \'wsdl:schemaDef\', XSDname, literal, NULL, NULL)'}}}, 

 # 
 'XSDelement' => {-common => {-start => '
literalMode(addStatement, \'wsdl:schemaDef\', XSDname[-2], literal, NULL, NULL);', 
				  -end => 'warn("XSD def created for ", XSDName[-2])'}}, 

