
<!--
   Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
   Use is subject to license terms.
  -->

<!--

   This is the DTD defining the JavaServer Pages 1.2 Tag Library
   descriptor (.tld) (XML) file format/syntax.

   A Tag Library is a JAR file containing a valid instance of a Tag Library
   Descriptor (taglib.tld) file in the META-INF subdirectory, along with the
   appropriate implementing classes, and other resources required to
   implement the tags defined therein.

   Use is subject to license terms.
  -->
  
<!NOTATION WEB-JSPTAGLIB.1_2 PUBLIC
          "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN">

<!--
This is the XML DTD for the JSP 1.2 Tag Library Descriptor.
All JSP 1.2 tag library descriptors must include a DOCTYPE
of the following form:

  <!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
	"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

-->

<!--
The taglib tag is the document root, it defines:

tlib-version	the version of the tag library implementation

jsp-version	the version of JSP the tag library depends upon

short-name	a simple default short name that could be used by
		a JSP authoring tool to create names with a mnemonic
		value; for example, the it may be used as the prefered
		prefix value in taglib directives

uri		a uri uniquely identifying this taglib

display-name    the display-name element contains a short name that
                is intended to be displayed by tools
small-icon      optional small-icon that can be used by tools

large-icon      optional large-icon that can be used by tools

description	a simple string describing the "use" of this taglib,
		should be user discernable

validator       optional TagLibraryValidator information

listener        optional event listener specification


-->

<!ELEMENT taglib (tlib-version, jsp-version, short-name, uri?,
                  display-name?, small-icon?, large-icon?, description?,
                  validator?, listener*, tag+) >

<!ATTLIST taglib id ID #IMPLIED
	  xmlns CDATA #FIXED
		"http://java.sun.com/JSP/TagLibraryDescriptor"
>

<!--
Describes this version (number) of the taglibrary (dewey decimal)

#PCDATA ::= [0-9]*{ "."[0-9] }0..3
-->

<!ELEMENT tlib-version (#PCDATA) >

<!--
Describes the JSP version (number) this taglibrary requires in
order to function (dewey decimal)

The default is 1.2

#PCDATA ::= [0-9]*{ "."[0-9] }0..3
-->

<!ELEMENT jsp-version  (#PCDATA) >

<!--
Defines a short (default) short-name to be used for tags and
variable names used/created by this tag library.  Do not use
white space, and do not start with digits or underscore.

#PCDATA ::= NMTOKEN
-->

<!ELEMENT short-name      (#PCDATA) >

<!--
Defines a public URI that uniquely identifies this version of
the taglibrary.  Leave it empty if it does not apply.
-->

<!ELEMENT uri	 (#PCDATA) >

<!--
Defines an arbitrary text string descirbing the tag library
-->

<!ELEMENT description	(#PCDATA) >

<!--

Defines an optional validator that can be used to
validate the conformance of a JSP page to using this tag library.
-->

<!ELEMENT validator (validator-class, init-param*, description?) >


<!--

Defines the TagLibraryValidator class that can be used to
validate the conformance of a JSP page to using this tag library.
-->

<!ELEMENT validator-class (#PCDATA) >


<!--

The init-param element contains a name/value pair as an
initialization param
-->

<!ELEMENT init-param (param-name, param-value, description?)>

<!--

The param-name element contains the name of a parameter.
-->

<!ELEMENT param-name (#PCDATA)>

<!--

The param-value element contains the value of a parameter.
-->

<!ELEMENT param-value (#PCDATA)>


<!--

Defines an optional event listener object to be instantiated and
registered automatically.
-->

<!ELEMENT listener (listener-class) >

<!--

The listener-class element declares a class in the application that
must be registered as a web application listener bean.  See the
Servlet 2.3 specification for details.
-->

<!ELEMENT listener-class (#PCDATA) >


<!--
The tag defines a unique tag in this tag library.  It has one
attribute, id.

The tag element may have several subelements defining:

name              The unique action name

tag-class         The tag handler class implementing
                  javax.servlet.jsp.tagext.Tag

tei-class         An optional subclass of
                  javax.servlet.jsp.tagext.TagExtraInfo

body-content      The body content type

display-name      A short name that is intended to be displayed
                  by tools

small-icon        Optional small-icon that can be used by tools

large-icon        Optional large-icon that can be used by tools

description       Optional tag-specific information

variable          Optional scripting variable information

attribute         All attributes of this action

example           Optional informal description of an example of a
                  use of this tag

-->

<!ELEMENT tag (name, tag-class, tei-class?, body-content?, display-name?,
               small-icon?, large-icon?, description?, variable*, attribute*,
               example?) >

<!--
Defines the subclass of javax.serlvet.jsp.tagext.Tag that implements
the request time semantics for this tag. (required)

#PCDATA ::= fully qualified Java class name
-->

<!ELEMENT tag-class (#PCDATA) >

<!--
Defines the subclass of javax.servlet.jsp.tagext.TagExtraInfo for
this tag. (optional)

If this is not given, the class is not consulted at translation time.

#PCDATA ::= fully qualified Java class name
-->

<!ELEMENT tei-class (#PCDATA) >

<!--
Provides a hint as to the content of the body of this tag. Primarily
intended for use by page composition tools.

There are currently three values specified:

tagdependent	The body of the tag is interpreted by the tag
		implementation itself, and is most likely in a
		different "langage", e.g embedded SQL statements.

JSP		The body of the tag contains nested JSP syntax

empty		The body must be empty

The default (if not defined) is JSP

#PCDATA ::=  tagdependent | JSP | empty

-->

<!ELEMENT body-content (#PCDATA) >

<!--

The display-name element contains a short name that is intended
to be displayed by tools.
-->

<!ELEMENT display-name (#PCDATA) >


<!--

The large-icon element contains the name of a file containing a large
(32 x 32) icon image.  The file name is a relative path within the
tag library.  The image must be either in the JPEG or GIF format, and
the file name must end with the suffix ".jpg" or ".gif" respectively.
The icon can be used by tools.
-->

<!ELEMENT large-icon (#PCDATA) >

<!--

The small-icon element contains the name of a file containing a large
(32 x 32) icon image.  The file name is a relative path within the
tag library.  The image must be either in the JPEG or GIF format, and
the file name must end with the suffix ".jpg" or ".gif" respectively.
The icon can be used by tools.
-->

<!ELEMENT small-icon (#PCDATA) >

<!--

The example element contains an informal description of an example
of the use of a tag.
-->

<!ELEMENT example (#PCDATA) >

<!--

The variable tag provides information on the scripting variables
defined by this tag.  It is a (translation time) error for a tag
that has one or more variable subelements to have a TagExtraInfo
class that returns a non-null object.

The subelements of variable are of the form:

name-given               The variable name as a constant

name-from-attribute      The name of an attribute whose (translation
                         time) value will give the name of the
                         variable.  One of name-given or
                         name-from-attribute is required.

variable-class           Name of the class of the variable.
                         java.lang.String is default.

declare                  Whether the variable is declared or not.
                         True is the default.

scope                    The scope of the scripting varaible
                         defined.  NESTED is default.

description              Optional description of this variable

-->

<!ELEMENT variable ( (name-given | name-from-attribute), variable-class?,
                    declare?, scope?, description?) >

<!--

The name for the scripting variable.  One of name-given or
name-from-attribute is required.
-->

<!ELEMENT name-given (#PCDATA) >

<!--

The name of an attribute whose (translation-time) value will give
the name of the variable.  One of name-given or name-from-attribute
is required.
-->

<!ELEMENT name-from-attribute (#PCDATA) >

<!--

The optional name of the class for the scripting variable.  The
default is java.lang.String.
-->

<!ELEMENT variable-class (#PCDATA) >

<!--

Whether the scripting variable is to be defined or not.  See
TagExtraInfo for details.  This element is optional and "true"
is the default.
-->

<!ELEMENT declare (#PCDATA) >

<!--

The scope of the scripting variable.  See TagExtraInfo for details.
The element is optional and "NESTED" is the default.  Other legal
values are "AT_BEGIN" and "AT_END".
-->

<!ELEMENT scope (#PCDATA) >

<!--

The attribute tag defines an attribute for the nesting tag

An attribute definition is composed of:
	
- the attributes name (required)
- if the attribute is required or optional (optional)
- if the attributes value may be dynamically calculated at runtime
  by a scriptlet expression (optional)
- the type of the attributes value (optional)
- an informal description of the meaning of the attribute (optional)

-->


<!--
The attribute tag defines an attribute for the nesting tag

An attribute definition is composed of:

- the attributes name (required)

- if the attribute is required or optional (optional)

- if the attributes value may be dynamically calculated at runtime
  by a scriptlet expression (optional)

- the type of the attributes value (optional)

- an informal description of the meaning of the attribute (optional)
-->

<!ELEMENT attribute (name, required? , rtexprvalue?, type?, description?) >

<!--
Defines the canonical name of a tag or attribute being defined

#PCDATA ::= NMTOKEN
-->

<!ELEMENT name	(#PCDATA) >

<!--
Defines if the nesting attribute is required or optional.

#PCDATA ::= true | false | yes | no

If not present then the default is "false", i.e the attribute
is optional.
-->

<!ELEMENT required    (#PCDATA) >

<!--
Defines if the nesting attribute can have scriptlet expressions as
a value, i.e the value of the attribute may be dynamically calculated
at request time, as opposed to a static value determined at translation
time.

#PCDATA ::= true | false | yes | no

If not present then the default is "false", i.e the attribute
has a static value
-->

<!ELEMENT rtexprvalue (#PCDATA) >


<!--

Defines the Java type of the attributes value.  For static values
(those determined at translation time) the type is always
java.lang.String.
-->

<!ELEMENT type (#PCDATA) >


<!-- ID attributes -->

<!ATTLIST tlib-version id ID #IMPLIED>
<!ATTLIST jsp-version id ID #IMPLIED>
<!ATTLIST short-name id ID #IMPLIED>
<!ATTLIST uri id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST example id ID #IMPLIED>
<!ATTLIST tag id ID #IMPLIED>
<!ATTLIST tag-class id ID #IMPLIED>
<!ATTLIST tei-class id ID #IMPLIED>
<!ATTLIST body-content id ID #IMPLIED>
<!ATTLIST attribute id ID #IMPLIED>
<!ATTLIST name id ID #IMPLIED>
<!ATTLIST required id ID #IMPLIED>
<!ATTLIST rtexprvalue id ID #IMPLIED>


<!ATTLIST param-name id ID #IMPLIED>
<!ATTLIST param-value id ID #IMPLIED>
<!ATTLIST listener id ID #IMPLIED>
<!ATTLIST listener-class id ID #IMPLIED>
