/**
  * Create the part WSDL
  * 
  * @param PhpWsdl $pw The PhpWsdl object
  * @return string The WSDL
  */
 public function CreatePart($pw)
 {
     PhpWsdl::Debug('Create WSDL definition for parameter part ' . $this->Name);
     $res = '<wsdl:part name="' . $this->Name . '" type="';
     $res .= PhpWsdl::TranslateType($this->Type) . '"';
     if ($pw->IncludeDocs && !$pw->Optimize && !is_null($this->Docs)) {
         $res .= '>' . "\n";
         $res .= '<s:documentation><![CDATA[' . $this->Docs . ']]></s:documentation>' . "\n";
         $res .= '</wsdl:part>';
     } else {
         $res .= ' />';
     }
     return $res;
 }
 /**
  * Create the WSDL
  * 
  * @param PhpWsdl $pw The PhpWsdl object
  * @return string The WSDL
  */
 public function CreateElement($pw)
 {
     PhpWsdl::Debug('Create WSDL definition for element ' . $this->Name);
     $res = '<s:element minOccurs="' . $this->MinOccurs . '" maxOccurs="' . $this->MaxOccurs . '" nillable="' . ($this->NillAble ? 'true' : 'false') . '" name="' . $this->Name . '" type="';
     $res .= PhpWsdl::TranslateType($this->Type) . '"';
     if ($pw->IncludeDocs && !$pw->Optimize && !is_null($this->Docs)) {
         $res .= '>' . "\n";
         $res .= '<s:annotation>' . "\n";
         $res .= '<s:documentation><![CDATA[' . $this->Docs . ']]></s:documentation>' . "\n";
         $res .= '</s:annotation>' . "\n";
         $res .= '</s:element>';
     } else {
         $res .= ' />';
     }
     return $res;
 }
 /**
  * Create WSDL for the type
  * 
  * @param PhpWsdl $pw The PhpWsdl object
  * @return string The WSDL
  */
 public function CreateType($pw)
 {
     PhpWsdl::Debug('Create WSDL definition for enumeration ' . $this->Name . ' as ' . $this->Type);
     $res = array();
     $res[] = '<s:simpleType name="' . $this->Name . '">';
     if ($pw->IncludeDocs && !$pw->Optimize && !is_null($this->Docs)) {
         $res[] = '<s:annotation>';
         $res[] = '<s:documentation><![CDATA[' . $this->Docs . ']]></s:documentation>';
         $res[] = '</s:annotation>';
     }
     $res[] = '<s:restriction base="' . PhpWsdl::TranslateType($this->Type) . '">';
     $i = -1;
     $len = sizeof($this->Elements);
     while (++$i < $len) {
         $temp = explode('=', $this->Elements[$i], 2);
         //TODO Is there really no common way to provide a label for an integer value f.e.?
         $res[] = '<s:enumeration value="' . self::EncodeXmlAttribute($temp[0]) . '" />';
     }
     $res[] = '</s:restriction>';
     $res[] = '</s:simpleType>';
     return implode('', $res);
 }
 /**
  * Create WSDL for the type
  * 
  * @param PhpWsdl $pw The PhpWsdl object
  * @return string The WSDL
  */
 public function CreateType($pw)
 {
     $res = array();
     $res[] = '<s:complexType name="' . $this->Name . '">';
     if ($pw->IncludeDocs && !$pw->Optimize && !is_null($this->Docs)) {
         $res[] = '<s:annotation>';
         $res[] = '<s:documentation><![CDATA[' . $this->Docs . ']]></s:documentation>';
         $res[] = '</s:annotation>';
     }
     if (!$this->IsArray) {
         PhpWsdl::Debug('Create WSDL definition for type ' . $this->Name . ' as type');
         if (is_null($this->Inherit)) {
             $res[] = '<s:sequence>';
             $i = -1;
             $len = sizeof($this->Elements);
             while (++$i < $len) {
                 $res[] = $this->Elements[$i]->CreateElement($pw);
             }
             $res[] = '</s:sequence>';
         } else {
             PhpWsdl::Debug('Inherit from "' . $this->Inherit . '"');
             $res[] = '<s:complexContent>';
             $res[] = '<s:extension base="tns:' . $this->Inherit . '">';
             $res[] = '<s:sequence>';
             $i = -1;
             $len = sizeof($this->Elements);
             while (++$i < $len) {
                 $res[] = $this->Elements[$i]->CreateElement($pw);
             }
             $res[] = '</s:sequence>';
             $res[] = '</s:extension>';
             $res[] = '</s:complexContent>';
         }
     } else {
         PhpWsdl::Debug('Create WSDL definition for type ' . $this->Name . ' as array');
         $res[] = '<s:complexContent>';
         $res[] = '<s:restriction base="soapenc:Array">';
         $res[] = '<s:attribute ref="soapenc:arrayType" wsdl:arrayType="' . PhpWsdl::TranslateType($this->Type) . '[]" />';
         $res[] = '</s:restriction>';
         $res[] = '</s:complexContent>';
     }
     $res[] = '</s:complexType>';
     return implode('', $res);
 }