<?xml version="1.0" encoding="iso-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- tested with "xmllint -schema osm-0.5-schema.xml osmfile" -->
	<xsd:element name="osm">
	  <xsd:complexType>
	    <xsd:sequence>
	      <xsd:element name="node" minOccurs="0" maxOccurs="unbounded"/>
	      <xsd:element name="way" minOccurs="0" maxOccurs="unbounded"/>
	      <xsd:element name="relation" minOccurs="0" maxOccurs="unbounded"/>
	    </xsd:sequence>
	    <xsd:attribute name="version" type="xsd:float" use="required"/>
	    <xsd:attribute name="generator" type="xsd:string" use="required"/>
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="node">
	  <xsd:complexType>
	    <xsd:sequence>
	      <xsd:element name="tag" minOccurs="0" maxOccurs="unbounded"/>
	    </xsd:sequence>
	    <xsd:attribute name="id" type="xsd:integer" use="required"/>
	    <xsd:attribute name="lat" type="xsd:float" use="required"/>
	    <xsd:attribute name="lon" type="xsd:float" use="required"/>
	    <xsd:attribute name="visible" type="xsd:boolean" />
	    <xsd:attribute name="user" type="xsd:string" />	
	    <xsd:attribute name="timestamp" type="osm_timestamp" />
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="way">
	  <xsd:complexType>
	    <xsd:sequence>
	      <xsd:element name="nd" minOccurs="1"/>
	      <xsd:element name="tag" minOccurs="0" maxOccurs="unbounded"/>
	    </xsd:sequence>
	    <xsd:attribute name="id" type="xsd:integer" use="required"/>
	    <xsd:attribute name="visible" type="xsd:boolean" />
	    <xsd:attribute name="user" type="xsd:string" />	
	    <xsd:attribute name="timestamp" type="osm_timestamp" />	
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="nd">
	  <xsd:complexType>
	    <xsd:attribute name="ref" type="xsd:integer" use="required"/>
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="relation">
	  <xsd:complexType>
	    <xsd:sequence>
	      <xsd:element name="member" minOccurs="1"/>
	      <xsd:element name="tag" minOccurs="0" maxOccurs="unbounded"/>
	    </xsd:sequence>
	    <xsd:attribute name="id" type="xsd:integer" use="required"/>
	    <xsd:attribute name="visible" type="xsd:boolean" />
	    <xsd:attribute name="user" type="xsd:string" />
	    <xsd:attribute name="timestamp" type="osm_timestamp" />	
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="member">
	  <xsd:complexType>
	    <xsd:attribute name="type" type="member_type" use="required"/>
	    <xsd:attribute name="ref" type="xsd:integer" use="required"/>
	    <xsd:attribute name="role" type="member_role" />
	  </xsd:complexType>
	</xsd:element>

	<xsd:element name="tag">
	  <xsd:complexType>
	    <xsd:attribute name="k" type="xsd:string" use="required"/>
	    <xsd:attribute name="v" type="xsd:string" use="required"/>
	  </xsd:complexType>
	</xsd:element>

	<xsd:simpleType name="member_type">
	  <xsd:restriction base="xsd:string">
	    <xsd:enumeration value="node"/>
	    <xsd:enumeration value="way"/>
	    <xsd:enumeration value="relation"/>
	  </xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="member_role">
	  <xsd:restriction base="xsd:string">
	  </xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="osm_timestamp">
	  <xsd:restriction base="xsd:dateTime">
	  <!--  <xsd:pattern value="[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]Z"/> -->
	  </xsd:restriction>
	</xsd:simpleType>

</xsd:schema>
