<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- Schema for a JNLP 1.5. -->
  <!-- mechanically generated from DTD.  Needs tweaking, reorg and comments to make it more comprehensible -->

  <xs:element name="jnlp">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="information" maxOccurs="unbounded"/>
        <xs:element ref="security" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="update" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="resources" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:element ref="application-desc"/>
          <xs:element ref="applet-desc"/>
          <xs:element ref="component-desc"/>
        </xs:choice>
        <xs:element ref="installer-desc" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="spec" type="xs:string" use="optional"/>
      <xs:attribute name="version" type="xs:string" use="optional"/>
      <xs:attribute name="codebase" type="xs:string" use="optional"/>
      <xs:attribute name="href" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="information">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="title"/>
        <xs:element ref="vendor"/>
        <xs:element ref="homepage" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="description" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="icon" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="offline-allowed" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="shortcut" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="association" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="related-content" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="os" type="xs:string" use="optional"/>
      <xs:attribute name="arch" type="xs:string" use="optional"/>
      <xs:attribute name="platform" type="xs:string" use="optional"/>
      <xs:attribute name="locale" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="title" type="xs:string">
  </xs:element>

  <xs:element name="vendor" type="xs:string">
  </xs:element>

  <xs:element name="homepage">
    <xs:complexType>
      <xs:attribute name="href" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="description">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="kind" use="optional">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="one-line"/>
                <xs:enumeration value="short"/>
                <xs:enumeration value="tooltip"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="icon">
    <xs:complexType>
      <xs:attribute name="href" type="xs:string" use="required"/>
      <xs:attribute name="version" type="xs:string" use="optional"/>
      <xs:attribute name="width" type="xs:string" use="optional"/>
      <xs:attribute name="height" type="xs:string" use="optional"/>
      <xs:attribute name="kind" type="xs:string" use="optional"/>
      <xs:attribute name="depth" type="xs:string" use="optional"/>
      <xs:attribute name="size" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="offline-allowed">
    <xs:complexType/>
  </xs:element>

  <xs:element name="security">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="all-permissions" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="j2ee-application-client-permissions" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="all-permissions">
    <xs:complexType/>
  </xs:element>

  <xs:element name="j2ee-application-client-permissions">
    <xs:complexType/>
  </xs:element>

  <xs:element name="update">
    <xs:complexType>
      <xs:attribute name="check" default="timeout">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="always"/>
            <xs:enumeration value="timeout"/>
            <xs:enumeration value="background"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="policy" default="always">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="always"/>
            <xs:enumeration value="prompt-update"/>
            <xs:enumeration value="prompt-run"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="resources">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="java"/>
        <xs:element ref="j2se"/>
        <xs:element ref="jar"/>
        <xs:element ref="nativelib"/>
        <xs:element ref="extension"/>
        <xs:element ref="property"/>
        <xs:element ref="package"/>
      </xs:choice>
      <xs:attribute name="os" type="xs:string" use="optional"/>
      <xs:attribute name="arch" type="xs:string" use="optional"/>
      <xs:attribute name="locale" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="java">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="resources" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="version" type="xs:string" use="required"/>
      <xs:attribute name="href" type="xs:string" use="optional"/>
      <xs:attribute name="initial-heap-size" type="xs:string" use="optional"/>
      <xs:attribute name="max-heap-size" type="xs:string" use="optional"/>
      <xs:attribute name="java-vm-args" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="j2se">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="resources" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="version" type="xs:string" use="required"/>
      <xs:attribute name="href" type="xs:string" use="optional"/>
      <xs:attribute name="initial-heap-size" type="xs:string" use="optional"/>
      <xs:attribute name="max-heap-size" type="xs:string" use="optional"/>
      <xs:attribute name="java-vm-args" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="jar">
    <xs:complexType>
      <xs:attribute name="href" type="xs:string" use="required"/>
      <xs:attribute name="version" type="xs:string" use="optional"/>
      <xs:attribute name="main" default="false">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="true"/>
            <xs:enumeration value="false"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="download" default="eager">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="eager"/>
            <xs:enumeration value="lazy"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="size" type="xs:string" use="optional"/>
      <xs:attribute name="part" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="nativelib">
    <xs:complexType>
      <xs:attribute name="href" type="xs:string" use="required"/>
      <xs:attribute name="version" type="xs:string" use="optional"/>
      <xs:attribute name="download" default="eager">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="eager"/>
            <xs:enumeration value="lazy"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="size" type="xs:string" use="optional"/>
      <xs:attribute name="part" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="extension">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ext-download" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="version" type="xs:string" use="optional"/>
      <xs:attribute name="name" type="xs:string" use="optional"/>
      <xs:attribute name="href" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="ext-download">
    <xs:complexType>
      <xs:attribute name="ext-part" type="xs:string" use="required"/>
      <xs:attribute name="download" default="eager">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="lazy"/>
            <xs:enumeration value="eager"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="part" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="property">
    <xs:complexType>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="package">
    <xs:complexType>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="part" type="xs:string" use="required"/>
      <xs:attribute name="recursive" default="false">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="true"/>
            <xs:enumeration value="false"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="application-desc">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="argument" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="main-class" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="argument" type="xs:string">
  </xs:element>

  <xs:element name="applet-desc">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="param" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="documentbase" type="xs:string" use="optional"/>
      <xs:attribute name="main-class" type="xs:string" use="required"/>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="width" type="xs:string" use="required"/>
      <xs:attribute name="height" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="param">
    <xs:complexType>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="component-desc">
    <xs:complexType/>
  </xs:element>

  <xs:element name="installer-desc">
    <xs:complexType>
      <xs:attribute name="main-class" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="shortcut">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="desktop" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="menu" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="online" default="true">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="true"/>
            <xs:enumeration value="false"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="desktop">
    <xs:complexType/>
  </xs:element>

  <xs:element name="menu">
    <xs:complexType>
      <xs:attribute name="submenu" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="association">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="description" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="icon" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="extensions" type="xs:string" use="required"/>
      <xs:attribute name="mime-type" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="related-content">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="title" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="description" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="icon" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="href" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>