<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  Config file schema 1.0 (draft)
  
  Yahoo! Mobile Widgets
  Copyright 2007-2008 Yahoo! Inc. All rights reserved.
  
  This file contains the schema for the config.xml file that must be packaged
  with a mobile widget. It contains various metadata and establishes requirements
  for running in a particular environment.
  
  Changes:

  04-Jan-2008 - edv - Removed base, type. Added choice between widget, snippet. Each choice
                      has its own way of expressing the URL (base or href). Finalized namespace.
  08-Feb-2008 - edv - Added icon element. Starting adding some documentation.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
  targetNamespace="http://mobile.yahoo.com/widgets/schema/1.0/config/"
  xmlns="http://mobile.yahoo.com/widgets/schema/1.0/config/">

  <xs:element name="config">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" name="title" type="xs:string">
          <xs:annotation>
            <xs:documentation>
              The title of the widget or snippet. This is displayed in the Widget
              Gallery as well as in the title bars of Widgets. Required.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        
        <xs:element minOccurs="1" maxOccurs="1" name="version" type="xs:string">
          <xs:annotation>
            <xs:documentation>
              Required version of your widget. It should be in the form 1[.x[.x]], e.g
              1.0, 1.0.1, 2.1.3.
            </xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element minOccurs="1" maxOccurs="1" name="identifier">
          <xs:annotation>
            <xs:documentation> The widget identifier can be from 4 to 20 characters in length. It is
              comprised of alphanumeric characters, period (.) or a hypen(-). It must start with an
              alphanumeric character.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[a-z,A-Z,0-9][a-z,A-Z,0-9,.,-]{3,19}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>

        <xs:element minOccurs="0" name="description" type="xs:string">
          <xs:annotation>
            <xs:documentation> This is used as a short description for your Widget. It is optional.
              It is not the same description as that in the gallery.xml file, which is used as your
              verbose description of your widget or snippet. </xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element name="icon" type="xs:string">
          <xs:annotation>
            <xs:documentation> This should contain the name of the image you wish to use for your
              icon. You do not need to put the suffix or extension. For example, "homer" is
              sufficient. Your images folder will look for an appropriate image file to use based on
              rules documented in the Blueprint Developer's Guide. </xs:documentation>
          </xs:annotation>
        </xs:element>

        <xs:element minOccurs="0" name="author">
          <xs:complexType mixed="true">
            <xs:attribute name="href" type="xs:anyURI"/>
            <xs:attribute name="organization"/>
          </xs:complexType>
        </xs:element>

        <xs:element minOccurs="0" name="license">
          <xs:complexType mixed="true">
            <xs:attribute name="href" type="xs:anyURI"/>
          </xs:complexType>
        </xs:element>

        <xs:element minOccurs="0" name="requirements">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="1" name="engine-version" type="xs:string"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="device" type="xs:NMTOKEN"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="platform">
                <xs:simpleType>
                  <xs:restriction base="xs:NMTOKEN">
                    <xs:enumeration value="go_client"/>
                    <xs:enumeration value="go_html"/>
                    <xs:enumeration value="xhtml"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element minOccurs="0" maxOccurs="unbounded" name="feature">
                <xs:simpleType>
                  <xs:restriction base="xs:NMTOKEN">
                    <xs:enumeration value="gps"/>
                    <xs:enumeration value="camera"/>
                    <xs:enumeration value="video"/>
                    <xs:enumeration value="filesystem"/>
                    <xs:enumeration value="3g"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

              <xs:element minOccurs="0" maxOccurs="1" name="minScreen">
                <xs:simpleType>
                  <xs:restriction base="xs:NMTOKEN">
                    <xs:enumeration value="s1"/>
                    <xs:enumeration value="s2"/>
                    <xs:enumeration value="s3"/>
                    <xs:enumeration value="s4"/>
                    <xs:enumeration value="s5"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <xs:choice>
          <xs:element ref="snippet"/>
          <xs:element ref="widget"/>
        </xs:choice>

      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="widget">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="preview">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="icon" type="xs:anyURI"/>
              <xs:element name="label" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <xs:element name="shortcuts">
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
              <xs:element name="item">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="label" type="xs:string"/>
                    <xs:element name="href" type="xs:anyURI"/>
                  </xs:sequence>
                  <xs:attribute name="default" type="xs:boolean"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="base" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="snippet">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

</xs:schema>
