<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<s:schema elementFormDefault="qualified" targetNamespace="http://www.strikeiron.com" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.strikeiron.com">
      <s:element name="GetQuotes">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="TickerSymbolList" type="s:string" />
          </s:sequence>
        </s:complexType>

      </s:element>
      <s:element name="GetQuotesResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetQuotesResult" type="s0:ArrayOfRealQuote" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfRealQuote">

        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="RealQuote" nillable="true" type="s0:RealQuote" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="RealQuote">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="Symbol" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="CUSIP" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="CIK" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Date" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Time" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="Last" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="Quantity" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="ChangeFromPrevious" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="PercentChangeFromPrevious" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="Open" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="ChangeFromOpen" type="s:double" />

          <s:element minOccurs="1" maxOccurs="1" name="PercentChangeFromOpen" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="Bid" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="Ask" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="Spread" type="s:double" />
          <s:element minOccurs="1" maxOccurs="1" name="BidQuantity" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="AskQuantity" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="Volume" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="ECNVolume" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="Highest" type="s:double" />

          <s:element minOccurs="1" maxOccurs="1" name="Lowest" type="s:double" />
          <s:element minOccurs="0" maxOccurs="1" name="Rank" type="s:string" />
        </s:sequence>
      </s:complexType>
      <s:element name="ResponseInfo" type="s0:ResponseInfo" />
      <s:complexType name="ResponseInfo">
        <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" name="ResponseCode" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="Response" type="s:string" />

        </s:sequence>
      </s:complexType>
      <s:element name="GetOneQuote">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="TickerSymbol" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>

      <s:element name="GetOneQuoteResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetOneQuoteResult" type="s0:RealQuote" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>