Re: JNLP xsd schema
Piotr Kobzda wrote:
...
Interestingly, theirs DTD for 6 seems to be invalid (in both, Sun site,
and in Appendix C of JNLP specification).
Corrections needed (my guess):
Your guesses seem pretty solid to me.
<!ELEMENT update>
should be:
<!ELEMENT update EMPTY>
xss2dtd would not parse the file before I added that, and..
<!ELEMENT shortcut (desktop? menu?)>
..leads to..
<xs:sequence>
<xs:element minOccurs="0" ref="desktop? menu"/>
</xs:sequence>
..which appears completely bogus to me, and
more like an error on the part of xss2dtd.
should be:
<!ELEMENT shortcut (desktop?, menu?)>
<xs:sequence>
<xs:element minOccurs="0" ref="desktop"/>
<xs:element minOccurs="0" ref="menu"/>
</xs:sequence>
..that looks more like it
...
..some tools you can find there:
http://www.w3.org/XML/Schema#Tools
I clicked the link to ..
(about a year ago I successfully used XMLSpy for that)
..XMLSpy but while waiting for the page to load, saw
dtd2xss, looked at their page, 'liked the price', and had
it mostly donwloaded before I decided I could not be
bothered waiting any longer for the other page to arrive. ;-)
Here is the XSD that xss2dtd produces, based on Piotr's
corrections, above - with a comment in the header
.. It's only 270 odd lines..
<!--
Adapted from Sun's DTD..
jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Discriptor 6.0//EN"
"http://java.sun.com/dtd/JNLP-6.0.dtd"
Oh.. and note that should be Descriptor, not (bloody) Discriptor.
-->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" name="jnlp">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="information"/>
<xs:element minOccurs="0" ref="security"/>
<xs:element minOccurs="0" ref="update"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="resources"/>
<xs:choice>
<xs:element ref="application-desc"/>
<xs:element ref="applet-desc"/>
<xs:element ref="component-desc"/>
<xs:element ref="installer-desc"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="spec" type="xs:string"/>
<xs:attribute name="version" type="xs:string"/>
<xs:attribute name="codebase" type="xs:string"/>
<xs:attribute name="href" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="vendor"/>
<xs:element minOccurs="0" ref="homepage"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="description"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="icon"/>
<xs:element minOccurs="0" ref="offline-allowed"/>
<xs:element minOccurs="0" ref="shortcut"/>
<xs:element minOccurs="0" ref="association"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="related-content"/>
</xs:sequence>
<xs:attribute name="os" type="xs:string"/>
<xs:attribute name="arch" type="xs:string"/>
<xs:attribute name="platform" type="xs:string"/>
<xs:attribute name="locale" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="kind">
<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:complexType>
<xs:attribute name="href" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:string"/>
<xs:attribute name="width" type="xs:string"/>
<xs:attribute name="height" type="xs:string"/>
<xs:attribute name="kind" type="xs:string"/>
<xs:attribute name="depth" type="xs:string"/>
<xs:attribute name="size" type="xs:string"/>
</xs:complexType>
<xs:complexType/>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="all-permissions"/>
<xs:element minOccurs="0" ref="j2ee-application-client-permissions"/>
</xs:sequence>
</xs:complexType>
<xs:complexType/>
<xs:complexType/>
<xs:complexType>
<xs:attribute default="timeout" name="check">
<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 default="always" name="policy">
<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:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<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"/>
<xs:attribute name="arch" type="xs:string"/>
<xs:attribute name="locale" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="resources"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
<xs:attribute name="href" type="xs:string"/>
<xs:attribute name="initial-heap-size" type="xs:string"/>
<xs:attribute name="max-heap-size" type="xs:string"/>
<xs:attribute name="java-vm-args" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="resources"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
<xs:attribute name="href" type="xs:string"/>
<xs:attribute name="initial-heap-size" type="xs:string"/>
<xs:attribute name="max-heap-size" type="xs:string"/>
<xs:attribute name="java-vm-args" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:string"/>
<xs:attribute default="false" name="main">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute default="eager" name="download">
<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"/>
<xs:attribute name="part" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="href" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:string"/>
<xs:attribute default="eager" name="download">
<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"/>
<xs:attribute name="part" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="ext-download"/>
</xs:sequence>
<xs:attribute name="version" type="xs:string"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="href" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="ext-part" type="xs:string" use="required"/>
<xs:attribute default="eager" name="download">
<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"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="part" type="xs:string" use="required"/>
<xs:attribute default="false" name="recursive">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="argument"/>
</xs:sequence>
<xs:attribute name="main-class" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="param"/>
</xs:sequence>
<xs:attribute name="documentbase" type="xs:string"/>
<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:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType/>
<xs:complexType>
<xs:attribute name="main-class" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="desktop"/>
<xs:element minOccurs="0" ref="menu"/>
</xs:sequence>
<xs:attribute default="true" name="online">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType/>
<xs:complexType>
<xs:attribute name="submenu" type="xs:string"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="description"/>
<xs:element minOccurs="0" ref="icon"/>
</xs:sequence>
<xs:attribute name="extensions" type="xs:string" use="required"/>
<xs:attribute name="mime-type" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="title"/>
<xs:element minOccurs="0" ref="description"/>
<xs:element minOccurs="0" ref="icon"/>
</xs:sequence>
<xs:attribute name="href" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
I might be looking to put some form of this up on my
site in the future, but it has not even been taken for a
test drive, yet.
HTH
--
Andrew Thompson
http://www.athompson.info/andrew/
Message posted via JavaKB.com
http://www.javakb.com/Uwe/Forums.aspx/java-general/200707/1