<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Basis ist RSS 2.0 Spec.
+ Simple GeoRSS (georss) - Erweiterungen
+ eContent.eSuchWas (ec) - Erweiterungen
 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.0"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss/11" xmlns:ec="urn:schemas-econtent:rss">
  <xs:annotation>
    <xs:documentation>eSuchWas XML Schema</xs:documentation>
  </xs:annotation>
  
  <xs:import namespace="http://www.georss.org/georss/11" schemaLocation="georss.xsd"/>
  <xs:import namespace="http://www.w3.org/2003/01/geo/wgs84_pos#" schemaLocation="geo.xsd" />
  <xs:import namespace="urn:schemas-econtent:rss" schemaLocation="eContentV4.xsd" />
  
  <xs:element name="rss">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="channel" type="TypeChannel"/>
        <!-- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> -->
      </xs:sequence>
      <xs:attribute name="version" type="xs:decimal" use="required" fixed="2.0"/>
      <xs:anyAttribute namespace="##any"/>
    </xs:complexType>
  </xs:element>
  
  <xs:complexType name="TypeItem">
    <xs:annotation>
      <xs:documentation>Ein eSuchWas Objekt</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
      
        <xs:element name="guid" type="TypeGuid" minOccurs="0">
          <xs:annotation>
            <xs:documentation>GUID oder PermaLink für das Objekt</xs:documentation>
          </xs:annotation>
        </xs:element>
        
        <!-- Alle eContent/eSuchWas Erweiterungen (eContent.xsd) -->
        <xs:any namespace="urn:schemas-econtent:rss" minOccurs="0" maxOccurs="unbounded" processContents="strict" />

        <xs:element ref="geo:lat" minOccurs="1">
          <xs:annotation>
            <xs:documentation>Latitude</xs:documentation>
          </xs:annotation>
        </xs:element> 
        <xs:element ref="geo:long" minOccurs="1">
          <xs:annotation>
            <xs:documentation>Longitude</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="georss:elev">
          <xs:annotation>
            <xs:documentation>Höhe über dem Meerespiegel in Meter</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="georss:polygon">
          <xs:annotation>
            <xs:documentation>Daten für Tour</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="georss:line">
          <xs:annotation>
            <xs:documentation>Daten für Tour</xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element name="category" type="TypeCategory" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Kategorien des Objekts</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="title" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Der Titel des Objekts</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="description" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Detailierte Beschreibung (HTML)</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="shortdescription" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Kurzbeschreibung (HTML)</xs:documentation>
          </xs:annotation>
        </xs:element>        
        <xs:element name="link" type="xs:anyURI" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Link auf die Detailseite</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="enclosure" type="TypeEnclosure" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Media-Objekte</xs:documentation>
          </xs:annotation>
        </xs:element>        
        <xs:element name="author" type="TypeEmail" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Email des Erstellers des Objekts</xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element name="source" type="TypeSource" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Die Quelle des Objekts</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="comments" type="xs:anyURI" minOccurs="0">
          <xs:annotation>
            <xs:documentation>URL für weitere Kommentare</xs:documentation>
          </xs:annotation>
        </xs:element>        
        <xs:element name="pubDate" type="xs:dateTime" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Veröffentlichung des Objekts</xs:documentation>
          </xs:annotation>
        </xs:element>
        
       <!--  <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>Weitere Tags</xs:documentation>
          </xs:annotation>
        </xs:any> -->
      </xs:choice>
    </xs:sequence>
    <xs:anyAttribute namespace="##any"/>
  </xs:complexType>
  <xs:complexType name="TypeChannel">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="title" type="xs:string">
          <xs:annotation>
            <xs:documentation>Der Name des Channels</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="category" type="TypeCategory" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Kategorien des Channels</xs:documentation>
          </xs:annotation>
        </xs:element>  
        <xs:element name="description" type="xs:string">
          <xs:annotation>
            <xs:documentation>Beschreibung des Channels.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="link" type="xs:anyURI">
          <xs:annotation>
            <xs:documentation>Channel URL</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="language" type="xs:language" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Die Sprache der ausgelieferten Daten</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="copyright" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Copyright Hinweis</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="managingEditor" type="TypeEmail" minOccurs="0">
          <xs:annotation>
            <xs:documentation>E-Mail Adresse des Erstellers.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="webMaster" type="TypeEmail" minOccurs="0">
          <xs:annotation>
            <xs:documentation>E-Mail Adresse des Technischen Partners</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="pubDate" type="xs:dateTime" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Veröffentlichungsdatum</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="lastBuildDate" type="xs:dateTime" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Letzte Änderung.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="generator" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Programm, das zur Erstellung des Feeds verwendet wurde</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="docs" type="xs:anyURI" minOccurs="0">
          <xs:annotation>
            <xs:documentation>URL zur Dokumentation des Channels</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="ttl" type="xs:nonNegativeInteger" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Zeit in Minuten, bis der Channel(Feed) aktualisiert werden sollte.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="rating" type="xs:string" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Bewertung des Channels</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="count" type="xs:nonNegativeInteger" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Anzahl der Items im Feed</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="overallcount" type="xs:nonNegativeInteger" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Anzahl der Items im Feed</xs:documentation>
          </xs:annotation>
        </xs:element>        
        <xs:element name="quality" type="xs:nonNegativeInteger" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Qualität des Ergebnisses in Prozent. 100 = Alle Daten vorhanden</xs:documentation>
          </xs:annotation>
        </xs:element>        
        <!-- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>Weitere Tags</xs:documentation>
          </xs:annotation>
        </xs:any> -->
      </xs:choice>
      <xs:element name="item" type="TypeItem" minOccurs="1" maxOccurs="unbounded" />
      <!-- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>Weitere Tags.</xs:documentation>
        </xs:annotation>
      </xs:any> -->
    </xs:sequence>
    <xs:anyAttribute namespace="##any"/>
  </xs:complexType>
  <xs:complexType name="TypeGuid">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="isPermaLink" type="xs:boolean" use="optional" default="true"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>  
  <xs:complexType name="TypeCategory">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="domain" type="xs:string" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="TypeEmail">
    <xs:restriction base="xs:string">
      <xs:pattern value="([a-zA-Z0-9_\-])([a-zA-Z0-9_\-\.]*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\])"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="TypeEnclosure">
    <xs:simpleContent>
      <xs:extension base="xs:string">  
        <xs:attribute name="url" type="xs:anyURI" use="required">
          <xs:annotation>
            <xs:documentation>URL mit der Adresse</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="length" type="xs:nonNegativeInteger" use="optional">
          <xs:annotation>
            <xs:documentation>Grösse in Bytes</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="type" type="xs:string" use="optional">
          <xs:annotation>
            <xs:documentation>MIME Media-Type</xs:documentation>
          </xs:annotation>
        </xs:attribute>         
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="TypeSource">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="url" type="xs:anyURI"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

</xs:schema>
