<!--
The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.

You can obtain a copy of the License at https://netbeans.org/cddl.html
or https://netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at https://netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

The Original Software is NetBeans. The Initial Developer of the Original
Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
Microsystems, Inc. All Rights Reserved.
-->

<!--
-//NetBeans//DTD Session settings 1.0//EN
Represents session settings
either a default instance or a serialized bean.
-->

<!ELEMENT settings      (module?, instanceof*, (instance | serialdata)) >
<!ATTLIST settings
          version       (1.0) "1.0"
>

<!ELEMENT module        EMPTY >
<!ATTLIST module
          name          CDATA   #IMPLIED
          spec          CDATA   #IMPLIED
          impl          CDATA   #IMPLIED
>

<!ELEMENT instanceof    EMPTY >
<!ATTLIST instanceof
          class         CDATA   #REQUIRED
>

<!ELEMENT instance      EMPTY >
<!ATTLIST instance
          class         CDATA   #REQUIRED
          method        CDATA   #IMPLIED
>

<!ELEMENT serialdata    (#PCDATA) >
<!ATTLIST serialdata
          class         CDATA   #REQUIRED
>
