Приложение JSP.B

ОТД
(Определение Типа Данных)
и Схема для Синтаксиса XML


Это приложение содержит ОТД и XSchema для JSP-страниц с синтаксисом XML.


Это приложение не является нормативным.


Как указано в Разделе JSP.5.4, ОТД не является хорошим описанием, пригодным для проверки документа, использующего пространства имён, типа JSP-страницы с синтаксисом XML, но то, что многие читатели знакомы с ним, делает, тем не менее, возможным её использование.

B.1 ОТД для Документов JSP

Далее идут ОТД для 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>

B.2 XSchema-Описание для Документов JSP

Далее идёт описание, использующее 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]*&#x25;?">

<!ENTITY AsciiName "[A-Za-z0-9_-]*">

<!ENTITY ValidContentType

"&AsciiName;/&AsciiName;(;&WS;(charset=)?&AsciiName;)?">

<!ENTITY ValidPageEncoding "&AsciiName;/&AsciiName;">

<!ENTITY Buffer "[0-9]+kb">

<!ENTITY RTexpr "&#x25;=.*&#x25;">

]>

<!--Соответствует 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>