<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.OpenI18N.org/IIIMF/NS/1.0" xmlns:iiimf="http://www.OpenI18N.org/IIIMF/NS/1.0">
  <xsd:element name="IIIMF">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="iiimf:Server"/>
        <xsd:element ref="iiimf:LanguageEngineGroup"/>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Server">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" ref="iiimf:ListenGroup"/>
        <xsd:element minOccurs="0" ref="iiimf:ACLGroup"/>
        <xsd:element minOccurs="0" ref="iiimf:Auth"/>
        <xsd:element minOccurs="0" ref="iiimf:FunctionGroup"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ListenGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="iiimf:Listen"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Hostname" type="xsd:string" default="localhost"/>
  <xsd:element name="Listen">
    <xsd:complexType>
      <xsd:choice minOccurs="1">
        <xsd:sequence>
          <xsd:element minOccurs="1" ref="Hostname"/>
          <xsd:element minOccurs="1" name="Port" default="9010"/>
        </xsd:sequence>
        <xsd:element name="File" default="/var/run/iiim"/>
      </xsd:choice>
    </xsd:complexType>
    <xsd:complexType mixed="true">
      <xsd:attribute name="type" use="required">
        <xsd:simpleType>
          <xsd:restriction base="xsd:NMTOKEN">
            <xsd:enumeration value="tcp"/>
            <xsd:enumeration value="unix"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ACLGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="iiimf:ACL"/>
      </xsd:sequence>
      <xsd:attribute name="default" use="required" type="iiimf:PermissionType"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ACL">
    <xsd:element minOccurs="1" ref="Hostname"/>
    <xsd:complexType mixed="true">
      <xsd:attribute name="type" use="required" type="iiimf:PermissionType"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="AuthType">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="permit"/>
      <xsd:enumeration value="password"/>
      <xsd:enumeration value="deny"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="Auth">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" ref="iiimf:System"/>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="iiimf:User"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="System">
    <xsd:complexType>
      <xsd:attribute name="type" use="required" type="iiimf:AuthType"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="User">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" ref="iiimf:Password"/>
      </xsd:sequence>
      <xsd:attribute name="type" use="required" type="iiimf:AuthType"/>
      <xsd:attribute name="name" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Password" type="xsd:string"/>
  <xsd:element name="FunctionGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="iiimf:Function"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Function">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="iiimf:Option"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="LanguageEngineNameDef">
    <xsd:restriction base="xsd:ID"/>
  </xsd:simpleType>
  <xsd:element name="LanguageEngineGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="iiimf:LanguageEngine"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="LanguageEngine">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="iiimf:Implementation"/>
        <xsd:element ref="iiimf:Option"/>
      </xsd:sequence>
      <xsd:attribute name="default" type="iiimf:LanguageEngineNameDef"/>
      <xsd:attribute name="lang" use="required" type="xsd:language"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Implementation">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" maxOccurs="unbounded" ref="iiimf:Module"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Module">
    <xsd:complexType>
      <xsd:attribute name="path" use="required"/>
      <xsd:attribute name="name" use="required" type="iiimf:LanguageEngineNameDef"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Option" type="iiimf:HotKey"/>
  <xsd:complexType name="HotKey">
    <xsd:sequence>
      <xsd:element ref="iiimf:Hotkey"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="Hotkey">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="iiimf:Key"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Key">
    <xsd:complexType>
      <xsd:attribute name="modifier" type="iiimf:KeyModifier"/>
      <xsd:attribute name="name" use="required"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="KeyModifier">
    <xsd:restriction base="xsd:NMTOKEN">
      <xsd:enumeration value="Shift"/>
      <xsd:enumeration value="Control"/>
      <xsd:enumeration value="Alt"/>
      <xsd:enumeration value="Meta"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>
