<!--
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.
-->


<!--
    Declaratively describes library content definition.

    PUBLIC "-//NetBeans//DTD Library Declaration 1.0//EN"
    SYSTEM "https://netbeans.org/dtds/library-declaration-1_0.dtd"

    Example:
    <library version="1.0">
        <type>j2se</type>
        <name>NetBeans Lookup library</name>
        <description>Library providing lookup functionality.</description>
        <volume>
            <type>classpath</type>
            <resource>nbinst:/modules/autoload/lookup.jar</resource>
        </volume>
        <volume>
            <type>javadoc</type>
            <resource>file:/home/me/Projects/lookup/doc/standard-doclet/</resource>
        </volume>
    </library>
-->

<!---
  Root element of library definition descriptor.
-->
<!ELEMENT library (name, type, description?, localizing-bundle?, volume*) >

<!-- The version attribute specifies the version of the library -->
<!ATTLIST library version CDATA #FIXED "1.0" >

<!--- Library unique identifier - a string.
 In the case when the localizing-bundle element presents the name value is used 
 as a key into bundle to locate the display name. Otherwise the name value is 
 used as a display name-->
<!ELEMENT name (#PCDATA) >

<!--Short description of given library - a string.
 In the case when the localizing-bundle element presents the description value
 is used as a key into bundle to locate the localized description. Otherwise
 the description value is used.-->
<!ELEMENT description (#PCDATA) >

<!-- The resource name of base bundle without an extension - a string.
 The bundle used to lookup the localized strings.
 The bundle is looked up by NbBundle.getBundle (String) method.
 Example of localizing bundle: org.netbeans.modules.junit.resources.Bundle -->
<!ELEMENT localizing-bundle (#PCDATA)>

<!--- Volume is typed list of resources -->
<!ELEMENT volume (type, resource*) >

<!--- Volume type of a library volume - a string 
 For example the J2SE library supports the following types of volume:
 classpath, javadoc and src -->
<!ELEMENT type (#PCDATA) >

<!--- Volume resource coded as absolute URI.
 Example:
 file:/usr/lib/java/xerces.jar is resolved to /usr/lib/java/xerces.jar
 nbinst:/modules/ext/junit.jar is resolved to /IDE-INSTALLATION/ide4/modules/ext/junit.jar
 -->
<!ELEMENT resource (#PCDATA) >
