|
| ||||||||||||
| ||||||||||||
A СсылкиA.1 Нормативные ссылки
A.2 Остальные ссылки
B Справочник синтаксиса элементов
C Фрагмент DTD для стилей XSLT (пояснения к спецификации)Замечание: Данный фрагмент DTD не является нормативным, поскольку в XML 1.0 DTD не поддерживают пространства имен XML, а потому не могут корректно описывать структуру, допустимую для стиля XSLT. Приводимая далее сущность может использоваться при создании DTD для XSLT стилей, который создает экземпляры уже конкретного конечного DTD. Прежде чем ссылаться на сущность, стиль DTD должен определить сущность параметра <!ENTITY % result-elements " | fo:inline-sequence | fo:block "> Должно быть декларировано, что такие конечное элементы имеют атрибуты DTD может определить сущность параметра Использование префикса <!ENTITY % char-instructions "
| xsl:apply-templates
| xsl:call-template
| xsl:apply-imports
| xsl:for-each
| xsl:value-of
| xsl:copy-of
| xsl:number
| xsl:choose
| xsl:if
| xsl:text
| xsl:copy
| xsl:variable
| xsl:message
| xsl:fallback
">
<!ENTITY % instructions "
%char-instructions;
| xsl:processing-instruction
| xsl:comment | xsl:element | xsl:attribute
">
<!ENTITY % char-template "
(#PCDATA
%char-instructions;)*
">
<!ENTITY % template "
(#PCDATA
%instructions;
%result-elements;)*
">
<!-- Used for the type of an attribute value that is a URI reference.-->
<!ENTITY % URI "CDATA">
<!-- Used for the type of an attribute value that is a pattern.-->
<!ENTITY % pattern "CDATA">
<!-- Used for the type of an attribute value that is an
attribute value template.-->
<!ENTITY % avt "CDATA">
<!-- Used for the type of an attribute value that is a QName; the prefix
gets expanded by the XSLT processor. -->
<!ENTITY % qname "NMTOKEN">
<!-- Like qname but a whitespace-separated list of QNames. -->
<!ENTITY % qnames "NMTOKENS">
<!-- Used for the type of an attribute value that is an expression.-->
<!ENTITY % expr "CDATA">
<!-- Used for the type of an attribute value that consists of a single character.-->
<!ENTITY % char "CDATA">
<!-- Used for the type of an attribute value that is a priority. -->
<!ENTITY % priority "NMTOKEN">
<!ENTITY % space-att "xml:space (default|preserve) #IMPLIED">
<!-- This may be overridden to customize the set of elements allowed
at the top-level. -->
<!ENTITY % non-xsl-top-level "">
<!ENTITY % top-level "
(xsl:import*,
(xsl:include
| xsl:strip-space
| xsl:preserve-space
| xsl:output
| xsl:key
| xsl:decimal-format
| xsl:attribute-set
| xsl:variable
| xsl:param
| xsl:template
| xsl:namespace-alias
%non-xsl-top-level;)*)
">
<!ENTITY % top-level-atts ' extension-element-prefixes CDATA #IMPLIED
exclude-result-prefixes CDATA #IMPLIED
id ID #IMPLIED
version NMTOKEN #REQUIRED xmlns:xsl CDATA #FIXED "http://www.w3.org/1999/XSL/Transform"
%space-att;
'>
<!-- This entity is defined for use in the ATTLIST declaration for result elements. -->
<!ENTITY % result-element-atts '
xsl:extension-element-prefixes CDATA #IMPLIED
xsl:exclude-result-prefixes CDATA #IMPLIED
xsl:use-attribute-sets %qnames; #IMPLIED
xsl:version NMTOKEN #IMPLIED
'>
<!ELEMENT xsl:stylesheet %top-level;>
<!ATTLIST xsl:stylesheet %top-level-atts;>
<!ELEMENT xsl:transform %top-level;>
<!ATTLIST xsl:transform %top-level-atts;>
<!ELEMENT xsl:import EMPTY>
<!ATTLIST xsl:import href %URI; #REQUIRED>
<!ELEMENT xsl:include EMPTY>
<!ATTLIST xsl:include href %URI; #REQUIRED>
<!ELEMENT xsl:strip-space EMPTY>
<!ATTLIST xsl:strip-space elements CDATA #REQUIRED>
<!ELEMENT xsl:preserve-space EMPTY>
<!ATTLIST xsl:preserve-space elements CDATA #REQUIRED>
<!ELEMENT xsl:output EMPTY>
<!ATTLIST xsl:output
method %qname; #IMPLIED
version NMTOKEN #IMPLIED encoding CDATA #IMPLIED
omit-xml-declaration (yes|no) #IMPLIED
standalone (yes|no) #IMPLIED
doctype-public CDATA #IMPLIED
doctype-system CDATA #IMPLIED
cdata-section-elements %qnames; #IMPLIED
indent (yes|no) #IMPLIED media-type CDATA #IMPLIED
>
<!ELEMENT xsl:key EMPTY>
<!ATTLIST xsl:key
name %qname; #REQUIRED
match %pattern; #REQUIRED use %expr; #REQUIRED
>
<!ELEMENT xsl:decimal-format EMPTY>
<!ATTLIST xsl:decimal-format
name %qname; #IMPLIED
decimal-separator %char; "."
grouping-separator %char; ","
infinity CDATA "Infinity" minus-sign %char; "-" NaN CDATA "NaN"
percent %char; "%" per-mille %char; "‰"
zero-digit %char; "0"
digit %char; "#"
pattern-separator %char; ";"
>
<!ELEMENT xsl:namespace-alias EMPTY>
<!ATTLIST xsl:namespace-alias
stylesheet-prefix CDATA #REQUIRED
result-prefix CDATA #REQUIRED
>
<!ELEMENT xsl:template
(#PCDATA
%instructions;
%result-elements;
| xsl:param)* >
<!ATTLIST xsl:template
match %pattern; #IMPLIED
name %qname; #IMPLIED
priority %priority; #IMPLIED
mode %qname; #IMPLIED
%space-att;
>
<!ELEMENT xsl:value-of EMPTY>
<!ATTLIST xsl:value-of
select %expr; #REQUIRED
disable-output-escaping (yes|no) "no"
>
<!ELEMENT xsl:copy-of EMPTY>
<!ATTLIST xsl:copy-of select %expr; #REQUIRED>
<!ELEMENT xsl:number EMPTY>
<!ATTLIST xsl:number
level (single|multiple|any) "single"
count %pattern; #IMPLIED
from %pattern; #IMPLIED
value %expr; #IMPLIED
format %avt; '1'
lang %avt; #IMPLIED
letter-value %avt; #IMPLIED
grouping-separator %avt; #IMPLIED
grouping-size %avt; #IMPLIED
>
<!ELEMENT xsl:apply-templates (xsl:sort|xsl:with-param)*>
<!ATTLIST xsl:apply-templates
select %expr; "node()"
mode %qname; #IMPLIED
>
<!ELEMENT xsl:apply-imports EMPTY>
<!-- xsl:sort cannot occur after any other elements or
any non-whitespace character -->
<!ELEMENT xsl:for-each
(#PCDATA
%instructions;
%result-elements;
| xsl:sort)*
>
<!ATTLIST xsl:for-each
select %expr; #REQUIRED
%space-att;
>
<!ELEMENT xsl:sort EMPTY>
<!ATTLIST xsl:sort
select %expr; "."
lang %avt; #IMPLIED
data-type %avt; "text"
order %avt; "ascending" case-order %avt; #IMPLIED
>
<!ELEMENT xsl:if %template;>
<!ATTLIST xsl:if
test %expr; #REQUIRED
%space-att;
>
<!ELEMENT xsl:choose (xsl:when+, xsl:otherwise?)>
<!ATTLIST xsl:choose %space-att;>
<!ELEMENT xsl:when %template;>
<!ATTLIST xsl:when
test %expr; #REQUIRED
%space-att;
>
<!ELEMENT xsl:otherwise %template;>
<!ATTLIST xsl:otherwise %space-att;>
<!ELEMENT xsl:attribute-set (xsl:attribute)*>
<!ATTLIST xsl:attribute-set
name %qname; #REQUIRED
use-attribute-sets %qnames; #IMPLIED
>
<!ELEMENT xsl:call-template (xsl:with-param)*>
<!ATTLIST xsl:call-template
name %qname; #REQUIRED
>
<!ELEMENT xsl:with-param %template;>
<!ATTLIST xsl:with-param
name %qname; #REQUIRED
select %expr; #IMPLIED
>
<!ELEMENT xsl:variable %template;>
<!ATTLIST xsl:variable
name %qname; #REQUIRED
select %expr; #IMPLIED
>
<!ELEMENT xsl:param %template;>
<!ATTLIST xsl:param
name %qname; #REQUIRED
select %expr; #IMPLIED
>
<!ELEMENT xsl:text (#PCDATA)>
<!ATTLIST xsl:text
disable-output-escaping (yes|no) "no"
>
<!ELEMENT xsl:processing-instruction %char-template;>
<!ATTLIST xsl:processing-instruction
name %avt; #REQUIRED
%space-att;
>
<!ELEMENT xsl:element %template;>
<!ATTLIST xsl:element
name %avt; #REQUIRED
namespace %avt; #IMPLIED
use-attribute-sets %qnames; #IMPLIED
%space-att;
>
<!ELEMENT xsl:attribute %char-template;>
<!ATTLIST xsl:attribute
name %avt; #REQUIRED
namespace %avt; #IMPLIED
%space-att;
>
<!ELEMENT xsl:comment %char-template;>
<!ATTLIST xsl:comment %space-att;>
<!ELEMENT xsl:copy %template;>
<!ATTLIST xsl:copy
%space-att;
use-attribute-sets %qnames; #IMPLIED
>
<!ELEMENT xsl:message %template;>
<!ATTLIST xsl:message
%space-att;
terminate (yes|no) "no"
>
<!ELEMENT xsl:fallback %template;>
<!ATTLIST xsl:fallback %space-att;>
D Примеры (пояснения к спецификации)D.1 Пример документаВ данном примере представлен стиль для преобразования документа, соответствующего простому DTD, в XHTML [XHTML]. Содержимое DTD: <!ELEMENT doc (title, chapter*)> <!ELEMENT chapter (title, (para|note)*, section*)> <!ELEMENT section (title, (para|note)*)> <!ELEMENT title (#PCDATA|emph)*> <!ELEMENT para (#PCDATA|emph)*> <!ELEMENT note (#PCDATA|emph)*> <!ELEMENT emph (#PCDATA|emph)*> Содержимое стиля: <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:strip-space elements="doc chapter section"/>
<xsl:output
method="xml"
indent="yes"
encoding="iso-8859-1"
/>
<xsl:template match="doc">
<html>
<head>
<title>
<xsl:value-of select="title"/>
</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="doc/title">
<h1>
<xsl:apply-templates/>
</h1>
</xsl:template>
<xsl:template match="chapter/title">
<h2>
<xsl:apply-templates/>
</h2>
</xsl:template>
<xsl:template match="section/title">
<h3>
<xsl:apply-templates/>
</h3>
</xsl:template>
<xsl:template match="para">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="note">
<p class="note">
<b>NOTE: </b>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="emph">
<em>
<xsl:apply-templates/>
</em>
</xsl:template>
</xsl:stylesheet>
Со следующим входным документом <!DOCTYPE doc SYSTEM "doc.dtd"> <doc> <title>Document Title</title> <chapter> <title>Chapter Title</title> <section> <title>Section Title</title> <para>This is a test.</para> <note>This is a note.</note> </section> <section> <title>Another Section Title</title> <para>This is <emph>another</emph> test.</para> <note>This is another note.</note> </section> </chapter> </doc> стиль должен дать следующий результат <?xml version="1.0" encoding="iso-8859-1"?> <html xmlns="http://www.w3.org/TR/xhtml1/strict"> <head> <title>Document Title</title> </head> <body> <h1>Document Title</h1> <h2>Chapter Title</h2> <h3>Section Title</h3> <p>This is a test.</p> <p class="note"> <b>NOTE: </b>This is a note.</p> <h3>Another Section Title</h3> <p>This is <em>another</em> test.</p> <p class="note"> <b>NOTE: </b>This is another note.</p> </body> </html> D.2 Пример данныхДля неких данных, представленных в формате XML, данный пример показывает преобразование с помощью трех различных стилей XSLT чтобы получить три различных представления этих данных в форматах HTML, SVG и VRML. Входные данные: <sales>
<division id="North">
<revenue>10</revenue>
<growth>9</growth>
<bonus>7</bonus>
</division>
<division id="South">
<revenue>4</revenue>
<growth>3</growth>
<bonus>4</bonus>
</division>
<division id="West">
<revenue>6</revenue>
<growth>-1.5</growth>
<bonus>2</bonus>
</division>
</sales>
Далее приводится стиль, который, используя упрощенный синтаксис, описанный в главе [2.3 Фиксированный конечный элемент как стиль], преобразует эти данные в формат HTML: <html xsl:version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
lang="en">
<head>
<title>Sales Results By Division</title>
</head>
<body>
<table border="1">
<tr>
<th>Division</th>
<th>Revenue</th>
<th>Growth</th>
<th>Bonus</th>
</tr>
<xsl:for-each select="sales/division">
<!-- order the result by revenue -->
<xsl:sort select="revenue"
data-type="number"
order="descending"/>
<tr>
<td>
<em><xsl:value-of select="@id"/></em>
</td>
<td>
<xsl:value-of select="revenue"/>
</td>
<td>
<!-- highlight negative growth in red -->
<xsl:if test="growth < 0">
<xsl:attribute name="style">
<xsl:text>color:red</xsl:text>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="growth"/>
</td>
<td>
<xsl:value-of select="bonus"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
Полученный HTML документ: <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Sales Results By Division</title> </head> <body> <table border="1"> <tr> <th>Division</th><th>Revenue</th><th>Growth</th><th>Bonus</th> </tr> <tr> <td><em>North</em></td><td>10</td><td>9</td><td>7</td> </tr> <tr> <td><em>West</em></td><td>6</td><td style="color:red">-1.5</td><td>2</td> </tr> <tr> <td><em>South</em></td><td>4</td><td>3</td><td>4</td> </tr> </table> </body> </html> Следующий стиль преобразует данные в SVG: <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">
<xsl:output method="xml" indent="yes" media-type="image/svg"/>
<xsl:template match="/">
<svg width = "3in" height="3in">
<g style = "stroke: #000000">
<!-- draw the axes -->
<line x1="0" x2="150" y1="150" y2="150"/>
<line x1="0" x2="0" y1="0" y2="150"/>
<text x="0" y="10">Revenue</text>
<text x="150" y="165">Division</text>
<xsl:for-each select="sales/division">
<!-- define some useful variables -->
<!-- the bar's x position -->
<xsl:variable name="pos"
select="(position()*40)-30"/>
<!-- the bar's height -->
<xsl:variable name="height"
select="revenue*10"/>
<!-- the rectangle -->
<rect x="{$pos}" y="{150-$height}"
width="20" height="{$height}"/>
<!-- the text label -->
<text x="{$pos}" y="165">
<xsl:value-of select="@id"/>
</text>
<!-- the bar value -->
<text x="{$pos}" y="{145-$height}">
<xsl:value-of select="revenue"/>
</text>
</xsl:for-each>
</g>
</svg>
</xsl:template>
</xsl:stylesheet>
Полученный SVG документ: <svg width="3in" height="3in"
xmlns="http://www.w3.org/Graphics/SVG/svg-19990412.dtd">
<g style="stroke: #000000">
<line x1="0" x2="150" y1="150" y2="150"/>
<line x1="0" x2="0" y1="0" y2="150"/>
<text x="0" y="10">Revenue</text>
<text x="150" y="165">Division</text>
<rect x="10" y="50" width="20" height="100"/>
<text x="10" y="165">North</text>
<text x="10" y="45">10</text>
<rect x="50" y="110" width="20" height="40"/>
<text x="50" y="165">South</text>
<text x="50" y="105">4</text>
<rect x="90" y="90" width="20" height="60"/>
<text x="90" y="165">West</text>
<text x="90" y="85">6</text>
</g>
</svg>
Следующий стиль преобразует данные в VRML: <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- generate text output as mime type model/vrml, using default charset -->
<xsl:output method="text" encoding="UTF-8" media-type="model/vrml"/>
<xsl:template match="/">#VRML V2.0 utf8
# externproto definition of a single bar element
EXTERNPROTO bar [
field SFInt32 x
field SFInt32 y
field SFInt32 z
field SFString name
]
"http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl"
# inline containing the graph axes
Inline {
url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl"
}
<xsl:for-each select="sales/division">
bar {
x <xsl:value-of select="revenue"/>
y <xsl:value-of select="growth"/>
z <xsl:value-of select="bonus"/>
name "<xsl:value-of select="@id"/>"
}
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Полученный VRML документ: #VRML V2.0 utf8
# externproto definition of a single bar element EXTERNPROTO bar [
field SFInt32 x
field SFInt32 y
field SFInt32 z
field SFString name
]
"http://www.vrml.org/WorkingGroups/dbwork/barProto.wrl"
# inline containing the graph axes
Inline {
url "http://www.vrml.org/WorkingGroups/dbwork/barAxes.wrl"
}
bar {
x 10
y 9
z 7
name "North"
}
bar {
x 4
y 3
z 4
name "South"
}
bar { x 6
y -1.5 z 2
name "West"
}
E Благодарности (пояснения к спецификации)В разработку предварительного варианта документа вклад внести следующие лица:
Данная спецификация была разработана и одобрена для публикации рабочей группой по XSL из W3C. То что рабочая группа одобрила эту спецификацию, не обязательно означает, что ее одобрили все члены группы. В настоящее время членами рабочей группы по XSL являются: Sharon Adler, IBM (сопредседатель); Anders Berglund, IBM; Perin Blanchard, Novell; Scott Boag, Lotus; Larry Cable, Sun; Jeff Caruso, Bitstream; James Clark; Peter Danielsen, Bell Labs; Don Day, IBM; Stephen Deach, Adobe; Dwayne Dicks, SoftQuad; Andrew Greene, Bitstream; Paul Grosso, Arbortext; Eduardo Gutentag, Sun; Juliane Harbarth, Software AG; Mickey Kimchi, Enigma; Chris Lilley, W3C; Chris Maden, Exemplary Technologies; Jonathan Marsh, Microsoft; Alex Milowski, Lexica; Steve Muench, Oracle; Scott Parnell, Xerox; Vincent Quint, W3C; Dan Rapp, Novell; Gregg Reynolds, Datalogics; Jonathan Robie, Software AG; Mark Scardina, Oracle; Henry Thompson, University of Edinburgh; Philip Wadler, Bell Labs; Norman Walsh, Arbortext; Sanjiva Weerawarana, IBM; Steve Zilles, Adobe (сопредседатель) F Изменения по внесенным рекомендациям (пояснения к спецификации)После вынесения предложенной Рекомендации на обсуждение были приняты следующие изменения:
G Характеристики для рассмотрения в будущих версиях XSLT (пояснения к спецификации)Для версий XSLT, которые последуют за XSLT 1.0, рассматривается следующий функционал:
|
|
CITForum © 1997–2025