<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:abt="http://www.auerswald.de/auer_base_types"
            xmlns:iprt="http://www.auerswald.de/ip_relaistypes"
>

<xsd:import namespace="http://www.auerswald.de/auer_base_types" schemaLocation="auer_base_types.xsd"/>
<xsd:import namespace="http://www.auerswald.de/ip_relaistypes" schemaLocation="ip_relaistypes.xsd"/>



<!-- Attribute fuer Eingabefelder -->
<!-- Attribut:Eingabefeld soll editierbar sein -->
<xsd:attribute name="editable" type="xsd:boolean">
    <xsd:annotation>
       <xsd:documentation >
            Attribut fuer Eingabefelder im WEB-Browser: Soll das Eingabefeld editierbar sein ? - true: ja, false: nein
       </xsd:documentation>
    </xsd:annotation>
</xsd:attribute>

<!-- Attribut:Eingabefeld ist optional -->
<xsd:attribute name="gui_is_optional" type="xsd:boolean">
    <xsd:annotation>
       <xsd:documentation >
            Attribut fuer Eingabefelder im WEB-Browser: Muss das Eingabefeld vorhanden sein ? - true: ja, false: nein
       </xsd:documentation>
    </xsd:annotation>
</xsd:attribute>



<xsd:element name="Device">
  <xsd:annotation>
      <xsd:documentation >
         Definition eines Geräte-Layouts fuer Türstationen, Durchsagegeräte und Relais-Schaltgeräte
      </xsd:documentation>
  </xsd:annotation>

  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="Door_station" type="DoorstationType" minOccurs="0">
		  <xsd:annotation>
		      <xsd:documentation >
		         Definition des Layouts fuer Türstationen oder Durchsagegeräte. Entfällt bei 
		         einem einfachen Relais-Schaltgerät.
		      </xsd:documentation>
		  </xsd:annotation>
      </xsd:element>
      <xsd:element name="IPBox" type="IPBox_Type" minOccurs="0">
		 <xsd:annotation>
		     <xsd:documentation >
		        Definition des Layout für IP-Devices (Türstationen, Relais-Schaltgeräte), 
		        die Relais haben. Entfällt bei Geräten, die über einen a/b-Port angesprochen werden. 
		     </xsd:documentation>
		 </xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string" use="optional"/>
    <xsd:attribute name="template_version" type="xsd:string" use="required">
         <xsd:annotation>
             <xsd:documentation >
                Versionierung des Device-Template: 1.0 
             </xsd:documentation>
         </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
</xsd:element>



<xsd:complexType name = "DoorstationType">
   <xsd:annotation>
       <xsd:documentation >
          Layouts fuer Türstationen oder Durchsagegeräte
       </xsd:documentation>
   </xsd:annotation>
   <xsd:sequence>
       <xsd:element name="Model" type="gui_string_type">
         <xsd:annotation>
             <xsd:documentation >
                Text: Bezeichnung des Gerätemodels 
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
       <xsd:element name="Company" type="gui_string_type">
         <xsd:annotation>
             <xsd:documentation >
                Text: Bezeichnung des Geräte-Herstellers 
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
       <xsd:element name="Technology" type="TechnologyType">
         <xsd:annotation>
             <xsd:documentation >
                Auswahl: "analog" oder "SIP" 
                 - analog: Das Gerät wird über einen a/b-Port der PBX angesprochen
                 - SIP: Es handelt sich um ein IP-Gerät.
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
	   <xsd:element name="Activation_sequence" type ="activation_sequence_type">
         <xsd:annotation>
             <xsd:documentation >
                Optional bei a/b-Geräten: Eine DTMF-Ziffernfolge, die das Durchschalten des 
                Audio-Kanal im Gerät auslößt.
             </xsd:documentation>
         </xsd:annotation>
	   </xsd:element>
       <xsd:element name="Deactivation_sequence" type ="activation_sequence_type" minOccurs="0">
         <xsd:annotation>
             <xsd:documentation >
                Optional bei a/b-Geräten: Eine DTMF-Ziffernfolge, die das Auflegen (Hook on) des 
                Gerät auslößt. Das Auflegen des Gerätes geht damit schneller und somit ist das Gerät 
                anschließend wieder schneller rufbar. Ohne solch ein Kommando kann es mindestens 5s 
                dauern, bis ein eingespielter Besetztton vom Gerät erkannt wird und dann das Auflegen 
                ausgeführt wird.
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
       <xsd:element name="Hook_on_sequence" type ="totzeit_type" minOccurs="0">
         <xsd:annotation>
             <xsd:documentation >
                Optional bei a/b-Geräten: Zeit in ms, in der das Gerät nach einer ggf. gesendeten
                Aktivierungssequenz, nicht ansprechbar ist und dabei keine DTMF-Befehlssequenzen 
                empfangen kann
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
       <xsd:element name="Bell_pushes" type ="bell_pushes_type" minOccurs="0" >
         <xsd:annotation>
             <xsd:documentation >
                Individulle Konfiguration von Signalgebern, wie Türklingeln, etc. 
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
       <xsd:element name="Relays" type ="set_of_ab_relais" minOccurs="0">
         <xsd:annotation>
             <xsd:documentation >
                Individuelle Konfiguration von Relais
             </xsd:documentation>
         </xsd:annotation>
       </xsd:element>
   </xsd:sequence>
   <xsd:attribute name="name" type="xsd:string">
         <xsd:annotation>
             <xsd:documentation >
                ? interne Zwecke: Text
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="callnumber" type="abt:numberType">
         <xsd:annotation>
             <xsd:documentation >
                ? interne Zwecke: Rufnummer
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="port" type="slot_pos_type" use="required">
         <xsd:annotation>
             <xsd:documentation >
                ? interne Zwecke: Zahl 0.. 
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="dead_time" type="xsd:positiveInteger">
         <xsd:annotation>
             <xsd:documentation >
                ? interne Zwecke: Zeit in ms
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="slot" type="slot_pos_type" use="required">
         <xsd:annotation>
             <xsd:documentation >
                ? interne Zwecke: Zahl 0..
             </xsd:documentation> 
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="max_relais" type="abt:posint_with_0">
         <xsd:annotation>
             <xsd:documentation >
                Anzahl Relais, die fest/konstruktiv dem Gerät zu geordnet sind, um diese von Relais 
                zu unterscheiden, die nachträglich zum Gerät konfiguriert werden.
                Ungenutzte Relais werden intern nur deaktiviert, so dass die Relais-Reihenfolgen bzw.
                Positionen weiterhin erhalten bleiben. Dies ist wichtig bei Auswertung von 
                Relais-Statusmeldungen.
                required bei a/b-Geräten; kann bei IP-Geräten entfallen, weil es dort für 
                die Relais einen eigenen Beschreibungsblock gibt.
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="template_version" type="xsd:string" use="required">
         <xsd:annotation>
             <xsd:documentation >
                Versionierung des Doorstation-Template: 1.0 
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="door_station_is_set" type="xsd:boolean" use="required">
         <xsd:annotation>
             <xsd:documentation >
                Muss bei einer Türstation oder einem Durchsage-Gerät "true" sein 
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="delay_after_hook_off" type="abt:posint_with_0" use="optional">
         <xsd:annotation>
             <xsd:documentation >
                ?? TODO 
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
   <xsd:attribute name="is_telling_device" type="xsd:boolean" use="optional">
         <xsd:annotation>
             <xsd:documentation >
                Muss bei einem Durchsage-Gerät "true" sein, sonst optional false 
             </xsd:documentation>
         </xsd:annotation>
   </xsd:attribute>
</xsd:complexType>





<xsd:complexType name = "IPBox_Type">
    <xsd:annotation>
        <xsd:documentation >
           Layouts fuer IP-Geräte
        </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
        <xsd:element name="IP_Adresse" type="gui_ip_adr_type">
		   <xsd:annotation>
		       <xsd:documentation >
		          IP-Adresse des Gerätes
		       </xsd:documentation>
		   </xsd:annotation>
        </xsd:element>
        <xsd:element name="Port" type="gui_ip_port_type">
           <xsd:annotation>
               <xsd:documentation >
                  Port zur IP-Adresse des Gerätes
               </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Model" type="gui_string_type">
           <xsd:annotation>
             <xsd:documentation >
                Text: Bezeichnung des Gerätemodels 
              </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Company" type="gui_string_type">
           <xsd:annotation>
             <xsd:documentation >
                Text: Bezeichnung des Geräte-Herstellers 
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Username" type="gui_username_passwd_type">
           <xsd:annotation>
             <xsd:documentation >
                Text: Loginname 
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Passwort" type="gui_username_passwd_type">
           <xsd:annotation>
             <xsd:documentation >
                Text: Passwort zum Loginnamen
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Relays" type ="set_of_ip_relais" minOccurs="0">
           <xsd:annotation>
             <xsd:documentation >
                Individuelle Konfiguration allgmeiner Eigenschaften von Relais 
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Relaytype_CGI" type ="iprt:relais_type_cgi" minOccurs="0">
           <xsd:annotation>
             <xsd:documentation >
                Spezielle Protokoll-Konfiguration von Relais, die per CGI angesprochen werden 
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
        <xsd:element name="Relaytype_UDP" type ="iprt:relais_type_udp" minOccurs="0">
           <xsd:annotation>
             <xsd:documentation >
                Spezielle Protokoll-Konfiguration von Relais, die per UDP angesprochen werden 
             </xsd:documentation>
           </xsd:annotation>
        </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string">
       <xsd:annotation>
           <xsd:documentation >
              ? interne Zwecke: Text
           </xsd:documentation>
       </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="callnumber" type="abt:numberType">
       <xsd:annotation>
           <xsd:documentation >
              ? interne Zwecke: Rufnummer
           </xsd:documentation>
       </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="max_relais" type="abt:posint_with_0" use="required">
        <xsd:annotation>
            <xsd:documentation >
               Anzahl Relais, die fest/konstruktiv dem Gerät zu geordnet sind, um diese von Relais 
               zu unterscheiden, die nachträglich zum Gerät konfiguriert werden.
               Ungenutzte Relais werden intern nur deaktiviert, so dass die Relais-Reihenfolgen bzw.
               Positionen weiterhin erhalten bleiben. Dies ist wichtig bei Auswertung von 
               Relais-Statusmeldungem
            </xsd:documentation>
        </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="template_version" type="xsd:string" use="required">
       <xsd:annotation>
           <xsd:documentation >
              Versionierung des Doorstation-Template: 1.0 
           </xsd:documentation>
       </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="ip_box_is_set" type="xsd:boolean" use="required">
         <xsd:annotation>
             <xsd:documentation >
                Muss bei einem IP-Gerät "true" sein 
             </xsd:documentation>
         </xsd:annotation>
    </xsd:attribute>
</xsd:complexType>


<xsd:complexType name="gui_string_type">
  <xsd:simpleContent>
    <xsd:extension base="xsd:string">
        <xsd:attribute name="editable" type="xsd:boolean"/>
        <xsd:attribute name="gui_is_optional" type="xsd:boolean"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:simpleType name="TechnologyType">
       <xsd:restriction base="xsd:string">
           <xsd:enumeration value="analog"/>
           <xsd:enumeration value="SIP"/>
       </xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="gui_ip_adr_type">
   <xsd:annotation>
       <xsd:documentation >
          Eingabe einer IP-Adresse mit Vorgaben zur Darstellung
       </xsd:documentation>
   </xsd:annotation>

  <xsd:simpleContent>
    <xsd:extension base="xsd:string">
        <xsd:attribute name="editable" type="xsd:boolean"/>
        <xsd:attribute name="gui_is_optional" type="xsd:boolean"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="gui_ip_port_type">
  <xsd:simpleContent>
    <xsd:extension base="abt:portType">
        <xsd:attribute ref="editable"/>
        <xsd:attribute ref="gui_is_optional"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>


<xsd:complexType name="gui_username_passwd_type">
  <xsd:simpleContent>
    <xsd:extension base="abt:nameType">
        <xsd:attribute ref="editable"/>
        <xsd:attribute ref="gui_is_optional"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>



<xsd:complexType name="activation_sequence_type">
  <xsd:simpleContent>
    <xsd:extension base="abt:numberType">
        <xsd:attribute ref="editable"/>
        <xsd:attribute ref="gui_is_optional"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType name="totzeit_type">
  <xsd:simpleContent>
    <xsd:extension base="abt:posint_with_0">
        <xsd:attribute ref="editable"/>
        <xsd:attribute ref="gui_is_optional"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>


<xsd:complexType name="bell_pushes_type">
    <xsd:sequence>
        <xsd:element name="Bell_push" type ="bellpush_type" maxOccurs="16"/>
    </xsd:sequence>
    <xsd:attribute ref="editable"/>
    <xsd:attribute ref="gui_is_optional"/>
</xsd:complexType>


 <xsd:simpleType name="slot_pos_type">
   <xsd:restriction base="xsd:integer">
     <xsd:minInclusive value="0"/>
     <xsd:maxInclusive value="127"/>
   </xsd:restriction>
 </xsd:simpleType>

<xsd:complexType name="bellpush_type">
  <xsd:simpleContent>
    <xsd:extension base="xsd:string">
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="position" type="slot_pos_type" use="required"/>
        <xsd:attribute name="dtmf" type="abt:numberType" use="optional"/>
        <xsd:attribute name="push_interval" type="xsd:string" use="optional"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>


<xsd:complexType name="set_of_ab_relais">
    <xsd:annotation>
       <xsd:documentation >
         Maximal sind 32 Relais an einem IP-Gerät definierbar          
       </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="Relay" type ="ab_relais" maxOccurs="32"/>
    </xsd:sequence>
    <xsd:attribute ref="editable"/>
    <xsd:attribute ref="gui_is_optional"/>
</xsd:complexType>


<xsd:complexType name="ab_relais">
    <xsd:annotation>
        <xsd:documentation >
           Konfiguration eines Relais, das über einen a/b-Port der PBX angesprochen wird 
        </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="activation_sequence" type ="abt:numberType">
		    <xsd:annotation>
		        <xsd:documentation >
		           DTMF-Ziffernsequenz (0..9,*,#) bei deren Empfang das Relais anzieht 
		        </xsd:documentation>
		    </xsd:annotation>
        </xsd:element>
        <xsd:element name="deactivation_sequence" type ="abt:numberType" minOccurs="0">
            <xsd:annotation>
                <xsd:documentation >
                   Optional: DTMF-Ziffernsequenz (0..9,*,#) bei deren Empfang das Relais wieder abfällt.
                   Es gibt a/b-Relais (siehe Auerswald-Geräte), die solch ein Kommando nicht kennen, 
                   weil sie automatisch von allein nach einer bestimmten Zeit (siehe relapse_time) 
                   wieder abfallen. 
                </xsd:documentation>
            </xsd:annotation>
        </xsd:element>
        <xsd:element name="relapse_time" type ="abt:posint_with_0">
            <xsd:annotation>
                <xsd:documentation >
                   Zeit in ms, nach der ein Relais von allein wieder abfällt. Gilt nur für Relais,
                   bei denen keine Ausschaltsequenz definiert ist.                 
                </xsd:documentation>
            </xsd:annotation>
        </xsd:element>
        <xsd:element name="hold_time" type ="abt:posint_with_0">
            <xsd:annotation>
                <xsd:documentation >
                    Haltezeit in ms, nach deren Ablauf ein Relais, bei dem eine Ausschaltsequenz 
                    definiert ist, wieder von der PBX abgeschaltet werden soll.
                    Ist Haltezeit 0, so wird das Relais nicht automatisch wieder abgschaltet.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:element>
        <xsd:element name="dead_time" type ="abt:posint_with_0">
            <xsd:annotation>
                <xsd:documentation >
                    Totzeit in ms: Ggf. kann ein Relais während einer Schaltaktion, ausglöst durch 
                    den Empfang einer Schaltsequenz, keine weiteren Befehle empfangen (siehe 
                    Auerswald-Geräte). Erst nach Ablauf dieser Zeit ist das Relais wieder empfangsbereit. 
                </xsd:documentation>
            </xsd:annotation>
        </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="name" type="xsd:string">
       <xsd:annotation>
           <xsd:documentation >
               Ggf. Vorgabe eines Namen zum Relais, mit der man die Funktion des Relais erkennen 
               kann, z.B. "Türöffner", etc.
           </xsd:documentation>
       </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="is_disable" type="xsd:boolean" use="optional">
       <xsd:annotation>
           <xsd:documentation >
               ?? TODO
           </xsd:documentation>
       </xsd:annotation>
    </xsd:attribute>
</xsd:complexType>


<xsd:complexType name="set_of_ip_relais">
    <xsd:sequence>
        <xsd:element name="Relay" type ="ip_relais" maxOccurs="32"/>
    </xsd:sequence>
    <xsd:attribute name="editable" type="xsd:boolean" use="required"/>
    <xsd:attribute name="gui_is_optional" type="xsd:boolean" use="required"/>
    <xsd:attribute name="use_bit_organisation" type="xsd:boolean" use="optional"/>
</xsd:complexType>


<xsd:complexType name="ip_relais">
  <xsd:annotation>
      <xsd:documentation >
         Konfiguration eines Relais, das über das IP-Protokoll angesprochen wird 
      </xsd:documentation>
  </xsd:annotation>
  <xsd:simpleContent>
    <xsd:extension base="xsd:string">
        <xsd:annotation>
           <xsd:documentation >
               Ggf. Vorgabe eines Namen zum Relais, mit der man die Funktion des Relais erkennen 
               kann, z.B. "Türöffner", etc.
           </xsd:documentation>
        </xsd:annotation>
	    <xsd:attribute name="position" type="xsd:positiveInteger">
	        <xsd:annotation>
	           <xsd:documentation >
	                Vorgabe einer Relais-Nummer fortlaufend beginned bei 1. Die Reihenfolge sollte mit
	                der internen Nummerierung des Gerätes korrespondieren.
	           </xsd:documentation>
	        </xsd:annotation>
	    </xsd:attribute>
	    <xsd:attribute name="status" type="xsd:boolean">
	        <xsd:annotation>
	            <xsd:documentation >
	               Bestimmt, ob das Relais per Befehl ausschaltbar ist, oder aber, ob
	               es von allein wieder zurueckfaellt
	                  True:  Das Relais ist per Befehl ausschaltbar
	                  False: Das Relais faellt von allein nach einer bestimmten Zeit (hold_time) wieder ab.
	            </xsd:documentation>
	        </xsd:annotation>
	    </xsd:attribute>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

</xsd:schema> 


