<descriptions xmlns="http://nwalsh.com/xmlns/nsdl#"
	      xmlns:is="http://nwalsh.com/xmlns/witw-is#"
	      xmlns:p="http://nwalsh.com/xmlns/witw-person#">

<!-- Copyright 2005 Norman Walsh. This work is licensed under a
     Creative Commons License: http://creativecommons.org/licenses/by-nc/2.0/ -->

<types xmlns:rng="http://relaxng.org/ns/structure/1.0">
  <rng:define name="DigitBoolean">
    <rng:choice>
      <rng:value>0</rng:value>
      <rng:value>1</rng:value>
    </rng:choice>
  </rng:define>

  <rng:define name="UserId">
    <rng:data type="string">
      <rng:param name="minLength">3</rng:param>
      <rng:param name="maxLength">12</rng:param>
      <rng:param name="pattern">[a-z][a-z0-9]*</rng:param>
    </rng:data>
  </rng:define>

  <rng:define name="Latitude">
    <rng:data type="double">
      <rng:param name="minInclusive">-90.0</rng:param>
      <rng:param name="maxInclusive">90.0</rng:param>
    </rng:data>
  </rng:define>

  <rng:define name="Longitude">
    <rng:data type="double">
      <rng:param name="minInclusive">-180.0</rng:param>
      <rng:param name="maxInclusive">180.0</rng:param>
    </rng:data>
  </rng:define>
</types>

<service name="user"
	 action="get"
	 uri="http://norman.walsh.name/2005/02/witw/is?">
  <request>
    <parameter name="userid" type="UserId"/>
    <parameter name="nearby" type="xsd:integer" optional="yes"/>
  </request>

  <response>
    <fault name="baduserid" select="//is:unknown-user"/>
    <fault name="invalid" select="//is:invalid-request"/>

<!-- basically, if the select XPath on a fault element matches, then something
     went wrong. Obviously things can go wrong at the protocol level too. -->

    <result name="name" select="/is:is/is:user/is:name"/>
    <result name="userid" select="/is:is/is:user/@userid"/>
    <result name="uri" select="/is:is/is:user/is:uri"/>
    <result xmlns:foaf="http://xmlns.com/foaf/0.1/"
	    name="mailbox" select="/is:is/is:user/foaf:mbox_sha1sum"/>
    <result name="lat" select="/is:is/is:locations/is:location/@lat"/>
    <result name="long" select="/is:is/is:locations/is:location/@long"/>
    <result name="date" select="/is:is/is:locations/is:location/@date"/>

<!-- If there are no faults, then we select one or more named results from
     the response. For the common case of a single named result, that's just
     the same as returning a scalar. For multiple names, the response object
     can provide named access to them.
-->
  </response>
</service>

<service name="lat"
	 action="get"
	 uri="http://norman.walsh.name/2005/02/witw/is">
  <request>
    <parameter name="userid" type="UserId"/>
  </request>

  <response>
    <fault name="baduserid" select="//is:unknown-user"/>
    <fault name="invalid" select="//is:invalid-request"/>
    <result select="/is:is/is:locations/is:location/@lat"/>
  </response>
</service>

<service name="long"
	 action="get"
	 uri="http://norman.walsh.name/2005/02/witw/is">
  <request>
    <parameter name="userid" type="UserId"/>
  </request>

  <response>
    <fault name="baduserid" select="//is:unknown-user"/>
    <fault name="invalid" select="//is:invalid-request"/>
    <result select="/is:is/is:locations/is:location/@long"/>
  </response>
</service>

<service name="date"
	 action="get"
	 uri="http://norman.walsh.name/2005/02/witw/is">
  <request>
    <parameter name="userid" type="UserId"/>
  </request>

  <response>
    <fault name="baduserid" select="//is:unknown-user"/>
    <fault name="invalid" select="//is:invalid-request"/>
    <result select="/is:is/is:locations/is:location/@date"/>
  </response>
</service>

<service xmlns:l="http://nwalsh.com/xmlns/witw-post#"
	 name="ami"
	 action="post"
	 uri="http://norman.walsh.name/2005/02/witw/ami/now">
  <request>
    <parameter name="lat" type="Latitude"/>
    <parameter name="long" type="Longitude"/>

    <body>
      <location xmlns="http://nwalsh.com/xmlns/witw-post#">
	<latlong>
	  <lat>{$lat}</lat>
	  <long>{$long}</long>
	</latlong>
      </location>
    </body>
  </request>

  <response xmlns:ami='http://nwalsh.com/xmlns/witw-ami#'
	    xmlns:is="http://nwalsh.com/xmlns/witw-is#">
    <fault name="baduserid" select="//is:unknown-user"/>
    <result select="ami:ami/ami:location/@date"/>
  </response>
</service>

</descriptions>

