You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by be...@apache.org on 2026/10/24 10:06:54 UTC
(tapestry-5-site) branch main updated: Static files frm SVN (dtd, schema, etc.)
This is an automated email from the ASF dual-hosted git repository.
benweidig pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tapestry-5-site.git
The following commit(s) were added to refs/heads/main by this push:
new 6003125 Static files frm SVN (dtd, schema, etc.)
6003125 is described below
commit 600312500651b4e82331df14e30d433d05ed9ded
Author: Ben Weidig <be...@netzgut.net>
AuthorDate: Sat Oct 24 12:06:44 2026 +0200
Static files frm SVN (dtd, schema, etc.)
---
static/archetype-catalog.xml | 74 ++++++
static/doap.rdf | 59 +++++
static/dtd/Script_1_0.dtd | 63 +++++
static/dtd/Script_1_1.dtd | 136 ++++++++++
static/dtd/Script_1_2.dtd | 167 ++++++++++++
static/dtd/Script_3_0.dtd | 196 ++++++++++++++
static/dtd/Script_4_0.dtd | 196 ++++++++++++++
static/dtd/Tapestry_1_2.dtd | 430 ++++++++++++++++++++++++++++++
static/dtd/Tapestry_1_3.dtd | 548 +++++++++++++++++++++++++++++++++++++++
static/dtd/Tapestry_3_0.dtd | 546 ++++++++++++++++++++++++++++++++++++++
static/dtd/Tapestry_4_0.dtd | 472 +++++++++++++++++++++++++++++++++
static/dtd/Tapestry_4_1.dtd | 475 +++++++++++++++++++++++++++++++++
static/schema/tapestry_5_0_0.xsd | 15 ++
static/schema/tapestry_5_1_0.xsd | 117 +++++++++
static/schema/tapestry_5_3.xsd | 99 +++++++
static/schema/tapestry_5_4.xsd | 100 +++++++
16 files changed, 3693 insertions(+)
diff --git a/static/archetype-catalog.xml b/static/archetype-catalog.xml
new file mode 100644
index 0000000..6fb71a7
--- /dev/null
+++ b/static/archetype-catalog.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<archetype-catalog>
+ <archetypes>
+
+ <!-- Manually editted 02 Feb 2025 -->
+
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.9.1</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.8.7</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.7.3</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.6.4</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.5.0</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.4.5</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.3.7</version>
+ <description>Tapestry 5 Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.2.6</version>
+ <description>Tapestry Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.1.0.5</version>
+ <description>Tapestry Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>quickstart</artifactId>
+ <version>5.0.19</version>
+ <description>Tapestry Quickstart Project</description>
+ </archetype>
+ <archetype>
+ <groupId>org.apache.tapestry</groupId>
+ <artifactId>tapestry-archetype</artifactId>
+ <version>4.1.6</version>
+ <description>Tapestry 4.1.6 Archetype</description>
+ </archetype>
+ </archetypes>
+</archetype-catalog>
diff --git a/static/doap.rdf b/static/doap.rdf
new file mode 100644
index 0000000..63dce21
--- /dev/null
+++ b/static/doap.rdf
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
+<rdf:RDF xml:lang="en"
+ xmlns="http://usefulinc.com/ns/doap#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:asfext="http://projects.apache.org/ns/asfext#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/">
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+ <Project rdf:about="http://tapestry.apache.org">
+ <created>2013-02-11</created>
+ <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
+ <name>Apache Tapestry</name>
+ <homepage rdf:resource="http://tapestry.apache.org" />
+ <asfext:pmc rdf:resource="http://tapestry.apache.org" />
+ <shortdesc>Component oriented framework for creating dynamic, robust, highly scalable web applications in Java.</shortdesc>
+ <description>Tapestry is a component-oriented Java web application framework.
+ Its design emphasizes ease of use and developer productivity. Component
+ classes are simple POJOs, with Tapestry using byte code manipulation to
+ enhance classes at runtime. Configuration is via annotations and naming
+ conventions rather than XML. Web page and component templates use regular
+ (X)HTML that can be edited by any web designer. Live Class Reloading enables
+ you to edit Java code and immediately see results by reloading the page in
+ the web browser, resulting in a very fast "code it - see it - fix it" loop.
+</description>
+ <bug-database rdf:resource="https://issues.apache.org/jira/browse/TAP5" />
+ <mailing-list rdf:resource="http://tapestry.apache.org/community.html#Community-GettingInvolved" />
+ <download-page rdf:resource="http://tapestry.apache.org/download.html" />
+ <programming-language>Java</programming-language>
+ <category rdf:resource="http://projects.apache.org/category/web-framework" />
+ <release>
+ <Version>
+ <name>Apache Tapestry</name>
+ <created>2025-04-07</created>
+ <revision>5.9.1</revision>
+ </Version>
+ </release>
+ <repository>
+ <SVNRepository>
+ <location rdf:resource="https://gitbox.apache.org/repos/asf/tapestry-5.git"/>
+ <browse rdf:resource="https://gitbox.apache.org/repos/asf?p=tapestry-5.git"/>
+ </SVNRepository>
+ </repository>
+ </Project>
+</rdf:RDF>
diff --git a/static/dtd/Script_1_0.dtd b/static/dtd/Script_1_0.dtd
new file mode 100644
index 0000000..a98b7ff
--- /dev/null
+++ b/static/dtd/Script_1_0.dtd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--DTD for the files used with the ScriptGenerator class and Script component. This is recognized with the public identifier:
+
+ -//Primix Solutions//Tapestry Script 1.0//EN
+
+-->
+
+<!--
+
+Element: script
+
+Root element.
+
+-->
+
+<!ELEMENT script (let*, body?, initialization?)>
+
+<!--
+
+Element: let
+Contained by: script
+
+Used to create a new symbol.
+
+-->
+
+<!ELEMENT let (#PCDATA | insert)*>
+<!ATTLIST let
+ key CDATA #REQUIRED
+>
+
+<!--
+
+Element: body
+Contained by: script
+
+Allows a mix of text and insert elements. This text is added to
+the large scripting block just before the <body> tag.
+-->
+
+<!ELEMENT body (#PCDATA | insert)*>
+
+<!--
+Element: initialization
+Contained by: script
+
+Text in this block is added to the event handler for the <body>
+tag's onLoad event.
+-->
+
+<!ELEMENT initialization (#PCDATA | insert)*>
+
+<!--
+Element: insert
+Contained by: body, initialization
+
+Allows an arbitrary symbol to be inserted.
+-->
+
+<!ELEMENT insert (#PCDATA)>
+<!ATTLIST insert
+ key CDATA #REQUIRED
+>
diff --git a/static/dtd/Script_1_1.dtd b/static/dtd/Script_1_1.dtd
new file mode 100644
index 0000000..70eea4a
--- /dev/null
+++ b/static/dtd/Script_1_1.dtd
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+DTD for the files used with the ScriptGenerator class and Script component.
+This is recognized with the public identifier:
+
+ -//Howard Ship//Tapestry Script 1.1//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.sf.net/dtd/Tapestry_1_1.dtd
+
+The root element is always script.
+
+-->
+<!-- =======================================================
+
+Entity: full-content
+
+Identifies the contents of most of the other elements.
+
+-->
+<!ENTITY % full-content "(#PCDATA | foreach | insert | if | if-not)*">
+<!-- =======================================================
+
+Element: body
+Contained by: script
+
+Allows a mix of text and insert elements. This text is added to
+the large scripting block just before the <body> tag.
+-->
+<!ELEMENT body %full-content;>
+<!-- =======================================================
+
+Element: foreach
+Appears in: %full-content;
+
+Iterates over a list of items; this is modeled after the
+Foreach component. No iteration occurs if the value
+from the property path is null.
+
+Attributes:
+ key: Defines the symbol into which each succesive value is stored.
+ property-path: The source of values.
+-->
+<!ELEMENT foreach %full-content;>
+<!ATTLIST foreach
+ key CDATA #REQUIRED
+ property-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: include-script
+Contained by: script
+
+Inserts a reference to an external, static, JavaScript file.
+
+Attributes:
+ resource-path: The path to the script within the classpath.
+-->
+<!ELEMENT include-script EMPTY>
+<!ATTLIST include-script
+ resource-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: if
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the property-path evaulates to true.
+
+-->
+<!ELEMENT if %full-content;>
+<!ATTLIST if
+ property-path CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: if-not
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the property-path evaulates to false.
+
+-->
+<!ELEMENT if-not %full-content;>
+<!ATTLIST if-not
+ property-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: initialization
+Contained by: script
+
+Text in this block is added to the event handler for the <body>
+tag's onLoad event.
+-->
+<!ELEMENT initialization %full-content;>
+<!-- =======================================================
+Element: insert
+Contained by: body, initialization
+
+Allows an arbitrary symbol to be inserted.
+
+Attributes:
+ property-path: The path to the value to insert.
+-->
+<!ELEMENT insert EMPTY>
+<!ATTLIST insert
+ property-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: let
+Contained by: script
+
+Used to create a new symbol.
+
+-->
+<!ELEMENT let %full-content;>
+<!ATTLIST let
+ key CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: script
+
+Root element.
+
+Allows zero or more let elements (to establish new symbols),
+followed by a body and/or initialization element.
+
+-->
+<!ELEMENT script (include-script*, let*, body?, initialization?)>
diff --git a/static/dtd/Script_1_2.dtd b/static/dtd/Script_1_2.dtd
new file mode 100644
index 0000000..ab1e035
--- /dev/null
+++ b/static/dtd/Script_1_2.dtd
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+DTD for the files used with the ScriptParser class and Script component.
+This is recognized with the public identifier:
+
+ -//Howard Lewis Ship//Tapestry Script 1.2//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.sf.net/dtd/Script_1_2.dtd
+
+The root element is always script.
+
+-->
+<!-- =======================================================
+
+Entity: full-content
+
+Identifies the contents of most of the other elements.
+
+-->
+<!ENTITY % full-content "(#PCDATA | foreach | if | if-not)*">
+<!-- =======================================================
+
+Element: body
+Contained by: script
+
+Allows a mix of text and insert elements. This text is added to
+the large scripting block just before the <body> tag.
+-->
+<!ELEMENT body %full-content;>
+<!-- =======================================================
+
+Element: foreach
+Appears in: %full-content;
+
+Iterates over a list of items; this is modeled after the
+Foreach component. No iteration occurs if the value
+from the property path is null.
+
+Attributes:
+ key: Defines the symbol into which each succesive value is stored.
+ expression: The source of values, as an OGNL expression rooted in the symbols Map.
+-->
+<!ELEMENT foreach %full-content;>
+<!ATTLIST foreach
+ key CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: include-script
+Contained by: script
+
+Inserts a reference to an external, static, JavaScript file.
+
+Attributes:
+ resource-path: The path to the script within the classpath.
+-->
+<!ELEMENT include-script EMPTY>
+<!ATTLIST include-script
+ resource-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: if
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the expression evaulates to true.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if %full-content;>
+<!ATTLIST if
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: if-not
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the property-path evaulates to false.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if-not %full-content;>
+<!ATTLIST if-not
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: initialization
+Contained by: script
+
+Text in this block is added to the event handler for the <body>
+tag's onLoad event.
+-->
+<!ELEMENT initialization %full-content;>
+
+
+
+<!-- =======================================================
+Element: input-symbol
+Contained by: script
+
+Defines an input symbol used by the script.
+Attributes:
+ key: The name of the symbol.
+ class: If specified, the exected class or interface for the symbol.
+ required: If yes, then the symbol must be non-null.
+-->
+
+<!ELEMENT input-symbol EMPTY>
+<!ATTLIST input-symbol
+ key CDATA #REQUIRED
+ class CDATA #IMPLIED
+ required (yes|no) "no"
+>
+
+<!-- =======================================================
+
+Element: let
+Contained by: script
+
+Used to create a new symbol.
+
+-->
+<!ELEMENT let %full-content;>
+<!ATTLIST let
+ key CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: script
+
+Root element.
+
+Allows zero or more let elements (to establish new symbols),
+followed by a body and/or initialization element.
+
+-->
+<!ELEMENT script (include-script*, input-symbol*,
+ (let | set)*, body?, initialization?)>
+
+
+<!-- =======================================================
+
+Element: set
+Contained by: script
+
+Creates a new symbol as the result of evaluating an OGNL expression.
+
+-->
+<!ELEMENT set EMPTY>
+<!ATTLIST set
+ key CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
\ No newline at end of file
diff --git a/static/dtd/Script_3_0.dtd b/static/dtd/Script_3_0.dtd
new file mode 100644
index 0000000..b7d8e0d
--- /dev/null
+++ b/static/dtd/Script_3_0.dtd
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+DTD for the files used with the ScriptParser class and Script component.
+This is recognized with the public identifier:
+
+ -//Apache Software Foundation//Tapestry Script Specification 3.0//EN
+
+The canonical location for the DTD is:
+
+ http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd
+
+The root element is always script.
+
+This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
+- Addition of <unique> element
+- Addition of unique attribute to <let> element
+- Addition of index attribute to <foreach> element
+-->
+<!-- =======================================================
+
+Entity: full-content
+
+Identifies the contents of most of the other elements.
+
+-->
+<!ENTITY % full-content "(#PCDATA | foreach | if | if-not | unique)*">
+<!-- =======================================================
+
+Element: body
+Contained by: script
+
+Allows a mix of text and control elements. This text is added to
+the large scripting block just inside the <body> tag.
+-->
+<!ELEMENT body %full-content;>
+<!-- =======================================================
+
+Element: foreach
+Appears in: %full-content;
+
+Iterates over a list of items; this is modeled after the
+For component. No iteration occurs if the value
+from the expression is null.
+
+Attributes:
+ key: Defines the symbol into which each succesive value is stored.
+ index: Defines the symbol into which the index of the value of the current iteration is stored.
+ expression: The source of values, as an OGNL expression rooted in the symbols Map.
+-->
+<!ELEMENT foreach %full-content;>
+<!ATTLIST foreach
+ key CDATA #IMPLIED
+ index CDATA #IMPLIED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: include-script
+Contained by: script
+
+Inserts a reference to an external, static, JavaScript file.
+
+Attributes:
+ resource-path: The path to the script within the classpath.
+-->
+<!ELEMENT include-script EMPTY>
+<!ATTLIST include-script
+ resource-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: if
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the expression evaulates to true.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if %full-content;>
+<!ATTLIST if
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: if-not
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the property-path evaulates to false.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if-not %full-content;>
+<!ATTLIST if-not
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: initialization
+Contained by: script
+
+Text in this block is added to the event handler for the <body>
+tag's onLoad event.
+-->
+<!ELEMENT initialization %full-content;>
+
+
+
+<!-- =======================================================
+Element: input-symbol
+Contained by: script
+
+Defines an input symbol used by the script.
+Attributes:
+ key: The name of the symbol.
+ class: If specified, the exected class or interface for the symbol.
+ required: If yes, then the symbol must be non-null.
+-->
+
+<!ELEMENT input-symbol EMPTY>
+<!ATTLIST input-symbol
+ key CDATA #REQUIRED
+ class CDATA #IMPLIED
+ required (yes|no) "no"
+>
+
+<!-- =======================================================
+
+Element: let
+Contained by: script
+
+Used to create a new symbol. The content of the tag
+is used to create a string that is the name. If the
+unique flag is enabled, the name is ensured to be unique
+(a suffix may be appended to ensure it is unique
+among all names so generated).
+
+Attributes:
+ key: The name of the symbol to create.
+ unique: If yes, the name is ensured to be unique.
+ The default is no.
+
+-->
+<!ELEMENT let %full-content;>
+<!ATTLIST let
+ key CDATA #REQUIRED
+ unique (yes|no) "no"
+>
+<!-- =======================================================
+
+Element: script
+
+Root element.
+
+Allows zero or more let elements (to establish new symbols),
+followed by a body and/or initialization element.
+
+-->
+<!ELEMENT script (include-script*, input-symbol*,
+ (let | set)*, body?, initialization?)>
+
+
+<!-- =======================================================
+
+Element: set
+Contained by: script
+
+Creates a new symbol as the result of evaluating an OGNL expression.
+
+-->
+<!ELEMENT set EMPTY>
+<!ATTLIST set
+ key CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: unique
+Appears in: %full-content;
+
+Defines a block that only is rendered once per page.
+This is appropriate to certain kinds of initialization code
+that should not be duplicated, even if the script is
+executed multiple times.
+
+-->
+<!ELEMENT unique %full-content;>
diff --git a/static/dtd/Script_4_0.dtd b/static/dtd/Script_4_0.dtd
new file mode 100644
index 0000000..e8e600b
--- /dev/null
+++ b/static/dtd/Script_4_0.dtd
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+DTD for the files used with the ScriptParser class and Script component.
+This is recognized with the public identifier:
+
+ -//Apache Software Foundation//Tapestry Script Specification 4.0//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.apache.org/dtd/Script_4_0.dtd
+
+The root element is always script.
+
+This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
+- Addition of <unique> element
+- Addition of unique attribute to <let> element
+- Addition of index attribute to <foreach> element
+-->
+<!-- =======================================================
+
+Entity: full-content
+
+Identifies the contents of most of the other elements.
+
+-->
+<!ENTITY % full-content "(#PCDATA | foreach | if | if-not | unique)*">
+<!-- =======================================================
+
+Element: body
+Contained by: script
+
+Allows a mix of text and control elements. This text is added to
+the large scripting block just inside the <body> tag.
+-->
+<!ELEMENT body %full-content;>
+<!-- =======================================================
+
+Element: foreach
+Appears in: %full-content;
+
+Iterates over a list of items; this is modeled after the
+For component. No iteration occurs if the value
+from the expression is null.
+
+Attributes:
+ key: Defines the symbol into which each succesive value is stored.
+ index: Defines the symbol into which the index of the value of the current iteration is stored.
+ expression: The source of values, as an OGNL expression rooted in the symbols Map.
+-->
+<!ELEMENT foreach %full-content;>
+<!ATTLIST foreach
+ key CDATA #IMPLIED
+ index CDATA #IMPLIED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: include-script
+Contained by: script
+
+Inserts a reference to an external, static, JavaScript file.
+
+Attributes:
+ resource-path: The path to the script within the classpath.
+-->
+<!ELEMENT include-script EMPTY>
+<!ATTLIST include-script
+ resource-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: if
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the expression evaulates to true.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if %full-content;>
+<!ATTLIST if
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+
+Element: if-not
+Appears in: %full-content;
+
+Creates a conditional portion of the script; The body of the element
+is only included if the property-path evaulates to false.
+
+Attributes:
+ expression: The trigger expression, as an OGNL expression rooted in
+ the symbols Map.
+
+-->
+<!ELEMENT if-not %full-content;>
+<!ATTLIST if-not
+ expression CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: initialization
+Contained by: script
+
+Text in this block is added to the event handler for the <body>
+tag's onLoad event.
+-->
+<!ELEMENT initialization %full-content;>
+
+
+
+<!-- =======================================================
+Element: input-symbol
+Contained by: script
+
+Defines an input symbol used by the script.
+Attributes:
+ key: The name of the symbol.
+ class: If specified, the exected class or interface for the symbol.
+ required: If yes, then the symbol must be non-null.
+-->
+
+<!ELEMENT input-symbol EMPTY>
+<!ATTLIST input-symbol
+ key CDATA #REQUIRED
+ class CDATA #IMPLIED
+ required (yes|no) "no"
+>
+
+<!-- =======================================================
+
+Element: let
+Contained by: script
+
+Used to create a new symbol. The content of the tag
+is used to create a string that is the name. If the
+unique flag is enabled, the name is ensured to be unique
+(a suffix may be appended to ensure it is unique
+among all names so generated).
+
+Attributes:
+ key: The name of the symbol to create.
+ unique: If yes, the name is ensured to be unique.
+ The default is no.
+
+-->
+<!ELEMENT let %full-content;>
+<!ATTLIST let
+ key CDATA #REQUIRED
+ unique (yes|no) "no"
+>
+<!-- =======================================================
+
+Element: script
+
+Root element.
+
+Allows zero or more let elements (to establish new symbols),
+followed by a body and/or initialization element.
+
+-->
+<!ELEMENT script (include-script*, input-symbol*,
+ (let | set)*, body?, initialization?)>
+
+
+<!-- =======================================================
+
+Element: set
+Contained by: script
+
+Creates a new symbol as the result of evaluating an OGNL expression.
+
+-->
+<!ELEMENT set EMPTY>
+<!ATTLIST set
+ key CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+
+Element: unique
+Appears in: %full-content;
+
+Defines a block that only is rendered once per page.
+This is appropriate to certain kinds of initialization code
+that should not be duplicated, even if the script is
+executed multiple times.
+
+-->
+<!ELEMENT unique %full-content;>
diff --git a/static/dtd/Tapestry_1_2.dtd b/static/dtd/Tapestry_1_2.dtd
new file mode 100644
index 0000000..60bb1e1
--- /dev/null
+++ b/static/dtd/Tapestry_1_2.dtd
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: Tapestry_1_2.dtd 243999 2004-10-29 17:14:26Z hlship $ -->
+<!--
+
+The DTD for Tapestry application and component specifications.
+Associated with the public identifier:
+
+ -//Howard Lewis Ship//Tapestry Specification 1.2//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.sf.net/dtd/Tapestry_1_2.dtd
+
+For application specifications, the root element is application.
+
+For component specifications the root element is specification.
+
+This DTD is backwards compatible with the 1.1 DTD, with the following exceptions:
+- Addition of the parameter-name attribute to the parameter element
+- Addition of direction attribute to the parameter element
+- Addition of string-binding element
+
+-->
+<!-- =======================================================
+Entity: attribute-flag
+
+For entity attribute that take a boolean value, defines 'yes' and 'no.
+-->
+<!ENTITY % attribute-flag "(yes|no)">
+<!-- =======================================================
+Element: application
+Root element
+
+Defines a Tapestry application.
+
+Attributes:
+ name: A textual name used to uniquely identify the application.
+ engine-class: The Java class to instantiate as the application engine.
+-->
+<!ELEMENT application (description*, property*, (page|component-alias|service)*)>
+<!ATTLIST application
+ name CDATA #REQUIRED
+ engine-class CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: bean
+Appears in: specification
+
+Defines a JavaBean that will be used in some way by the component. Beans
+are accessible via the components' beans property (which contains a property
+for each bean). Beans are created as needed, and are discarded based on
+the lifecycle attribute. Beans are typically used to extend the
+implementation of a component via aggregation.
+
+Attributes:
+ name: the name of the bean
+ class: the Java class to instantiate
+ lifecycle: when the reference to the bean should be discard
+ "none" no lifecycle, the bean is created and returned, but not stored
+ "request" the bean is retained until the end of the request cycle
+ "page" the bean is retained for the lifespan of the page
+
+Nothing prevents a bean for storing state; however, such state will
+not be associated with any particular session (unlike persistant page
+properties). Further, because of page pooling, subsequent requests
+from the same client may be serviced by different instances of a page and
+(therefore) different bean instances.
+
+Beans that have the "request" lifecycle may be stored into a pool
+for later re-use (in the same or different page).
+
+The bean may have its properties set. Properties are set on both
+newly instantiated beans, and beans that are retrieved from a pool.
+
+-->
+<!ELEMENT bean (description*, set-property*)>
+<!ATTLIST bean
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ lifecycle (none|request|page) "request"
+>
+<!-- =======================================================
+Element: binding
+Appears in: component
+
+Binds a parameter of the component to a property of its container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ property-path: The property path, relative to the container, to obtain
+ the parameter value from.
+-->
+<!ELEMENT binding EMPTY>
+<!ATTLIST binding
+ name CDATA #REQUIRED
+ property-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: component
+Contained by: specification
+
+Defines a component contained by the component being specified.
+
+Attribute:
+ id: A unique identifier for the component within the container.
+ type: The type of component, either a well known logical name, or the complete path
+ to the component's specification.
+ copy-of: The id of a previously defined component; this component will be a copy
+ of the other component.
+
+The Tapestry page loader ensures that either type or copy-of is specified, but not both.
+-->
+<!ELEMENT component ((binding | field-binding | inherited-binding | static-binding | string-binding)*)>
+<!ATTLIST component
+ id ID #REQUIRED
+ type CDATA #IMPLIED
+ copy-of IDREF #IMPLIED
+>
+<!-- =======================================================
+Element: component-alias
+Contained by: application
+
+Establishes a short logic name for a particular component that is used
+within the application.
+
+Attributes:
+ type: The logical name for the component.
+ specification-path: The complete path to the component's specification.
+-->
+<!ELEMENT component-alias EMPTY>
+<!ATTLIST component-alias
+ type CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: context-asset
+Contained by: specification
+
+An asset located in the same web application context as the running
+application.
+
+Attributes:
+ name: The name of the asset.
+ path: The path, relative to the web application context, of the resource.
+-->
+<!ELEMENT context-asset EMPTY>
+<!ATTLIST context-asset
+ name CDATA #REQUIRED
+ path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: description
+Appears in: application bean parameter specification
+
+Several elements may contain descriptions; these descriptions are
+optional. The eventual goal is to provide help in some form of IDE.
+Currently, descriptions are optional and ignored.
+
+Attributes:
+ xml:lang the language that the description is expressed in.
+-->
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description
+ xml:lang NMTOKEN "en"
+>
+<!-- =======================================================
+Element: external-asset
+Contained by: specification
+
+Defines an asset at some external source.
+
+Attributes:
+ name: The name of the asset.
+ URL: The URL used to reference the asset.
+-->
+<!ELEMENT external-asset EMPTY>
+<!ATTLIST external-asset
+ name CDATA #REQUIRED
+ URL CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: field-binding
+Appears in: component
+
+Binds a parameter of the component to a public static field of
+some Java object.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ field-name: The name of the field, of the form [package.]class.field.
+ The package may be ommitted if it is "java.lang".
+-->
+<!ELEMENT field-binding EMPTY>
+<!ATTLIST field-binding
+ name CDATA #REQUIRED
+ field-name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: field-value
+Appears in: set-property
+
+Allows a helper bean property to be set to the value of
+a static field.
+
+Attributes:
+ field-name: The name of the field, as with field-binding.
+
+-->
+<!ELEMENT field-value EMPTY>
+<!ATTLIST field-value
+ field-name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: inherited-binding
+Appears in: component
+
+Binds a parameter of the component to a parameter of the container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ parameter-name: The name of the container parameter to bind the
+ component parameter to.
+-->
+<!ELEMENT inherited-binding EMPTY>
+<!ATTLIST inherited-binding
+ name CDATA #REQUIRED
+ parameter-name CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: page
+Contained by: application
+
+Defines a single page within the application. Each application will contain
+at least one of these, to define the Home page.
+
+Attributes:
+ name: A unique name for the application.
+ specification-path: The resource classpath of the component specification
+ for the page.
+-->
+<!ELEMENT page EMPTY>
+<!ATTLIST page
+ name CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: parameter
+Contained by: specification
+
+Defines a formal parameter for the component.
+
+Attributes:
+ name: A unqiue name for the parameter.
+ java-type: The name of a Java class or primitive type expected by the parameter.
+ This is for documentation purposes only, it is not enforced.
+ required: If yes, then the parameter must be bound. If no (the default),
+ then the parameter is optional.
+ property-name: The name to use, instead of the parameter name, for the
+ JavaBean property connected to this parameter.
+ direction: The normal flow of data through the component.
+-->
+<!ELEMENT parameter (description*)>
+<!ATTLIST parameter
+ name CDATA #REQUIRED
+ java-type CDATA #IMPLIED
+ required %attribute-flag; "no"
+ property-name CDATA #IMPLIED
+ direction (in|custom) "custom"
+>
+<!-- =======================================================
+Element: private-asset
+Contained by: specification
+
+An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
+
+Attributes:
+ name: The name of the asset.
+ resource-path: The complete pathname of the resource.
+-->
+<!ELEMENT private-asset EMPTY>
+<!ATTLIST private-asset
+ name CDATA #REQUIRED
+ resource-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: property
+Contained by: application, specification
+
+Defines a key/value pair associated with the application or component specification. Properties
+are used to capture information that doesn't fit into the DTD. The value for the property is
+the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
+-->
+<!ELEMENT property (#PCDATA)>
+<!ATTLIST property
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: property-value
+Appears in: set-parameter
+
+Used to initialize a bean with a property of its containing
+component.
+-->
+
+<!ELEMENT property-value EMPTY>
+<!ATTLIST property-value
+ property-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: reserved-parameter
+Appears in: specification
+
+Identifies a name which may not be used as an informal parameter.
+Informal parameters are typically HTML attribute names; this
+list identifies HTML attributes that are written exclusively
+by the component and may not be affected by informal parameters.
+-->
+
+<!ELEMENT reserved-parameter EMPTY>
+<!ATTLIST reserved-parameter
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: service
+Appears in: application
+
+Defines an engine service. You may override the default
+set of engine services or provide completely new services.
+
+Attributes:
+ name: The name of the service.
+ class: The Java class to instantiate for the service.
+
+-->
+
+<!ELEMENT service EMPTY>
+<!ATTLIST service
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: set-property
+Appears in: bean
+
+Used to initialize a property of a helper bean.
+-->
+
+<!ELEMENT set-property (static-value | property-value | field-value)>
+<!ATTLIST set-property
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: specification
+Root element
+
+A component specification. It's attributes define the Java class to
+instantiate, whether the component may wrap other elements, and whether
+informal (undeclared) parameters are allowed.
+
+Attributes:
+ class: The Java class to instantiate for the component.
+ allow-body: If yes (the default), the component may wrap other elements (have a body).
+ allow-informal-parameters: If yes (the default), informal parameters (parameters that are not
+ explictily defined) are allowed.
+-->
+<!ELEMENT specification (description*, parameter*, reserved-parameter*, property*, bean*,
+ component*, (external-asset | context-asset | private-asset)*)>
+<!ATTLIST specification
+ class CDATA #REQUIRED
+ allow-body %attribute-flag; "yes"
+ allow-informal-parameters %attribute-flag; "yes"
+>
+<!-- =======================================================
+Element: static-binding
+Appears in: component
+
+Binds a parameter of the component to a static value defined directly
+within this specification. The value is the PCDATA wrapped by the element
+(with leading and trailing whitespace removed).
+
+Attributes:
+ name: The name of the component parameter to bind.
+
+-->
+<!ELEMENT static-binding (#PCDATA)>
+<!ATTLIST static-binding
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: static-value
+Appears in: set-parameter
+
+A static value, that will be converted to some known type.
+
+The possible types are limited to a few simple scalar types,
+and String. Additional types will likely be added in the future.
+
+-->
+
+<!ELEMENT static-value (#PCDATA)>
+<!ATTLIST static-value
+ type (boolean|int|double|String) "String"
+>
+
+<!-- =======================================================
+Element: string-binding
+Appears in: component
+
+Binds a parameter of the component to a localized string of
+its container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ key: The key used to access a localized string.
+
+-->
+
+<!ELEMENT string-binding EMPTY>
+<!ATTLIST string-binding
+ name CDATA #REQUIRED
+ key CDATA #REQUIRED
+>
\ No newline at end of file
diff --git a/static/dtd/Tapestry_1_3.dtd b/static/dtd/Tapestry_1_3.dtd
new file mode 100644
index 0000000..e01c5ab
--- /dev/null
+++ b/static/dtd/Tapestry_1_3.dtd
@@ -0,0 +1,548 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+The DTD for Tapestry application, page and component specifications.
+Associated with the public identifier:
+
+ -//Howard Lewis Ship//Tapestry Specification 1.3//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.sf.net/dtd/Tapestry_1_3.dtd
+
+For application specifications, the root element is application.
+
+For component specifications, the root element is component-specification.
+
+For page specifications, the root element is page-specification.
+
+For library specifiations, the root element is library-specification.
+
+This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
+- specification (in 1.1) has been split into page-specification and component-specification
+- added string-value element
+- added library-specification root element
+- added library element
+- added extension element
+- added static value type 'long'
+- allow <property> within <bean>, <component>, <extension>, <private-asset>, <context-asset> and <external-asset>
+- add "render" to bean lifecycle value
+- rename <binding>'s property-path attribute to expression
+- simplify set-property to use OGNL expressions
+- add "form" as parameter direction
+-->
+
+<!-- =======================================================
+Entity: attribute-flag
+
+For entity attributesthat take a boolean value, defines 'yes' and 'no'.
+The default varies, so isn't included here.
+-->
+<!ENTITY % attribute-flag "(yes|no)">
+
+
+<!-- =======================================================
+Entity: static-value-type
+
+For entity attributes that take a string but convert it to a real
+type. Defaults to String.
+
+-->
+<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">
+
+<!ENTITY % library-content "(description*, property*, (page|component-alias|service|library|extension)*)">
+
+<!-- =======================================================
+Element: application
+Root element
+
+Defines a Tapestry application.
+
+Attributes:
+ name: A textual name used to uniquely identify the application.
+ engine-class: The Java class to instantiate as the application engine.
+-->
+<!ELEMENT application %library-content;>
+<!ATTLIST application
+ name CDATA #REQUIRED
+ engine-class CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: bean
+Appears in: component-specification, page-specification
+
+Defines a JavaBean that will be used in some way by the component. Beans
+are accessible via the components' beans property (which contains a property
+for each bean). Beans are created as needed, and are discarded based on
+the lifecycle attribute. Beans are typically used to extend the
+implementation of a component via aggregation.
+
+Attributes:
+ name: the name of the bean
+ class: the Java class to instantiate
+ lifecycle: when the reference to the bean should be discard
+ "none" no lifecycle, the bean is created and returned, but not stored
+ "request" the bean is retained until the end of the request cycle
+ "page" the bean is retained for the lifespan of the page
+ "render" the bean is retained until the end of the current page render
+
+Nothing prevents a bean for storing state; however, such state will
+not be associated with any particular session (unlike persistant page
+properties). Further, because of page pooling, subsequent requests
+from the same client may be serviced by different instances of a page and
+(therefore) different bean instances.
+
+Beans that have the "request" lifecycle may be stored into a pool
+for later re-use (in the same or different page).
+
+The bean may have its properties set. Properties are set on both
+newly instantiated beans, and beans that are retrieved from a pool.
+
+-->
+<!ELEMENT bean (description*, property*, (set-property | set-string-property)*)>
+<!ATTLIST bean
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ lifecycle (none|request|page|render) "request"
+>
+
+<!-- =======================================================
+Element: binding
+Appears in: component
+
+Binds a parameter of the component to a property of its container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ expression: The OGNL expression.
+-->
+<!ELEMENT binding EMPTY>
+<!ATTLIST binding
+ name CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: configure
+Appears in: extension
+
+Configures one JavaBean property of an extension.
+
+Attributes:
+ property-name: The name of the property to configure.
+ type: Conversion of property value.
+
+
+-->
+
+<!ELEMENT configure (#PCDATA)>
+<!ATTLIST configure
+ property-name CDATA #REQUIRED
+ type %static-value-type;
+>
+
+<!-- =======================================================
+Element: component
+Contained by: component-specification, page-specification
+
+Defines a component contained by the component being specified.
+
+Attribute:
+ id: A unique identifier for the component within the container.
+ type: The type of component, either a well known logical name, or the complete path
+ to the component's specification.
+ copy-of: The id of a previously defined component; this component will be a copy
+ of the other component.
+
+The Tapestry page loader ensures that either type or copy-of is specified, but not both.
+-->
+<!ELEMENT component (property*, (binding | field-binding | inherited-binding | static-binding | string-binding)*)>
+<!ATTLIST component
+ id ID #REQUIRED
+ type CDATA #IMPLIED
+ copy-of IDREF #IMPLIED
+>
+
+<!-- =======================================================
+Element: component-alias
+Contained by: application
+
+Establishes a short logic name for a particular component that is used
+within the application.
+
+Attributes:
+ type: The logical name for the component.
+ specification-path: The complete path to the component's specification.
+-->
+<!ELEMENT component-alias EMPTY>
+<!ATTLIST component-alias
+ type CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: component-specification
+Root element
+
+A component specification. It's attributes define the Java class to
+instantiate, whether the component may wrap other elements, and whether
+informal (undeclared) parameters are allowed. Very similar to a page-specification,
+except that component-specification allows for parameters (formal and informal).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+ allow-body: If yes (the default), the component may wrap other elements (have a body).
+ allow-informal-parameters: If yes (the default), informal parameters (parameters that are not
+ explictily defined) are allowed.
+-->
+<!ELEMENT component-specification
+ (description*, parameter*, reserved-parameter*, property*,
+ (bean | component | external-asset | context-asset | private-asset)*)>
+<!ATTLIST component-specification
+ class CDATA #REQUIRED
+ allow-body %attribute-flag; "yes"
+ allow-informal-parameters %attribute-flag; "yes"
+>
+
+<!-- =======================================================
+Element: context-asset
+Contained by: component-specification, page-specification
+
+An asset located in the same web application context as the running
+application.
+
+Attributes:
+ name: The name of the asset.
+ path: The path, relative to the web application context, of the resource.
+-->
+<!ELEMENT context-asset (property*)>
+<!ATTLIST context-asset
+ name CDATA #REQUIRED
+ path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: description
+Appears in: many
+
+Several elements may contain descriptions; these descriptions are
+optional. The eventual goal is to provide help in some form of IDE.
+Currently, descriptions are optional and ignored.
+
+Attributes:
+ xml:lang the language that the description is expressed in.
+-->
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description
+ xml:lang NMTOKEN "en"
+>
+
+<!-- =======================================================
+Element: extension
+Contained by: application, library-specification
+
+Defines an extension, an object that is instantiated and configured
+(like a helper bean) and is then accessible, by name, from the
+containing library (or application).
+
+Attributes:
+ name: Name of the extension.
+ class: Java class to instantiate.
+ immediate: If true, the extension is instantiated early instead of as-needed.
+
+-->
+<!ELEMENT extension (property*, configure*)>
+<!ATTLIST extension
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ immediate %attribute-flag; "no"
+>
+
+<!-- =======================================================
+Element: external-asset
+Contained by: component-specification, page-specification
+
+Defines an asset at some external source.
+
+Attributes:
+ name: The name of the asset.
+ URL: The URL used to reference the asset.
+-->
+<!ELEMENT external-asset (property*)>
+<!ATTLIST external-asset
+ name CDATA #REQUIRED
+ URL CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: field-binding
+Appears in: component
+
+Binds a parameter of the component to a public static field of
+some Java object.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ field-name: The name of the field, of the form [package.]class.field.
+ The package may be ommitted if it is "java.lang".
+-->
+<!ELEMENT field-binding EMPTY>
+<!ATTLIST field-binding
+ name CDATA #REQUIRED
+ field-name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: inherited-binding
+Appears in: component
+
+Binds a parameter of the component to a parameter of the container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ parameter-name: The name of the container parameter to bind the
+ component parameter to.
+-->
+<!ELEMENT inherited-binding EMPTY>
+<!ATTLIST inherited-binding
+ name CDATA #REQUIRED
+ parameter-name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: library
+Appears in: application-specification, library-specification
+
+Defines a library used in the construction of the container
+(either another library, or the application itself).
+
+Attributes:
+ id: An identifier used to reference pages and components
+ provided by the library.
+ specification-path: The path to the resource that provides
+ the library specification.
+-->
+<!ELEMENT library EMPTY>
+<!ATTLIST library
+ id CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: library-specification
+Root element
+
+Defines a library that may be used in the construction
+of an application (or another library). An application can
+be thought of as a specialized kind of library.
+
+-->
+<!ELEMENT library-specification %library-content;>
+
+<!-- =======================================================
+Element: page
+Contained by: application, library-specification
+
+Defines a single page within the application. Each application will contain
+at least one of these, to define the Home page.
+
+Attributes:
+ name: A unique name for the application.
+ specification-path: The resource classpath of the component specification
+ for the page.
+-->
+<!ELEMENT page EMPTY>
+<!ATTLIST page
+ name CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: page-specification
+Root element
+
+A page specification. It's attributes define the Java class to
+instantiate. Pages are like components, except they always allow
+a body, and never allow parameters (formal or otherwise).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+-->
+<!ELEMENT page-specification (description*, property*,
+ (bean | component | external-asset | context-asset | private-asset)*)>
+<!ATTLIST page-specification
+ class CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: parameter
+Contained by: component-specification
+
+Defines a formal parameter for the component.
+
+Attributes:
+ name: A unqiue name for the parameter.
+ java-type: The name of a Java class or primitive type expected by the parameter.
+ This is for documentation purposes only, it is not enforced.
+ required: If yes, then the parameter must be bound. If no (the default),
+ then the parameter is optional.
+ property-name: The name to use, instead of the parameter name, for the
+ JavaBean property connected to this parameter.
+ direction: The normal flow of data through the component.
+-->
+
+<!ELEMENT parameter (description*)>
+<!ATTLIST parameter
+ name CDATA #REQUIRED
+ java-type CDATA #IMPLIED
+ required %attribute-flag; "no"
+ property-name CDATA #IMPLIED
+ direction (in|form|custom) "custom"
+>
+
+<!-- =======================================================
+Element: private-asset
+Contained by: component-specification, page-specification
+
+An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
+
+Attributes:
+ name: The name of the asset.
+ resource-path: The complete pathname of the resource.
+-->
+<!ELEMENT private-asset (property*)>
+<!ATTLIST private-asset
+ name CDATA #REQUIRED
+ resource-path CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: property
+Contained by: (many other elements)
+
+Defines a key/value pair associated with the application or component specification. Properties
+are used to capture information that doesn't fit into the DTD. The value for the property is
+the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
+
+This should not be confused with several other tags which are used to set JavaBeans properties
+of various objects. The <property> tag exists to allow meta-data to be stored in the specification.
+
+Attributes:
+ name: The name of the property to set.
+
+-->
+<!ELEMENT property (#PCDATA)>
+<!ATTLIST property
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: reserved-parameter
+Appears in: component-specification
+
+Identifies a name which may not be used as an informal parameter.
+Informal parameters are typically HTML attribute names; this
+list identifies HTML attributes that are written exclusively
+by the component and may not be affected by informal parameters.
+
+Attributes:
+ name: The parameter name to reserve.
+-->
+
+<!ELEMENT reserved-parameter EMPTY>
+<!ATTLIST reserved-parameter
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: service
+Appears in: application
+
+Defines an engine service. You may override the default
+set of engine services or provide completely new services.
+
+Attributes:
+ name: The name of the service.
+ class: The Java class to instantiate for the service.
+
+-->
+
+<!ELEMENT service EMPTY>
+<!ATTLIST service
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: set-property
+Appears in: bean
+
+Used to initialize a property of a helper bean.
+
+Attributes:
+ name: The name of the property to be set.
+ expression: The OGNL expression that provides a value.
+-->
+
+<!ELEMENT set-property EMPTY>
+<!ATTLIST set-property
+ name CDATA #REQUIRED
+ expression CDATA #REQUIRED
+>
+
+
+<!-- =======================================================
+Element: set-string-property
+Appears in: bean
+
+A localized string.
+
+Attributes:
+ key: Sets a property of a string from a localized string.
+
+-->
+
+<!ELEMENT set-string-property EMPTY>
+<!ATTLIST set-string-property
+ name CDATA #REQUIRED
+ key CDATA #REQUIRED
+>
+
+
+<!-- =======================================================
+Element: static-binding
+Appears in: component
+
+Binds a parameter of the component to a static value defined directly
+within this specification. The value is the PCDATA wrapped by the element
+(with leading and trailing whitespace removed).
+
+Attributes:
+ name: The name of the component parameter to bind.
+
+-->
+<!ELEMENT static-binding (#PCDATA)>
+<!ATTLIST static-binding
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: string-binding
+Appears in: component
+
+Binds a parameter of the component to a localized string of
+its container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ key: The key used to access a localized string.
+
+-->
+
+<!ELEMENT string-binding EMPTY>
+<!ATTLIST string-binding
+ name CDATA #REQUIRED
+ key CDATA #REQUIRED
+>
+
diff --git a/static/dtd/Tapestry_3_0.dtd b/static/dtd/Tapestry_3_0.dtd
new file mode 100644
index 0000000..2a2bfad
--- /dev/null
+++ b/static/dtd/Tapestry_3_0.dtd
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+The DTD for Tapestry application, library, page and component specifications.
+Associated with the public identifier:
+
+ -//Apache Software Foundation//Tapestry Specification 3.0//EN
+
+The canonical location for the DTD is:
+
+ http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd
+
+For application specifications, the root element is application.
+
+For component specifications, the root element is component-specification.
+
+For page specifications, the root element is page-specification.
+
+For library specifiations, the root element is library-specification.
+
+This DTD is backwards compatible with the 1.3 DTD, with the following exceptions:
+- <field-binding> has been removed
+- attribute class of <component-specification> and <page-specification is now optional
+- attributes name and engine-class of <application> are now optional
+- added value attribute to <static-binding>
+- added value attribute to <property>
+- renamed <component-alias> to <component-type>
+- rename <set-string-property> to <set-message-property>
+- added <listener-binding> element
+- added <property-specification> element
+- renamed java-type to type inside <parameter>
+- allow values to be specified as attributes or wrapped character data in many elements
+- allow only a single <description> per element
+-->
+<!-- =======================================================
+Entity: attribute-flag
+
+For entity attributes that take a boolean value, defines 'yes' and 'no'.
+The default varies, so isn't included here.
+-->
+<!ENTITY % attribute-flag "(yes|no)">
+<!-- =======================================================
+Entity: static-value-type
+
+For entity attributes that take a string but convert it to a real
+type. Defaults to String.
+
+-->
+<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">
+<!ENTITY % library-content "(description?, property*, (page|component-type|service|library|extension)*)">
+<!-- =======================================================
+Element: application
+Root element
+
+Defines a Tapestry application.
+
+Attributes:
+ name: A textual name used to uniquely identify the application.
+ engine-class: The Java class to instantiate as the application engine.
+-->
+<!ELEMENT application %library-content;>
+<!ATTLIST application
+ name CDATA #IMPLIED
+ engine-class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: bean
+Appears in: component-specification, page-specification
+
+Defines a JavaBean that will be used in some way by the component. Beans
+are accessible via the components' beans property (which contains a property
+for each bean). Beans are created as needed, and are discarded based on
+the lifecycle attribute. Beans are typically used to extend the
+implementation of a component via aggregation.
+
+Attributes:
+ name: the name of the bean
+ class: the Java class to instantiate
+ lifecycle: when the reference to the bean should be discard
+ "none" no lifecycle, the bean is created and returned, but not stored
+ "request" the bean is retained until the end of the request cycle
+ "page" the bean is retained for the lifespan of the page
+ "render" the bean is retained until the end of the current page render
+
+Nothing prevents a bean for storing state; however, such state will
+not be associated with any particular session (unlike persistant page
+properties). Further, because of page pooling, subsequent requests
+from the same client may be serviced by different instances of a page and
+(therefore) different bean instances.
+
+Beans that have the "request" lifecycle may be stored into a pool
+for later re-use (in the same or different page).
+
+The bean may have its properties set. Properties are set on both
+newly instantiated beans, and beans that are retrieved from a pool.
+
+-->
+<!ELEMENT bean (description?, property*, (set-property | set-message-property)*)>
+<!ATTLIST bean
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ lifecycle (none | request | page | render) "request"
+>
+<!-- =======================================================
+Element: binding
+Appears in: component
+
+Binds a parameter of the component to a OGNL expression, relative
+to its container. The expression may be provided as an attribute, or
+as the body of the element. The latter case is useful when the
+expression is long, or uses problematic characters (such as a
+mix of single and double quotes).
+
+Attributes:
+ name: The name of the component parameter to bind.
+ expression: The OGNL expression.
+-->
+<!ELEMENT binding (#PCDATA)>
+<!ATTLIST binding
+ name CDATA #REQUIRED
+ expression CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: configure
+Appears in: extension
+
+Configures one JavaBean property of an extension.
+
+Attributes:
+ property-name: The name of the property to configure.
+ type: Conversion of property value.
+ value: The value to be converted and applied. If not
+ specified, the element's character data is
+ used.
+
+-->
+<!ELEMENT configure (#PCDATA)>
+<!ATTLIST configure
+ property-name CDATA #REQUIRED
+ type %static-value-type;
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: component
+Contained by: component-specification, page-specification
+
+Defines a component contained by the component being specified.
+
+Attribute:
+ id: A unique identifier for the component within the container.
+ type: The type of component, either a well known logical name, or the complete path
+ to the component's specification.
+ copy-of: The id of a previously defined component; this component will be a copy
+ of the other component.
+
+The Tapestry page loader ensures that either type or copy-of is specified, but not both.
+-->
+<!ELEMENT component (property*, (binding | inherited-binding | listener-binding | static-binding | message-binding)*)>
+<!ATTLIST component
+ id ID #REQUIRED
+ type CDATA #IMPLIED
+ copy-of IDREF #IMPLIED
+ inherit-informal-parameters %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: component-type
+Contained by: application
+
+Establishes a short logic name for a particular component that is used
+within the application.
+
+Attributes:
+ type: The logical name for the component.
+ specification-path: The complete path to the component's specification.
+-->
+<!ELEMENT component-type EMPTY>
+<!ATTLIST component-type
+ type CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: component-specification
+Root element
+
+A component specification. It's attributes define the Java class to
+instantiate, whether the component may wrap other elements, and whether
+informal (undeclared) parameters are allowed. Very similar to a page-specification,
+except that component-specification allows for parameters (formal and informal).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+ allow-body: If yes (the default), the component may wrap other elements (have a body).
+ allow-informal-parameters: If yes (the default), informal parameters (parameters that are not
+ explictily defined) are allowed.
+-->
+<!ELEMENT component-specification (description?, parameter*, reserved-parameter*, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>
+<!ATTLIST component-specification
+ class CDATA #IMPLIED
+ allow-body %attribute-flag; "yes"
+ allow-informal-parameters %attribute-flag; "yes"
+>
+<!-- =======================================================
+Element: context-asset
+Contained by: component-specification, page-specification
+
+An asset located in the same web application context as the running
+application.
+
+Attributes:
+ name: The name of the asset.
+ path: The path, relative to the web application context, of the resource.
+-->
+<!ELEMENT context-asset (property*)>
+<!ATTLIST context-asset
+ name CDATA #REQUIRED
+ path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: description
+Appears in: many
+
+Several elements may contain descriptions; these descriptions are
+optional. The eventual goal is to provide help in some form of IDE.
+Currently, descriptions are optional and ignored.
+
+-->
+<!ELEMENT description (#PCDATA)>
+<!-- =======================================================
+Element: extension
+Contained by: application, library-specification
+
+Defines an extension, an object that is instantiated and configured
+(like a helper bean) and is then accessible, by name, from the
+containing library (or application).
+
+Attributes:
+ name: Name of the extension.
+ class: Java class to instantiate.
+ immediate: If true, the extension is instantiated early instead of as-needed.
+
+-->
+<!ELEMENT extension (property*, configure*)>
+<!ATTLIST extension
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ immediate %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: external-asset
+Contained by: component-specification, page-specification
+
+Defines an asset at some external source.
+
+Attributes:
+ name: The name of the asset.
+ URL: The URL used to reference the asset.
+-->
+<!ELEMENT external-asset (property*)>
+<!ATTLIST external-asset
+ name CDATA #REQUIRED
+ URL CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: inherited-binding
+Appears in: component
+
+Binds a parameter of the component to a parameter of the container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ parameter-name: The name of the container parameter to bind the
+ component parameter to.
+-->
+<!ELEMENT inherited-binding EMPTY>
+<!ATTLIST inherited-binding
+ name CDATA #REQUIRED
+ parameter-name CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: library
+Appears in: application-specification, library-specification
+
+Defines a library used in the construction of the container
+(either another library, or the application itself).
+
+Attributes:
+ id: An identifier used to reference pages and components
+ provided by the library.
+ specification-path: The path to the resource that provides
+ the library specification.
+-->
+<!ELEMENT library EMPTY>
+<!ATTLIST library
+ id CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: library-specification
+Root element
+
+Defines a library that may be used in the construction
+of an application (or another library). An application can
+be thought of as a specialized kind of library.
+
+-->
+<!ELEMENT library-specification %library-content;>
+<!-- =======================================================
+Element: page
+Contained by: application, library-specification
+
+Defines a single page within the application. Each application will contain
+at least one of these, to define the Home page.
+
+Attributes:
+ name: A unique name for the application.
+ specification-path: The resource classpath of the component specification
+ for the page.
+-->
+<!ELEMENT page EMPTY>
+<!ATTLIST page
+ name CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: listener-binding
+Appears in: component
+
+Defines an in-place script using the scripting language
+supported by Bean Scripting Framework (http://jakarta.apache.org/bsf).
+The script itself is the element's character data (often, inside
+a CDATA block).
+
+The default language is jython, though this can be overridden.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ language: The language the script is written in.
+-->
+<!ELEMENT listener-binding (#PCDATA)>
+<!ATTLIST listener-binding
+ name CDATA #REQUIRED
+ language CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: page-specification
+Root element
+
+A page specification. It's attributes define the Java class to
+instantiate. Pages are like components, except they always allow
+a body, and never allow parameters (formal or otherwise).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+-->
+<!ELEMENT page-specification (description?, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>
+<!ATTLIST page-specification
+ class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: parameter
+Contained by: component-specification
+
+Defines a formal parameter for the component.
+
+Attributes:
+ name: A unique name for the parameter.
+ type: The name of a Java class or primitive type expected by the parameter.
+ required: If yes, then the parameter must be bound. If no (the default),
+ then the parameter is optional.
+ property-name: The name to use, instead of the parameter name, for the
+ JavaBean property connected to this parameter.
+ direction: The normal flow of data through the component
+ (in, form, custom, auto).
+ default-value: Specifies the default value for the parameter,
+ if the parameter is not bound.
+-->
+<!ELEMENT parameter (description?)>
+<!ATTLIST parameter
+ name CDATA #REQUIRED
+ type CDATA #IMPLIED
+ required %attribute-flag; "no"
+ property-name CDATA #IMPLIED
+ default-value CDATA #IMPLIED
+ direction (in | form | custom | auto) "custom"
+>
+<!-- =======================================================
+Element: private-asset
+Contained by: component-specification, page-specification
+
+An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
+
+Attributes:
+ name: The name of the asset.
+ resource-path: The complete pathname of the resource.
+-->
+<!ELEMENT private-asset (property*)>
+<!ATTLIST private-asset
+ name CDATA #REQUIRED
+ resource-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: property
+Contained by: (many other elements)
+
+Defines a key/value pair associated with the application or component specification. Properties
+are used to capture information that doesn't fit into the DTD. The value for the property is
+the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
+
+This should not be confused with several other tags which are used to set JavaBeans properties
+of various objects. The <property> tag exists to allow meta-data to be stored in the specification.
+
+Attributes:
+ name: The name of the property to set.
+ value: If specified, is the value of the property, otherwise, the PCDATA is used.
+
+-->
+<!ELEMENT property (#PCDATA)>
+<!ATTLIST property
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: property-specification
+Appears in: page-specification, component-specification
+
+Identifies a transient or persistent property.
+
+Attributes:
+ name: The name of the property.
+ type: The type of the value, either the name of a scalar type,
+ or the fully qualified name of a class. If omitted,
+ java.lang.Object is used.
+ persistent: If "yes", the value will be made persistant. Default
+ is "no".
+ initial-value: If provided, this is an OGNL expression used
+ to initialize the property. If not specified, the
+ body of the element is used as the initial value.
+
+-->
+<!ELEMENT property-specification (#PCDATA)>
+<!ATTLIST property-specification
+ name CDATA #REQUIRED
+ type CDATA #IMPLIED
+ persistent %attribute-flag; "no"
+ initial-value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: reserved-parameter
+Appears in: component-specification
+
+Identifies a name which may not be used as an informal parameter.
+Informal parameters are typically HTML attribute names; this
+list identifies HTML attributes that are written exclusively
+by the component and may not be affected by informal parameters.
+
+Attributes:
+ name: The parameter name to reserve.
+-->
+<!ELEMENT reserved-parameter EMPTY>
+<!ATTLIST reserved-parameter
+ name CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: service
+Appears in: application
+
+Defines an engine service. You may override the default
+set of engine services or provide completely new services.
+
+Attributes:
+ name: The name of the service.
+ class: The Java class to instantiate for the service.
+
+-->
+<!ELEMENT service EMPTY>
+<!ATTLIST service
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: set-property
+Appears in: bean
+
+Used to initialize a property of a helper bean. An OGNL expression
+is provided as the expression attribute, or as wrapped
+character data.
+
+Attributes:
+ name: The name of the property to be set.
+ expression: The OGNL expression that provides a value.
+-->
+<!ELEMENT set-property (#PCDATA)>
+<!ATTLIST set-property
+ name CDATA #REQUIRED
+ expression CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: set-message-property
+Appears in: bean
+
+A localized string.
+
+Attributes:
+ key: Sets a property of a string from a localized string.
+
+-->
+<!ELEMENT set-message-property EMPTY>
+<!ATTLIST set-message-property
+ name CDATA #REQUIRED
+ key CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: static-binding
+Appears in: component
+
+Binds a parameter of the component to a static value defined directly
+within this specification. The value either the value ttribute, or
+the PCDATA wrapped by the element (with leading and trailing whitespace removed).
+
+Attributes:
+ name: The name of the component parameter to bind.
+ value: The value of the binding. If not specied, the PCDATA wrapped
+ by the element is the binding.
+-->
+<!ELEMENT static-binding (#PCDATA)>
+<!ATTLIST static-binding
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: message-binding
+Appears in: component
+
+Binds a parameter of the component to a localized message of
+its container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ key: The key used to access a localized string.
+
+-->
+<!ELEMENT message-binding EMPTY>
+<!ATTLIST message-binding
+ name CDATA #REQUIRED
+ key CDATA #REQUIRED
+>
diff --git a/static/dtd/Tapestry_4_0.dtd b/static/dtd/Tapestry_4_0.dtd
new file mode 100644
index 0000000..239476d
--- /dev/null
+++ b/static/dtd/Tapestry_4_0.dtd
@@ -0,0 +1,472 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+The DTD for Tapestry application, library, page and component specifications.
+Associated with the public identifier:
+
+ -//Apache Software Foundation//Tapestry Specification 4.0//EN
+
+The canonical location for the DTD is:
+
+ http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd
+
+For application specifications, the root element is application.
+
+For component specifications, the root element is component-specification.
+
+For page specifications, the root element is page-specification.
+
+For library specifiations, the root element is library-specification.
+
+This DTD represents a significant change from (and simplification of) the 3.0 DTD.
+Tapestry 4.0 will continue to parse specifications that use the 3.0 DTD for the
+forseable future.
+
+The following changes have occured:
+
+- <service> has been removed; it was used to define engine services, which
+ is now accomplished using the HiveMind tapestry.services.ApplicationServices
+ configuration point.
+- <static-binding> and <message-binding> elements have been removed.
+ There is now just <binding>, whose value attribute contains a prefix to interpret how
+ the remainder of the value is interpreted (no prefix meaning a literal, or static, value).
+- <property> renamed to <meta> and <property-specification> renamed to <property>
+- Removed the type attribute from <property>
+- <property> persistent attribute is now called "persist", and is a string, not a boolean
+- Added <inject>
+- Removed the direction and type attributes from <parameter>
+- Consolidated <context-asset>, <private-asset> and <external-asset> into <asset>
+- Consolidated <set-property> and <set-message-property> into <set>
+- More flexibility on the order of elements
+- Added property attribute to <component>, <bean> and <asset>
+- Removed the type attribute from the <configure> element
+- Added many alternatives to 'yes' and 'no' for boolean attributes.
+- Added aliases and cache attributes to <parameter>
+- Added deprecated to <component-specification>
+- Removed <listener-binding>
+-->
+<!-- =======================================================
+Entity: attribute-flag
+
+For entity attributes that take a boolean value.
+-->
+<!ENTITY % attribute-flag "(yes|no|true|false|on|off|1|0|y|n|t|f|aye|nay)">
+<!ENTITY % library-content "(description?, (meta|page|component-type|library|extension)*)">
+<!-- =======================================================
+Element: application
+Root element
+
+Defines a Tapestry application.
+
+Attributes:
+ name: A textual name used to uniquely identify the application.
+ engine-class: The Java class to instantiate as the application engine.
+-->
+<!ELEMENT application %library-content;>
+<!ATTLIST application
+ name CDATA #IMPLIED
+ engine-class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: asset
+Contained by: component-specification, page-specification
+
+An asset that may be referenced by the component. Different prefixes
+may be applied to the path indicate where the asset is stored;
+context: for the web application context folder or classpath:
+for a file stored in the web applications' classpath.
+
+Attributes:
+ name: The name of the asset.
+ path: The path for the resource, which may be relative or absolute.
+ property: The name of a property that will be created to inject the
+ asset into the component.
+-->
+<!ELEMENT asset (meta*)>
+<!ATTLIST asset
+ name CDATA #REQUIRED
+ path CDATA #REQUIRED
+ property CDATA #IMPLIED
+>
+ <!-- =======================================================
+Element: bean
+Appears in: component-specification, page-specification
+
+Defines a JavaBean that will be used in some way by the component. Beans
+are accessible via the components' beans property (which contains a property
+for each bean). Beans are created as needed, and are discarded based on
+the lifecycle attribute. Beans are typically used to extend the
+implementation of a component via aggregation.
+
+Attributes:
+ name: the name of the bean
+ class: the Java class to instantiate
+ lifecycle: when the reference to the bean should be discard
+ "none" no lifecycle, the bean is created and returned, but not stored
+ "request" the bean is retained until the end of the request cycle
+ "page" the bean is retained for the lifespan of the page
+ "render" (default) the bean is retained until the end of the current page render
+ property: if specified, then a read-ony property is created in the component
+ to access the bean.
+
+Nothing prevents a bean for storing state; however, such state will
+not be associated with any particular session (unlike persistant page
+properties). Further, because of page pooling, subsequent requests
+from the same client may be serviced by different instances of a page and
+(therefore) different bean instances.
+
+Beans that have the "request" lifecycle may be stored into a pool
+for later re-use (in the same or different page).
+
+The bean may have its properties set. Properties are set on both
+newly instantiated beans, and beans that are retrieved from a pool.
+
+-->
+<!ELEMENT bean (description?, (meta|set)*)>
+<!ATTLIST bean
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ lifecycle (none | request | page | render) "request"
+ property CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: binding
+Appears in: component
+
+Binds a parameter of the component to a value. The value may
+be literal, an OGNL expression, or something else, as
+determined by its prefix. The value attribute is optional,
+if not provided, the enclosed character data is the value
+(but it is not allowed to specify both value and character data).
+
+Attributes:
+ name: The name of the component parameter to bind.
+ value The value to bind to the parameter.
+-->
+<!ELEMENT binding (#PCDATA)>
+<!ATTLIST binding
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: inherited-binding
+Appears in: component
+
+Binds a parameter of the component to a parameter of the container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ parameter-name: The name of the container parameter to bind the
+ component parameter to.
+-->
+<!ELEMENT inherited-binding EMPTY>
+<!ATTLIST inherited-binding
+ name CDATA #REQUIRED
+ parameter-name CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: configure
+Appears in: extension
+
+Configures one JavaBean property of an extension.
+
+Attributes:
+ property: The name of the property to configure.
+ value: The value to be converted and applied. If not
+ specified, the element's character data is
+ used.
+
+-->
+<!ELEMENT configure (#PCDATA)>
+<!ATTLIST configure
+ property CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: component
+Contained by: component-specification, page-specification
+
+Defines a component contained by the component being specified.
+
+Attribute:
+ id: A unique identifier for the component within the container.
+ type: The type of component, either a well known logical name, or the complete path
+ to the component's specification.
+ copy-of: The id of a previously defined component; this component will be a copy
+ of the other component.
+ inherit-informal-parameters: If yes, then all informal parameters of the containing
+ component are copied into this component.
+ property: Optional property name; the component instance will be injected into this
+ property.
+
+The Tapestry page loader ensures that either type or copy-of is specified, but not both.
+-->
+<!ELEMENT component (meta | binding | inherited-binding )*>
+<!ATTLIST component
+ id ID #REQUIRED
+ type CDATA #IMPLIED
+ copy-of IDREF #IMPLIED
+ inherit-informal-parameters %attribute-flag; "no"
+ property CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: component-type
+Contained by: application
+
+Establishes a short logic name for a particular component that is used
+within the application.
+
+Attributes:
+ type: The logical name for the component.
+ specification-path: The complete path to the component's specification.
+-->
+<!ELEMENT component-type EMPTY>
+<!ATTLIST component-type
+ type CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: component-specification
+Root element
+
+A component specification. It's attributes define the Java class to
+instantiate, whether the component may wrap other elements, and whether
+informal (undeclared) parameters are allowed. Very similar to a page-specification,
+except that component-specification allows for parameters (formal and informal).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+ allow-body: If yes (the default), the component may wrap other elements (have a body).
+ allow-informal-parameters: If yes (the default), informal parameters (parameters that are not
+ explictily defined) are allowed.
+ deprecated: If yes, then using the component will generate a warning, advising the user
+ to find a different component. The default is no.
+-->
+<!ELEMENT component-specification (description?, (parameter | reserved-parameter | meta | bean | component | asset | property | inject )*)>
+<!ATTLIST component-specification
+ class CDATA #IMPLIED
+ allow-body %attribute-flag; "yes"
+ allow-informal-parameters %attribute-flag; "yes"
+ deprecated %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: description
+Appears in: many
+
+Several elements may contain descriptions; these descriptions are
+optional. The eventual goal is to provide help in some form of IDE.
+Currently, descriptions are optional and ignored.
+
+-->
+<!ELEMENT description (#PCDATA)>
+<!-- =======================================================
+Element: extension
+Contained by: application, library-specification
+
+Defines an extension, an object that is instantiated and configured
+(like a helper bean) and is then accessible, by name, from the
+containing library (or application).
+
+Attributes:
+ name: Name of the extension.
+ class: Java class to instantiate.
+ immediate: If true, the extension is instantiated early instead of as-needed.
+
+-->
+<!ELEMENT extension (meta | configure)* >
+<!ATTLIST extension
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ immediate %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: inject
+Contained by: component-specification, page-specification
+
+Defines a new property whose read-only value is an object
+obtained from HiveMind.
+
+Attributes:
+ property The name of the property.
+ type: The type of object to be injected, used to interpret
+ the meaning of the object attribute.
+ object: The locator used to obtain the value.
+-->
+<!ELEMENT inject EMPTY>
+<!ATTLIST inject
+ property CDATA #REQUIRED
+ type CDATA "object"
+ object CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: library
+Appears in: application-specification, library-specification
+
+Defines a library used in the construction of the container
+(either another library, or the application itself).
+
+Attributes:
+ id: An identifier used to reference pages and components
+ provided by the library.
+ specification-path: The path to the resource that provides
+ the library specification.
+-->
+<!ELEMENT library EMPTY>
+<!ATTLIST library
+ id CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: library-specification
+Root element
+
+Defines a library that may be used in the construction
+of an application (or another library). An application can
+be thought of as a specialized kind of library.
+
+-->
+<!ELEMENT library-specification %library-content;>
+<!-- =======================================================
+Element: page
+Contained by: application, library-specification
+
+Defines a single page within the application. Each application will contain
+at least one of these, to define the Home page.
+
+Attributes:
+ name: A unique name for the application.
+ specification-path: The resource classpath of the component specification
+ for the page.
+-->
+<!ELEMENT page EMPTY>
+<!ATTLIST page
+ name CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: meta
+Contained by: (many other elements)
+
+Defines a key/value pair associated with the application or component specification. Properties
+are used to capture information that doesn't fit into the DTD. The value for the property is
+either the value attribute, or the PCDATA wrapped by the property tag
+(which is trimmed of leading and trailing whitespace).
+
+This should not be confused with several other tags which are used to set JavaBeans properties
+of various objects. The <property> tag exists to allow meta-data to be stored in the specification.
+
+Attributes:
+ key: The name of the property to set.
+ value: If specified, is the value of the property, otherwise, the PCDATA is used.
+
+-->
+<!ELEMENT meta (#PCDATA)>
+<!ATTLIST meta
+ key CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: page-specification
+Root element
+
+A page specification. It's attributes define the Java class to
+instantiate. Pages are like components, except they always allow
+a body, and never allow parameters (formal or otherwise).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+-->
+<!ELEMENT page-specification (description?, (meta| bean | component | asset | property | inject )*)>
+<!ATTLIST page-specification
+ class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: parameter
+Contained by: component-specification
+
+Defines a formal parameter for the component.
+
+Attributes:
+ name: A unique name for the parameter.
+ required: If yes, then the parameter must be bound. If no (the default),
+ then the parameter is optional.
+ property: The name to use, instead of the parameter name, for the
+ JavaBean property connected to this parameter.
+ default-value: Specifies the default value for the parameter, if not bound,
+ as a binding reference.
+ cache: If true (the default), then the parameter property will cache the binding value
+ If false, then each access to the property will re-acquire the the current value
+ for the binding on each access (though invariant bindings may still be cached).
+ aliases: An optional, comma-seperated list of aliases for the parameter. Used to allow
+ compatibility when parameter names are changed.
+ deprecated: If true, then using the parameter will generate a runtime warning.
+-->
+<!ELEMENT parameter (description?)>
+<!ATTLIST parameter
+ name CDATA #REQUIRED
+ required %attribute-flag; "no"
+ property CDATA #IMPLIED
+ default-value CDATA #IMPLIED
+ cache %attribute-flag; "yes"
+ aliases CDATA #IMPLIED
+ deprecated %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: property
+Appears in: page-specification, component-specification
+
+Identifies a transient or persistent property.
+
+Attributes:
+ name: The name of the property.
+ persist: The name of the strategy for persisting the property between requests,
+ or leave blank for no persistence (that is, a transient property).
+ "session" is the most common strategy.
+ initial-value: If provided, this is an OGNL expression used
+ to initialize the property. If not specified, the
+ body of the element is used as the initial value.
+
+-->
+<!ELEMENT property (#PCDATA)>
+<!ATTLIST property
+ name CDATA #REQUIRED
+ persist CDATA #IMPLIED
+ initial-value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: reserved-parameter
+Appears in: component-specification
+
+Identifies a name which may not be used as an informal parameter.
+Informal parameters are typically HTML attribute names; this
+list identifies HTML attributes that are written exclusively
+by the component and may not be affected by informal parameters.
+
+Attributes:
+ name: The parameter name to reserve.
+-->
+<!ELEMENT reserved-parameter EMPTY>
+<!ATTLIST reserved-parameter
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: set
+Appears in: bean
+
+Used to initialize a property of a managed bean. The value
+is a binding reference, and is provided as the value attribute,
+or as wrapped character data.
+
+Attributes:
+ name: The name of the property to be set.
+ value: The value (as a binding reference) to set the property
+ to.
+-->
+<!ELEMENT set (#PCDATA)>
+<!ATTLIST set
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+
diff --git a/static/dtd/Tapestry_4_1.dtd b/static/dtd/Tapestry_4_1.dtd
new file mode 100644
index 0000000..42d8e51
--- /dev/null
+++ b/static/dtd/Tapestry_4_1.dtd
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+The DTD for Tapestry application, library, page and component specifications.
+Associated with the public identifier:
+
+ -//Apache Software Foundation//Tapestry Specification 4.1//EN
+
+The canonical location for the DTD is:
+
+ http://tapestry.apache.org/dtd/Tapestry_4_1.dtd
+
+For application specifications, the root element is application.
+
+For component specifications, the root element is component-specification.
+
+For page specifications, the root element is page-specification.
+
+For library specifiations, the root element is library-specification.
+
+This DTD represents a significant change from (and simplification of) the 3.0 DTD.
+Tapestry 4.0 will continue to parse specifications that use the 3.0 DTD for the
+forseable future.
+
+The following changes have occured:
+
+- <service> has been removed; it was used to define engine services, which
+ is now accomplished using the HiveMind tapestry.services.ApplicationServices
+ configuration point.
+- <static-binding>, <inherited-binding> and <message-binding> elements have been removed.
+ There is now just <binding>, whose value attribute contains a prefix to interpret how
+ the remainder of the value is interpreted (no prefix meaning a literal, or static, value).
+- <property> renamed to <meta> and <property-specification> renamed to <property>
+- Removed the type attribute from <property>
+- <property> persistent attribute is now called "persist", and is a string, not a boolean
+- Added <inject>
+- Removed the direction and type attributes from <parameter>
+- Consolidated <context-asset>, <private-asset> and <external-asset> into <asset>
+- Consolidated <set-property> and <set-message-property> into <set>
+- More flexibility on the order of elements
+- Added property attribute to <component>, <bean> and <asset>
+- Removed the type attribute from the <configure> element
+- Added many alternatives to 'yes' and 'no' for boolean attributes.
+- Added aliases and cache attributes to <parameter>
+- Added deprecated to <component-specification>
+- Removed <listener-binding>
+-->
+<!-- =======================================================
+Entity: attribute-flag
+
+For entity attributes that take a boolean value.
+-->
+<!ENTITY % attribute-flag "(yes|no|true|false|on|off|1|0|y|n|t|f|aye|nay)">
+<!ENTITY % library-content "(description?, (meta|page|component-type|library|extension)*)">
+<!-- =======================================================
+Element: application
+Root element
+
+Defines a Tapestry application.
+
+Attributes:
+ name: A textual name used to uniquely identify the application.
+ engine-class: The Java class to instantiate as the application engine.
+-->
+<!ELEMENT application %library-content;>
+<!ATTLIST application
+ name CDATA #IMPLIED
+ engine-class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: asset
+Contained by: component-specification, page-specification
+
+An asset that may be referenced by the component. Different prefixes
+may be applied to the path indicate where the asset is stored;
+context: for the web application context folder or classpath:
+for a file stored in the web applications' classpath.
+
+Attributes:
+ name: The name of the asset.
+ path: The path for the resource, which may be relative or absolute.
+ property: The name of a property that will be created to inject the
+ asset into the component.
+-->
+<!ELEMENT asset (meta*)>
+<!ATTLIST asset
+ name CDATA #REQUIRED
+ path CDATA #REQUIRED
+ property CDATA #IMPLIED
+>
+ <!-- =======================================================
+Element: bean
+Appears in: component-specification, page-specification
+
+Defines a JavaBean that will be used in some way by the component. Beans
+are accessible via the components' beans property (which contains a property
+for each bean). Beans are created as needed, and are discarded based on
+the lifecycle attribute. Beans are typically used to extend the
+implementation of a component via aggregation.
+
+Attributes:
+ name: the name of the bean
+ class: the Java class to instantiate
+ lifecycle: when the reference to the bean should be discard
+ "none" no lifecycle, the bean is created and returned, but not stored
+ "request" the bean is retained until the end of the request cycle
+ "page" the bean is retained for the lifespan of the page
+ "render" (default) the bean is retained until the end of the current page render
+ property: if specified, then a read-ony property is created in the component
+ to access the bean.
+
+Nothing prevents a bean for storing state; however, such state will
+not be associated with any particular session (unlike persistant page
+properties). Further, because of page pooling, subsequent requests
+from the same client may be serviced by different instances of a page and
+(therefore) different bean instances.
+
+Beans that have the "request" lifecycle may be stored into a pool
+for later re-use (in the same or different page).
+
+The bean may have its properties set. Properties are set on both
+newly instantiated beans, and beans that are retrieved from a pool.
+
+-->
+<!ELEMENT bean (description?, (meta|set)*)>
+<!ATTLIST bean
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ lifecycle (none | request | page | render) "request"
+ property CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: binding
+Appears in: component
+
+Binds a parameter of the component to a value. The value may
+be literal, an OGNL expression, or something else, as
+determined by its prefix. The value attribute is optional,
+if not provided, the enclosed character data is the value
+(but it is not allowed to specify both value and character data).
+
+Attributes:
+ name: The name of the component parameter to bind.
+ value The value to bind to the parameter.
+-->
+<!ELEMENT binding (#PCDATA)>
+<!ATTLIST binding
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: inherited-binding
+Appears in: component
+
+Binds a parameter of the component to a parameter of the container.
+
+Attributes:
+ name: The name of the component parameter to bind.
+ parameter-name: The name of the container parameter to bind the
+ component parameter to.
+-->
+<!ELEMENT inherited-binding EMPTY>
+<!ATTLIST inherited-binding
+ name CDATA #REQUIRED
+ parameter-name CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: configure
+Appears in: extension
+
+Configures one JavaBean property of an extension.
+
+Attributes:
+ property: The name of the property to configure.
+ value: The value to be converted and applied. If not
+ specified, the element's character data is
+ used.
+
+-->
+<!ELEMENT configure (#PCDATA)>
+<!ATTLIST configure
+ property CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: component
+Contained by: component-specification, page-specification
+
+Defines a component contained by the component being specified.
+
+Attribute:
+ id: A unique identifier for the component within the container.
+ type: The type of component, either a well known logical name, or the complete path
+ to the component's specification.
+ copy-of: The id of a previously defined component; this component will be a copy
+ of the other component.
+ inherit-informal-parameters: If yes, then all informal parameters of the containing
+ component are copied into this component.
+ property: Optional property name; the component instance will be injected into this
+ property.
+
+The Tapestry page loader ensures that either type or copy-of is specified, but not both.
+-->
+<!ELEMENT component (meta | binding | inherited-binding )*>
+<!ATTLIST component
+ id ID #REQUIRED
+ type CDATA #IMPLIED
+ copy-of IDREF #IMPLIED
+ inherit-informal-parameters %attribute-flag; "no"
+ property CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: component-type
+Contained by: application
+
+Establishes a short logic name for a particular component that is used
+within the application.
+
+Attributes:
+ type: The logical name for the component.
+ specification-path: The complete path to the component's specification.
+-->
+<!ELEMENT component-type EMPTY>
+<!ATTLIST component-type
+ type CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: component-specification
+Root element
+
+A component specification. It's attributes define the Java class to
+instantiate, whether the component may wrap other elements, and whether
+informal (undeclared) parameters are allowed. Very similar to a page-specification,
+except that component-specification allows for parameters (formal and informal).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+ allow-body: If yes (the default), the component may wrap other elements (have a body).
+ allow-informal-parameters: If yes (the default), informal parameters (parameters that are not
+ explictily defined) are allowed.
+ deprecated: If yes, then using the component will generate a warning, advising the user
+ to find a different component. The default is no.
+ inherit-specification: If yes (the default), all elements contained in any superclass components will be
+ directly inherited in this specification.(this includes parameters/properties/assets/etc..)
+-->
+<!ELEMENT component-specification (description?, (parameter | reserved-parameter | meta | bean | component | asset | property | inject )*)>
+<!ATTLIST component-specification
+ class CDATA #IMPLIED
+ allow-body %attribute-flag; "yes"
+ allow-informal-parameters %attribute-flag; "yes"
+ deprecated %attribute-flag; "no"
+ inherit-specification %attribute-flag; "yes"
+>
+<!-- =======================================================
+Element: description
+Appears in: many
+
+Several elements may contain descriptions; these descriptions are
+optional. The eventual goal is to provide help in some form of IDE.
+Currently, descriptions are optional and ignored.
+
+-->
+<!ELEMENT description (#PCDATA)>
+<!-- =======================================================
+Element: extension
+Contained by: application, library-specification
+
+Defines an extension, an object that is instantiated and configured
+(like a helper bean) and is then accessible, by name, from the
+containing library (or application).
+
+Attributes:
+ name: Name of the extension.
+ class: Java class to instantiate.
+ immediate: If true, the extension is instantiated early instead of as-needed.
+
+-->
+<!ELEMENT extension (meta | configure)* >
+<!ATTLIST extension
+ name CDATA #REQUIRED
+ class CDATA #REQUIRED
+ immediate %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: inject
+Contained by: component-specification, page-specification
+
+Defines a new property whose read-only value is an object
+obtained from HiveMind.
+
+Attributes:
+ property The name of the property.
+ type: The type of object to be injected, used to interpret
+ the meaning of the object attribute.
+ object: The locator used to obtain the value.
+-->
+<!ELEMENT inject EMPTY>
+<!ATTLIST inject
+ property CDATA #REQUIRED
+ type CDATA "object"
+ object CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: library
+Appears in: application-specification, library-specification
+
+Defines a library used in the construction of the container
+(either another library, or the application itself).
+
+Attributes:
+ id: An identifier used to reference pages and components
+ provided by the library.
+ specification-path: The path to the resource that provides
+ the library specification.
+-->
+<!ELEMENT library EMPTY>
+<!ATTLIST library
+ id CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: library-specification
+Root element
+
+Defines a library that may be used in the construction
+of an application (or another library). An application can
+be thought of as a specialized kind of library.
+
+-->
+<!ELEMENT library-specification %library-content;>
+<!-- =======================================================
+Element: page
+Contained by: application, library-specification
+
+Defines a single page within the application. Each application will contain
+at least one of these, to define the Home page.
+
+Attributes:
+ name: A unique name for the application.
+ specification-path: The resource classpath of the component specification
+ for the page.
+-->
+<!ELEMENT page EMPTY>
+<!ATTLIST page
+ name CDATA #REQUIRED
+ specification-path CDATA #REQUIRED
+>
+<!-- =======================================================
+Element: meta
+Contained by: (many other elements)
+
+Defines a key/value pair associated with the application or component specification. Properties
+are used to capture information that doesn't fit into the DTD. The value for the property is
+either the value attribute, or the PCDATA wrapped by the property tag
+(which is trimmed of leading and trailing whitespace).
+
+This should not be confused with several other tags which are used to set JavaBeans properties
+of various objects. The <property> tag exists to allow meta-data to be stored in the specification.
+
+Attributes:
+ key: The name of the property to set.
+ value: If specified, is the value of the property, otherwise, the PCDATA is used.
+
+-->
+<!ELEMENT meta (#PCDATA)>
+<!ATTLIST meta
+ key CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: page-specification
+Root element
+
+A page specification. It's attributes define the Java class to
+instantiate. Pages are like components, except they always allow
+a body, and never allow parameters (formal or otherwise).
+
+Attributes:
+ class: The Java class to instantiate for the component.
+-->
+<!ELEMENT page-specification (description?, (meta| bean | component | asset | property | inject )*)>
+<!ATTLIST page-specification
+ class CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: parameter
+Contained by: component-specification
+
+Defines a formal parameter for the component.
+
+Attributes:
+ name: A unique name for the parameter.
+ required: If yes, then the parameter must be bound. If no (the default),
+ then the parameter is optional.
+ property: The name to use, instead of the parameter name, for the
+ JavaBean property connected to this parameter.
+ default-value: Specifies the default value for the parameter, if not bound,
+ as a binding reference.
+ cache: If true (the default), then the parameter property will cache the binding value
+ If false, then each access to the property will re-acquire the the current value
+ for the binding on each access (though invariant bindings may still be cached).
+ aliases: An optional, comma-seperated list of aliases for the parameter. Used to allow
+ compatibility when parameter names are changed.
+ deprecated: If true, then using the parameter will generate a runtime warning.
+-->
+<!ELEMENT parameter (description?)>
+<!ATTLIST parameter
+ name CDATA #REQUIRED
+ required %attribute-flag; "no"
+ property CDATA #IMPLIED
+ default-value CDATA #IMPLIED
+ cache %attribute-flag; "yes"
+ aliases CDATA #IMPLIED
+ deprecated %attribute-flag; "no"
+>
+<!-- =======================================================
+Element: property
+Appears in: page-specification, component-specification
+
+Identifies a transient or persistent property.
+
+Attributes:
+ name: The name of the property.
+ persist: The name of the strategy for persisting the property between requests,
+ or leave blank for no persistence (that is, a transient property).
+ "session" is the most common strategy.
+ initial-value: If provided, this is an OGNL expression used
+ to initialize the property. If not specified, the
+ body of the element is used as the initial value.
+
+-->
+<!ELEMENT property (#PCDATA)>
+<!ATTLIST property
+ name CDATA #REQUIRED
+ persist CDATA #IMPLIED
+ initial-value CDATA #IMPLIED
+>
+<!-- =======================================================
+Element: reserved-parameter
+Appears in: component-specification
+
+Identifies a name which may not be used as an informal parameter.
+Informal parameters are typically HTML attribute names; this
+list identifies HTML attributes that are written exclusively
+by the component and may not be affected by informal parameters.
+
+Attributes:
+ name: The parameter name to reserve.
+-->
+<!ELEMENT reserved-parameter EMPTY>
+<!ATTLIST reserved-parameter
+ name CDATA #REQUIRED
+>
+
+<!-- =======================================================
+Element: set
+Appears in: bean
+
+Used to initialize a property of a managed bean. The value
+is a binding reference, and is provided as the value attribute,
+or as wrapped character data.
+
+Attributes:
+ name: The name of the property to be set.
+ value: The value (as a binding reference) to set the property
+ to.
+-->
+<!ELEMENT set (#PCDATA)>
+<!ATTLIST set
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+>
+
diff --git a/static/schema/tapestry_5_0_0.xsd b/static/schema/tapestry_5_0_0.xsd
new file mode 100644
index 0000000..05833c4
--- /dev/null
+++ b/static/schema/tapestry_5_0_0.xsd
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
+ targetNamespace="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+ <!-- comp is a component within the template -->
+ <xs:element name="comp">
+ <xs:complexType mixed="true">
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="type" type="xs:string"/>
+ <xs:anyAttribute/>
+ </xs:complexType>
+ </xs:element>
+ <!-- body identifies where the body of the component belongs within the component's template -->
+ <xs:element name="body"/>
+</xs:schema>
diff --git a/static/schema/tapestry_5_1_0.xsd b/static/schema/tapestry_5_1_0.xsd
new file mode 100644
index 0000000..b9c923c
--- /dev/null
+++ b/static/schema/tapestry_5_1_0.xsd
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
+ targetNamespace="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
+ <xs:element name="body">
+ <xs:annotation>
+ <xs:documentation>
+ Defines the position within the template that the body of the component (the portion of the container's
+ template
+ enclosed by the component) will be rendered. This is optional, and only applies to components that wish
+ to render
+ their body within their template.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extend">
+ <xs:annotation>
+ <xs:documentation>
+ Root element of a template that extends its parent template, replacing portions of the template.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extension-point">
+ <xs:annotation>
+ <xs:documentation>
+ Defines a portion of a parent component template that may be replaced in a child component.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="replacement">
+ <xs:annotation>
+ <xs:documentation>
+ A replacement, in a child component template, for an extension-point in the parent component template.
+ This element must be an immediate child of the root element, which will be extend.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block, which must match an id of an inheritable extension-point
+ block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="content">
+ <xs:annotation>
+ <xs:documentation>
+ Marks a portion of the template as the relevant portion; anything outside of the element is discarded.
+ content elements may not be nested inside other content elements.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="remove">
+ <xs:annotation>
+ <xs:documentation>
+ A block of the template to be removed. This can be used as a comment, or to temporarily
+ delete a portion of the template (including markup, expansions and embedded components).
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="container">
+ <xs:annotation>
+ <xs:documentation>
+ May be used as the root element of a template, but is not part of the template itself. Useful when
+ a component exists to emit a series of related elements that are not inside a containing element.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="parameter">
+ <xs:annotation>
+ <xs:documentation>
+ A structured parameter passed to a component as a single object of type Block. The receiving component
+ can get the Block to render. A parameter should always be enclosed by a component element
+ (either an explicit comp element, or an ordinary element instrumented with a Tapestry type or id).
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ The name of the parameter to be bound to the Block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="block">
+ <xs:annotation>
+ <xs:documentation>
+ A block is simply a container of other elements. Blocks do not render themselves or their bodies in the
+ normal flow; they
+ only get rendered when specifially directed to.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID">
+ <xs:annotation>
+ <xs:documentation>
+ An optional identifier that is used to reference the block from inside the Java class.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/static/schema/tapestry_5_3.xsd b/static/schema/tapestry_5_3.xsd
new file mode 100644
index 0000000..99a2509
--- /dev/null
+++ b/static/schema/tapestry_5_3.xsd
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+ targetNamespace="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
+ <xs:element name="body">
+ <xs:annotation>
+ <xs:documentation>
+ Defines the position within the template that the body of the component (the portion of the container's
+ template
+ enclosed by the component) will be rendered. This is optional, and only applies to components that wish
+ to render
+ their body within their template.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extend">
+ <xs:annotation>
+ <xs:documentation>
+ Root element of a template that extends its parent template, replacing portions of the template.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extension-point">
+ <xs:annotation>
+ <xs:documentation>
+ Defines a portion of a parent component template that may be replaced in a child component.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="replace">
+ <xs:annotation>
+ <xs:documentation>
+ A replacement, in a child component template, for an extension-point in the parent component template.
+ This element must be an immediate child of the root element, which will be extend.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block, which must match an id of an inheritable extension-point
+ block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="content">
+ <xs:annotation>
+ <xs:documentation>
+ Marks a portion of the template as the relevant portion; anything outside of the element is discarded.
+ content elements may not be nested inside other content elements.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="remove">
+ <xs:annotation>
+ <xs:documentation>
+ A block of the template to be removed. This can be used as a comment, or to temporarily
+ delete a portion of the template (including markup, expansions and embedded components).
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="container">
+ <xs:annotation>
+ <xs:documentation>
+ May be used as the root element of a template, but is not part of the template itself. Useful when
+ a component exists to emit a series of related elements that are not inside a containing element.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="block">
+ <xs:annotation>
+ <xs:documentation>
+ A block is simply a container of other elements. Blocks do not render themselves or their bodies in the
+ normal flow; they
+ only get rendered when specifially directed to.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID">
+ <xs:annotation>
+ <xs:documentation>
+ An optional identifier that is used to reference the block from inside the Java class.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/static/schema/tapestry_5_4.xsd b/static/schema/tapestry_5_4.xsd
new file mode 100644
index 0000000..01d0f75
--- /dev/null
+++ b/static/schema/tapestry_5_4.xsd
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://tapestry.apache.org/schema/tapestry_5_4.xsd"
+ targetNamespace="http://tapestry.apache.org/schema/tapestry_5_4.xsd">
+ <xs:element name="body">
+ <xs:annotation>
+ <xs:documentation>
+ Defines the position within the template that the body of the component (the portion of the container's
+ template
+ enclosed by the component) will be rendered. This is optional, and only applies to components that wish
+ to render
+ their body within their template.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extend">
+ <xs:annotation>
+ <xs:documentation>
+ Root element of a template that extends its parent template, replacing portions of the template.
+ extend elemenst may containg replace and block elements.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="extension-point">
+ <xs:annotation>
+ <xs:documentation>
+ Defines a portion of a parent component template that may be replaced in a child component.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="replace">
+ <xs:annotation>
+ <xs:documentation>
+ A replacement, in a child component template, for an extension-point in the parent component template.
+ This element must be an immediate child of the root element, which will be extend.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Unique id for the replaceable block, which must match an id of an inheritable extension-point
+ block.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="content">
+ <xs:annotation>
+ <xs:documentation>
+ Marks a portion of the template as the relevant portion; anything outside of the element is discarded.
+ content elements may not be nested inside other content elements.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="remove">
+ <xs:annotation>
+ <xs:documentation>
+ A block of the template to be removed. This can be used as a comment, or to temporarily
+ delete a portion of the template (including markup, expansions and embedded components).
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="container">
+ <xs:annotation>
+ <xs:documentation>
+ May be used as the root element of a template, but is not part of the template itself. Useful when
+ a component exists to emit a series of related elements that are not inside a containing element.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="block">
+ <xs:annotation>
+ <xs:documentation>
+ A block is simply a container of other elements. Blocks do not render themselves or their bodies in the
+ normal flow; they
+ only get rendered when specifially directed to.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID">
+ <xs:annotation>
+ <xs:documentation>
+ An optional identifier that is used to reference the block from inside the Java class.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>