<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://nwalsh.com/xmlns/witw-is#" xmlns:is="http://nwalsh.com/xmlns/witw-is#">
  <xs:element name="is">
    <xs:complexType>
      <xs:choice>
        <xs:group ref="is:isOk"/>
        <xs:element ref="is:invalid-request"/>
        <xs:element ref="is:unknown-user"/>
      </xs:choice>
      <xs:attribute name="date" use="required" type="xs:dateTime"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="isOk">
    <xs:sequence>
      <xs:element ref="is:user"/>
      <xs:element ref="is:locations"/>
      <xs:element minOccurs="0" ref="is:landmarks"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="user">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="is:name"/>
        <xs:element ref="is:uri"/>
        <xs:group ref="is:otherElement"/>
      </xs:choice>
      <xs:attribute name="userid" use="required" type="is:userId"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="uri" type="xs:string"/>
  <xs:element name="locations">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="is:location"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="location">
    <xs:complexType>
      <xs:attribute name="lat" use="required" type="is:latLong"/>
      <xs:attribute name="long" use="required" type="is:latLong"/>
      <xs:attribute name="date" use="required" type="xs:dateTime"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="landmarks">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="is:landmark"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="landmark">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
      <xs:attribute name="uri" use="required"/>
      <xs:attribute name="lat" use="required" type="is:latLong"/>
      <xs:attribute name="long" use="required" type="is:latLong"/>
      <xs:attribute name="dist" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:double">
            <xs:minInclusive value="0.0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="units" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="otherElement">
    <xs:choice>
      <xs:any namespace="##other" processContents="skip"/>
      <xs:any namespace="##local" processContents="skip"/>
    </xs:choice>
  </xs:group>
  <xs:attributeGroup name="otherAttribute">
    <xs:anyAttribute processContents="skip"/>
  </xs:attributeGroup>
  <xs:element name="invalid-request">
    <xs:complexType/>
  </xs:element>
  <xs:element name="unknown-user">
    <xs:complexType>
      <xs:attribute name="userid" use="required" type="is:userId"/>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="userId">
    <xs:restriction base="xs:string">
      <xs:minLength value="3"/>
      <xs:maxLength value="12"/>
      <xs:pattern value="[a-z0-9]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="latLong">
    <xs:restriction base="xs:double">
      <xs:minInclusive value="-180.0"/>
      <xs:maxInclusive value="180.0"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

