Это приложение содержит ОТД и XSchema для JSP-страниц с синтаксисом XML.
Это приложение не является нормативным.
Как указано в Разделе JSP.5.4, ОТД не является хорошим описанием, пригодным для
проверки документа, использующего пространства имён, типа JSP-страницы с
синтаксисом XML, но то, что многие читатели знакомы с ним, делает, тем не менее, возможным её использование.
Далее идут ОТД для JSP-документов. Поскольку JSP-документ "знает" о пространстве
имён, это ОТД включено здесь просто для информационных целей.
<!-- ОТД для JSP 1.2 -->
<!--
Это ОТД не является объектом условия или параметра во внутреннем поднаборе и не экспортирует никаких общих объектов.
-->
<!-- Constrained Names/Ограниченные Имена -->
<!ENTITY % URI "CDATA">
<!-- Uniform Resource Identifier, см. [RFC2396] -->
<!ENTITY % UriList "CDATA">
<!-- список разделённых пробелами Uniform Resource Identifiers -->
<!ENTITY % URL "CDATA">
<!-- относительный urlSpec, см. в Разделе 2.10.2. -->
<!ENTITY % BeanID "IDREF">
<!-- ранее объявленный ID боба в текущей области видимости -->
<!ENTITY % Prefix "CDATA">
<!-- Name, не содежащее символов : -->
<!ENTITY % ClassName "CDATA">
<!-- полное квалифицированное имя класса -->
<!ENTITY % TypeName "CDATA">
<!-- полное квалифицированное имя класса или интерфейса -->
<!ENTITY % BeanName "CDATA">
<!-- имя боба/bean, как предполагается методом java.beans.Beans instantiate(). -->
<!ENTITY % Content "CDATA">
<!-- MIME-тип с последующим набором символов IANA, как " type [; S? ['charset='] char-set]
" -->
<!ENTITY % Length "CDATA">
<!-- nn для пикселной или nn% для процентной величины -->
<!ENTITY % Pixels "CDATA">
<!-- целое, представляющее величину в пикселах -->
<!ENTITY % Bool "(true|false|yes|no)">
<!-- булев -->
<!-- используется для object, applet, img, input и iframe -->
<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
<!-- Группы Элементов -->
<!ENTITY % Directives "jsp:directive.page|jsp:directive.include">
<!ENTITY % Scripts "jsp:scriptlet|jsp:declaration|jsp:expression">
<!ENTITY % Actions "jsp:useBean|jsp:setProperty|jsp:getProperty|jsp:include
|jsp:forward|jsp:plugin">
<!ENTITY % Body "(jsp:text|%Directives;|%Scripts;|%Actions;)*">
<!-- Элемент -->
<!-- Корневой элемент JSP-страницы.-->
<!ELEMENT jsp:root %Body;>
<!ATTLIST jsp:root
xmlns:jsp CDATA "http://java.sun.com/JSP/Page"
version CDATA #REQUIRED
>
<!ELEMENT jsp:directive.page EMPTY>
<!ATTLIST jsp:directive.page
language CDATA "java"
extends %ClassName; #IMPLIED
contentType %Content; "text/html; ISO-8859-1"
import CDATA #IMPLIED
session %Bool; "true"
buffer CDATA "8kb"
autoFlush %Bool; "true"
isThreadSafe %Bool; "true"
info CDATA #IMPLIED
errorPage %URL; #IMPLIED
isErrorPage %Bool; "false"
>
<!-- элемент jsp:directive.include появляется только в JSP-документах и не появляется
в XML-просмотрах JSP-страниц -->
<!ELEMENT jsp:directive.include EMPTY>
<!ATTLIST jsp:directive.include
file %URI; #REQUIRED
>
<!ELEMENT jsp:scriptlet (#PCDATA)>
<!ELEMENT jsp:declaration (#PCDATA)>
<!ELEMENT jsp:expression (#PCDATA)>
<!ELEMENT jsp:useBean %Body;>
<!ATTLIST jsp:useBean
id ID #REQUIRED
class %ClassName; #IMPLIED
type %TypeName; #IMPLIED
beanName %BeanName; #IMPLIED
scope (page
|session
|request
|application) "page"
>
<!ELEMENT jsp:setProperty EMPTY>
<!ATTLIST jsp:setProperty
name %BeanID; #REQUIRED
property CDATA #REQUIRED
value CDATA #IMPLIED
param CDATA #IMPLIED
>
<!ELEMENT jsp:getProperty EMPTY>
<!ATTLIST jsp:getProperty
name %BeanID; #REQUIRED
property CDATA #REQUIRED
>
<!ELEMENT jsp:include (jsp:param*)>
<!ATTLIST jsp:include
flush %Bool; "false"
page %URL; #REQUIRED
>
<!ELEMENT jsp:forward (jsp:param*)>
<!ATTLIST jsp:forward
page %URL; #REQUIRED
>
<!ELEMENT jsp:plugin (jsp:params?, jsp:fallback?)>
<!ATTLIST jsp:plugin
type (bean|applet) #REQUIRED
code %URI; #IMPLIED
codebase %URI; #IMPLIED
align %ImgAlign; #IMPLIED
archive %UriList; #IMPLIED
height %Length; #IMPLIED
hspace %Pixels; #IMPLIED
jreversion CDATA "1.2"
name NMTOKEN #IMPLIED
vspace %Pixels; #IMPLIED
width %Length; #IMPLIED
nspluginurl %URI; #IMPLIED
iepluginurl %URI; #IMPLIED
>
<!ELEMENT jsp:params (jsp:param+)>
<!ELEMENT jsp:param EMPTY>
<!ATTLIST jsp:param
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT jsp:text #PCDATA>
Далее идёт описание, использующее XML Schema:
<?xml version ="1.0"?>
<!DOCTYPE schema [
<!-- Патэрны -->
<!ENTITY Identifier "(\p{L}|_|$)(\p{N}|\p{L}|_|$)*">
<!ENTITY TypeName "&Identifier;(\.&Identifier;)*">
<!ENTITY WS "\s*">
<!ENTITY Import "&TypeName;(\.\*)?">
<!ENTITY ImportList "&Import;(&WS;,&WS;&Import;)*">
<!ENTITY SetProp "(&Identifier;|\*)">
<!ENTITY RelativeURL "[^:#/\?]*(:{0,0}|[#/\?].*)">
<!ENTITY Length "[0-9]*%?">
<!ENTITY AsciiName "[A-Za-z0-9_-]*">
<!ENTITY ValidContentType
"&AsciiName;/&AsciiName;(;&WS;(charset=)?&AsciiName;)?">
<!ENTITY ValidPageEncoding "&AsciiName;/&AsciiName;">
<!ENTITY Buffer "[0-9]+kb">
<!ENTITY RTexpr "%=.*%">
]>
<!--Соответствует w3c http://www.w3.org/2001/XMLSchema -->
<xsd:schema
xmlns = "http://java.sun.com/JSP/Page"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
xmlns:jsp = "http://java.sun.com/JSP/Page"
targetNamespace = "http://java.sun.com/JSP/Page"
elementFormDefault = "qualified"
attributeFormDefault = "unqualified">
<xsd:annotation>
<xsd:documentation>
XML Schema для JSP 1.2.
Эта схема базируется на последних (от 5 мая 2001) Рекомендациях W3C по XML Schema.
JSP-транслятор должен отбрасывать файл XML-формата, который не соответствует строго этой схеме или не соблюдает описанных здесь ограничений. Транслятор не обязан использовать эту схему для проверки либо использовать проверяющий разборщик.
</xsd:documentation>
</xsd:annotation>
<!-- Сложные Типы -->
<xsd:complexType name = "Body">
<xsd:annotation>
<xsd:documentation>
Body определяет элементы "верхнего уровня/top-level" в root и beanInfo.
Возможно есть другие элементы, которые должны его использовать.
</xsd:documentation>
</xsd:annotation>
<xsd:group ref = "Bodygroup" minOccurs = "0" maxOccurs = "unbounded"/>
</xsd:complexType>
<xsd:complexType name = "BasicType">
<xsd:simpleContent>
<xsd:extension base = "xsd:string">
<xsd:attribute ref = "jsp:id"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<!-- группы -->
<xsd:group name = "Bodygroup">
<xsd:choice>
<xsd:element ref = "directive.page"/>
<xsd:element ref = "directive.include"/>
<xsd:element ref = "scriptlet"/>
<xsd:element ref = "declaration"/>
<xsd:element ref = "expression"/>
<xsd:element ref = "useBean"/>
<xsd:element ref = "setProperty"/>
<xsd:element ref = "getProperty"/>
<xsd:element ref = "include"/>
<xsd:element ref = "forward"/>
<xsd:element ref = "plugin"/>
<xsd:element ref = "text"/>
<xsd:any namespace="##other" processContents = "lax"/>
</xsd:choice>
</xsd:group>
<!-- jsp:id attribute -->
<xsd:attribute name = "id" type = "xsd:string"/>
<!--Должно иметься ограничение, что jsp:id является уникальным среди всех элементов документа. -->
<!-- Далее идут простые типы -->
<xsd:simpleType name = "RTE">
<xsd:annotation>
<xsd:documentation>
Значение выражения времени запроса
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&RTexpr;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "Bool">
<xsd:annotation>
<xsd:documentation>
Bool мог бы быть булевым, если бы принимал 1 и 0.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:NMTOKEN" >
<xsd:enumeration value = "true"/>
<xsd:enumeration value = "false"/>
<xsd:enumeration value = "yes"/>
<xsd:enumeration value = "no"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "Identifier">
<xsd:annotation>
<xsd:documentation>
Identifier это неквалифицированный Java-идентификатор.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&Identifier;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "TypeName">
<xsd:annotation>
<xsd:documentation>
TypeName это один или более Java-идентификаторов, разделённых точками без пробелов.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&TypeName;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "ImportList">
<xsd:annotation>
<xsd:documentation>
ImportList это один или более typeNames, разделённых запятыми.
Допускаются пробелы до и после запятой.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&ImportList;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "SetProp">
<xsd:annotation>
<xsd:documentation>
SetProp это Identifier или *.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&SetProp;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "RelativeURL">
<xsd:annotation>
<xsd:documentation>
RelativeURL это uriReference без символов двоеточия до первой /, ? или #, если имеются (RFC2396).
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:anyURI">
<xsd:pattern value = "&RelativeURL;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "RTERelativeURL">
<xsd:union memberTypes = "RelativeURL RTE"/>
</xsd:simpleType>
<xsd:simpleType name = "Length">
<xsd:annotation>
<xsd:documentation>
Length это nn или nn%.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&Length;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "ExplicitBufferSize">
<xsd:annotation>
<xsd:documentation>
Размер Буфера с точным значением.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&Buffer;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "NoneBufferSize">
<xsd:annotation>
<xsd:documentation>
Размер Буфера/Buffer Size со значением "none".
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:enumeration value = "none"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "BufferSize">
<xsd:annotation>
<xsd:documentation>
Размер Буфера имеет значение xkb или none.
</xsd:documentation>
</xsd:annotation>
<xsd:union memberTypes = "ExplicitBufferSize NoneBufferSize"/>
</xsd:simpleType>
<xsd:simpleType name = "ContentType">
<xsd:annotation>
<xsd:documentation>
Contetn Type/Тип Содержимого для данной страницы.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&ValidContentType;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "PageEncoding">
<xsd:annotation>
<xsd:documentation>
Кодировка Страницы/Page Encoding для данной страницы. По умолчанию - та же, что и в ContentType.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:string">
<xsd:pattern value = "&ValidPageEncoding;"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "Scope">
<xsd:annotation>
<xsd:documentation>
верные значения scope
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:NMTOKEN">
<xsd:enumeration value = "page"/>
<xsd:enumeration value = "session"/>
<xsd:enumeration value = "request"/>
<xsd:enumeration value = "application"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "PlugInType">
<xsd:annotation>
<xsd:documentation>
верные значения типа plugin'а
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:NMTOKEN">
<xsd:enumeration value = "bean"/>
<xsd:enumeration value = "applet"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name = "AlignType">
<xsd:annotation>
<xsd:documentation>
Размер буфера - xkb.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base = "xsd:NMTOKEN">
<xsd:enumeration value = "top"/>
<xsd:enumeration value = "middle"/>
<xsd:enumeration value = "bottom"/>
<xsd:enumeration value = "left"/>
<xsd:enumeration value = "right"/>
</xsd:restriction>
</xsd:simpleType>
<!-- Элементы -->
<xsd:element name = "root">
<xsd:annotation>
<xsd:documentation>
Корневой элемент всех JSP-документов называется root.
Авторы могут, если хотят, включать информацию о месте размещения схемы.
Если специфицирована, информация может появляться как атрибут элемента root так:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/JSP/Page xsd-file-location"
Документы не должны специфицировать системный идентификатор DTD/ОТД
- Определении Типа Данных - в объявлении DOCTYPE.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base = "Body">
<xsd:attribute name = "version" fixed = "1.2" type = "xsd:string"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name = "directive.page">
<xsd:annotation>
<xsd:documentation>
directive.page это "директива page".
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "language" default = "java" type = "xsd:string"/>
<xsd:attribute name = "extends" type = "TypeName"/>
<xsd:attribute name = "contentType"
default = "text/html; ISO-8859-1" type = "ContentType"/>
<xsd:attribute name = "pageEncoding"
use = "optional" type = "PageEncoding"/>
<xsd:attribute name = "import" type = "ImportList"/>
<xsd:attribute name = "session" default = "true" type = "Bool"/>
<xsd:attribute name = "buffer" default = "8kb" type = "BufferSize"/>
<xsd:attribute name = "autoFlush" default = "true" type = "Bool"/>
<xsd:attribute name = "isThreadSafe" default = "true" type = "Bool"/>
<xsd:attribute name = "info" type = "xsd:string"/>
<xsd:attribute name = "errorPage" type = "RelativeURL"/>
<xsd:attribute name = "isErrorPage" default = "false" type = "Bool"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "directive.include">
<xsd:annotation>
<xsd:documentation>
directive.include это "директива include".
Этот элемент не появляется в XML-просмотре JSP-страниц.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "file" use = "required" type = "RelativeURL"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "scriptlet" type = "BasicType">
<xsd:annotation>
<xsd:documentation>
Представление скриптлета.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name = "declaration" type = "BasicType">
<xsd:annotation>
<xsd:documentation>
Представление объявления.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name = "expression" type = "BasicType">
<xsd:annotation>
<xsd:documentation>
Представление выражения.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name = "text" type = "BasicType">
<xsd:annotation>
<xsd:documentation>
Точно переданный шаблонный текст.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name = "useBean">
<xsd:annotation>
<xsd:documentation>
useBean инстанциирует или имеет доступ к bean в специфицированной области видимости.
Ограничение: Допустимыми комбинациями атрибутов являются:
class [type] | type [( class | beanName)]
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="Body">
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "id" use = "required" type = "Identifier"/>
<xsd:attribute name = "class" type = "TypeName"/>
<xsd:attribute name = "type" type = "TypeName"/>
<xsd:attribute name = "beanName" type = "TypeName"/>
<xsd:attribute name = "scope" default = "page" type = "Scope"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name = "setProperty">
<xsd:annotation>
<xsd:documentation>
setProperty изменяет значение свойства объекта.
Ограничение: Именованный объект обязан быть
"представлен" JSP-процессору через использование либо
акции jsp:useBean, либо специальной акции с ассоциированным
входом VariableInfo для этого имени.
Точные верные комбинации не выражаются в XML Schema.
Это:
name="Identifier" property="*"
name="Identifier" property="Identfiier" param="string"
name="Identifier" property="Identifier" value="string"
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "name" use = "required" type = "Identifier"/>
<xsd:attribute name = "property" use = "required" type = "SetProp"/>
<xsd:attribute name = "param" type = "xsd:string"/>
<xsd:attribute name = "value" type = "xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "getProperty">
<xsd:annotation>
<xsd:documentation>
getProperty получает значение свойства объекта.
Ограничение: Именованный объект обязан быть
"представлен" JSP-процессору через использование либо
акции jsp:useBean, либо специальной акции с ассоциированным
входом VariableInfo для этого имени.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "name" use = "required" type = "Identifier"/>
<xsd:attribute name = "property" use = "required" type = "Identifier"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "include">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref = "param" minOccurs = "0" maxOccurs = "unbounded"/>
</xsd:sequence>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "flush" default = "false" type = "Bool"/>
<xsd:attribute name = "page" use = "required" type = "RTERelativeURL"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "forward">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref = "param" minOccurs = "0" maxOccurs = "unbounded"/>
</xsd:sequence>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "page" use = "required" type = "RTERelativeURL"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "plugin">
<xsd:complexType> <!-- content only! -->
<xsd:sequence>
<xsd:element ref = "params" minOccurs = "0" maxOccurs = "1"/>
<xsd:element name = "fallback"
minOccurs = "0" maxOccurs = "1" type = "Body"/>
</xsd:sequence>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "type" use = "required" type = "PlugInType"/>
<xsd:attribute name = "code" type = "xsd:anyURI"/>
<xsd:attribute name = "codebase" type = "xsd:anyURI"/>
<xsd:attribute name = "align" type = "AlignType"/>
<xsd:attribute name = "archive">
<xsd:simpleType>
<xsd:list itemType="xsd:anyURI"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name = "height" type = "Length"/>
<xsd:attribute name = "hspace" type = "xsd:int"/>
<xsd:attribute name = "jreversion" default = "1.2" type = "xsd:string"/>
<xsd:attribute name = "name" type = "xsd:NMTOKEN"/>
<xsd:attribute name = "vspace" type = "xsd:int"/>
<xsd:attribute name = "width" type = "Length"/>
<xsd:attribute name = "nspluginurl" type = "xsd:anyURI"/>
<xsd:attribute name = "iepluginurl" type = "xsd:anyURI"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "params">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref = "param" minOccurs = "1" maxOccurs = "unbounded"/>
</xsd:sequence>
<xsd:attribute ref = "jsp:id"/>
</xsd:complexType>
</xsd:element>
<xsd:element name = "param">
<xsd:complexType>
<xsd:attribute ref = "jsp:id"/>
<xsd:attribute name = "name" use = "required" type = "xsd:NMTOKEN"/>
<xsd:attribute name = "value" use = "required" type = "xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>