<?xml version="1.0"?>

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

<!-- Schema for a JNLP 1.0 -->

 <xs:element name="jnlp" type="jnlpType"/>

 <xs:complexType name="jnlpType">
    <xs:sequence>
       <xs:element name="information" type="informationType" maxOccurs="unbounded"/>
       <xs:element name="security"    type="securityType"    minOccurs="0"/>
       <xs:element name="resources"   type="resourcesType"   minOccurs="0" maxOccurs="unbounded"/>
       <xs:choice>
         <xs:element name="application-desc" type="applicationDescType"/>
         <xs:element name="applet-desc"      type="appletDescType"/>
         <xs:element name="component-desc"   type="xs:string"/>
         <xs:element name="installer-desc"   type="xs:string"/>
       </xs:choice>
     </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:anyURI" use="optional"/>
    <xs:attribute name="href"     type="xs:string" use="optional"/>
 </xs:complexType>

 <xs:complexType name="informationType">
    <xs:sequence>
      <xs:element name="title"           type="xs:string"      minOccurs="0"/>
      <xs:element name="vendor"          type="xs:string"      minOccurs="0"/>
      <xs:element name="homepage"        type="homepageType"    minOccurs="0"/>
      <xs:element name="description"     type="descriptionType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="icon"            type="iconType"        minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="offline-allowed" type="xs:string"      minOccurs="0"/>
    </xs:sequence>

    <xs:attribute name="locale"  type="xs:string" use="optional"/>
 </xs:complexType>

 <xs:complexType name="homepageType">
    <xs:attribute name="href"    type="xs:anyURI" use="required"/>
 </xs:complexType>

 <xs:simpleType name="descriptionKindType">
   <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="one-line"/>
      <xs:enumeration value="short"/>
      <xs:enumeration value="tooltip"/>
   </xs:restriction>
 </xs:simpleType>

 <xs:complexType name="descriptionType">
   <xs:simpleContent>
      <xs:extension base="xs:string">
         <xs:attribute name="kind"    type="descriptionKindType" use="optional"/>
      </xs:extension>
   </xs:simpleContent>
 </xs:complexType>

 <xs:simpleType name="iconKindType">
   <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="default"/>
      <xs:enumeration value="selected"/>
      <xs:enumeration value="disabled"/>
      <xs:enumeration value="rollover"/>
   </xs:restriction>
 </xs:simpleType>

 <xs:complexType name="iconType">
    <xs:attribute name="href"    type="xs:anyURI" use="required"/>
    <xs:attribute name="version" type="xs:string" use="optional"/>
    <xs:attribute name="width"   type="xs:positiveInteger" use="optional"/>
    <xs:attribute name="height"  type="xs:positiveInteger" use="optional"/>
    <xs:attribute name="kind"    type="iconKindType" use="optional"/>
    <xs:attribute name="depth"   type="xs:positiveInteger" use="optional"/>
    <xs:attribute name="size"    type="xs:positiveInteger" use="optional"/>
 </xs:complexType>

 <xs:complexType name="securityType">
   <xs:sequence>
     <xs:element name="all-permissions"  type="xs:string"  minOccurs="0"/>
     <xs:element name="j2ee-application-client-permissions" type="xs:string" minOccurs="0"/>
   </xs:sequence>
 </xs:complexType>

 <xs:complexType name="resourcesType">
   <xs:sequence>
       <xs:element name="j2se"      type="j2seType"      minOccurs="0" maxOccurs="unbounded" />
       <xs:element name="jar"       type="jarType"       minOccurs="0" maxOccurs="unbounded" />
       <xs:element name="nativelib" type="nativelibType" minOccurs="0" maxOccurs="unbounded" />
       <xs:element name="extension" type="extensionType" minOccurs="0" maxOccurs="unbounded" />
       <xs:element name="property"  type="propertyType"  minOccurs="0" maxOccurs="unbounded" />
       <xs:element name="package"   type="packageType"   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="locale" type="xs:string" use="optional" />

 </xs:complexType>

 <xs:complexType name="j2seType">
    <xs:sequence>
       <xs:element name="resources"  type="resourcesType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>

    <xs:attribute name="version"           type="xs:string" use="required" />
    <xs:attribute name="href"              type="xs:anyURI" 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:complexType>

 <xs:simpleType name="booleanType">
   <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="true"/>
      <xs:enumeration value="false"/>
   </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="downloadType">
   <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="eager"/>
      <xs:enumeration value="lazy"/>
   </xs:restriction>
 </xs:simpleType>

 <xs:complexType name="jarType">

    <xs:attribute name="href"     type="xs:anyURI"   use="required" />
    <xs:attribute name="version"  type="xs:string"   use="optional" />
    <xs:attribute name="main"     type="booleanType"  use="optional" />
    <xs:attribute name="download" type="downloadType" use="optional" />
    <xs:attribute name="size"     type="xs:string"   use="optional" />
    <xs:attribute name="part"     type="xs:string"   use="optional" />

 </xs:complexType>

 <xs:complexType name="nativelibType">

    <xs:attribute name="href"     type="xs:anyURI"   use="required" />
    <xs:attribute name="version"  type="xs:string"   use="optional" />
    <xs:attribute name="download" type="downloadType" use="optional" />
    <xs:attribute name="size"     type="xs:string"   use="optional" />
    <xs:attribute name="part"     type="xs:string"   use="optional" />

 </xs:complexType>

 <xs:complexType name="extensionType">
   <xs:sequence>
      <xs:element name="ext-download" type="extDownloadType" 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:anyURI" use="required" />

 </xs:complexType>

 <xs:complexType name="extDownloadType">

   <xs:attribute name="ext-part"  type="xs:string"   use="required" />
   <xs:attribute name="download"  type="downloadType" use="optional" />
   <xs:attribute name="part"      type="xs:string"   use="optional" />

 </xs:complexType>

 <xs:complexType name="propertyType">

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

 </xs:complexType>

 <xs:complexType name="packageType">

   <xs:attribute name="name"      type="xs:string"  use="required" />
   <xs:attribute name="part"      type="xs:string"  use="required" />
   <xs:attribute name="recursive" type="booleanType" use="optional" />

 </xs:complexType>

 <xs:complexType name="applicationDescType">
   <xs:sequence>
      <xs:element name="argument" type="xs:string"  minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>

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

 </xs:complexType>

 <xs:complexType name="appletDescType">
   <xs:sequence>
      <xs:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>

   <xs:attribute name="documentbase" type="xs:anyURI" 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:positiveInteger" use="required" />
   <xs:attribute name="height"       type="xs:positiveInteger" use="required" />

 </xs:complexType>

 <xs:complexType name="paramType">

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

 </xs:complexType>

 <xs:complexType name="installerDescType">

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

 </xs:complexType>

</xs:schema>