/[cvs]/nfo/perl/libs/XML/XUpdate/xupdate2xsl.xml
ViewVC logotype

Contents of /nfo/perl/libs/XML/XUpdate/xupdate2xsl.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Thu May 1 23:42:48 2003 UTC (21 years ago) by joko
Branch: MAIN
Changes since 1.1: +73 -3 lines
File MIME type: text/xml
somehow got this working together with Mike Kay's identity template rule - very alpha and just "insert-after" seems to work ....

1 <?xml version="1.0" encoding="ISO-8859-1"?>
2
3 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
5 <!--
6 Purpose of this XML Stylesheet is to implement a set of templates
7 to translate XUpdate lingo into an intermediate xslt stylesheet
8 which actually performs the update to the original xml document
9 in a second step.
10 The required glue code - written in Perl - is available in module
11 XML::XUpdate::XSLT. Please have a look at this to port it to other
12 languages.
13 -->
14
15 <xsl:output method="xml" />
16
17 <!-- 1. This is the passthru logic (copy all untouched nodes). -->
18 <xsl:template name="passthru"><xsl:copy><xsl:apply-templates /></xsl:copy></xsl:template>
19 <!-- activate this -->
20 <xsl:template match="*"><xsl:call-template name="passthru" /></xsl:template>
21 <!-- override some builtin rules: see http://www.w3.org/TR/xslt#built-in-rule -->
22 <xsl:template match="comment()"><xsl:call-template name="passthru" /></xsl:template>
23
24
25 <!-- 2. This is the translation part: XUpdate becomes XSLT -->
26
27 <!-- lib -->
28 <!-- This node "encapsulates" common core infrastructure. -->
29 <xsl:template match="xupdate:modifications">
30
31 <!-- <xsl:template name="identity_template_rule"> -->
32 <xsl:element name="xsl:template">
33 <xsl:attribute name="name">identity_template_rule</xsl:attribute>
34
35 <!-- An "identity template rule" - original version by Mike Kay, Software AG -->
36 <!-- Please visit [http://p2p.wrox.com/archive/xslt/2001-06/98.asp] -->
37 <!-- Translated to "self hosting xsl": Andreas Motl, andreas.motl@ilo.de -->
38 <!-- FIXME: Could this be used to replace passthru-logic at 1. ? -->
39 <xsl:element name="xsl:copy">
40 <xsl:element name="xsl:copy-of">
41 <xsl:attribute name="select">@*</xsl:attribute>
42 </xsl:element>
43 <xsl:element name="xsl:apply-templates" />
44 </xsl:element>
45
46 </xsl:element>
47 <!-- </xsl:template> -->
48
49 <!-- 1. This is the passthru logic (copy all untouched nodes). -->
50 <!-- in fact this is the xsl from above translated to be able to be generated by xsl itself! -->
51 <xsl:comment> 1. passthru logic </xsl:comment>
52 <xsl:element name="xsl:template">
53 <xsl:attribute name="name">passthru</xsl:attribute>
54 <xsl:element name="xsl:copy"><xsl:element name="xsl:apply-templates" /></xsl:element>
55 </xsl:element>
56 <xsl:element name="xsl:template">
57 <xsl:attribute name="match">*</xsl:attribute>
58 <xsl:element name="xsl:call-template"><xsl:attribute name="name">passthru</xsl:attribute></xsl:element>
59 </xsl:element>
60 <xsl:element name="xsl:template">
61 <xsl:attribute name="match">comment()</xsl:attribute>
62 <xsl:element name="xsl:call-template"><xsl:attribute name="name">passthru</xsl:attribute></xsl:element>
63 </xsl:element>
64
65 <!-- continue with all inline nodes -->
66 <xsl:apply-templates />
67
68 </xsl:template>
69
70
71
72
73
74 <!-- code -->
75 <!-- This node "encapsulates" infrastructure for handling the directives. -->
76 <!-- FIXME: handle the other ones: append, remove, ect. -->
77 <xsl:template match="xupdate:insert-after">
78 <xsl:comment> 2. context finder </xsl:comment>
79 <!-- <xsl:variable name="select" select="@select">Hello World!</xsl:variable> -->
80
81 <!-- this resembles some parts of the CRUD API - retranslated to self-hosting xsl -->
82
83 <!-- V1 -->
84 <!-- <xsl:element name="xsl:template"> -->
85 <!-- <xsl:attribute name="match"><xsl:value-of select="@select" /></xsl:attribute> -->
86
87 <!-- V2 -->
88 <xsl:element name="xsl:template">
89 <!-- <xsl:attribute name="match">*</xsl:attribute> -->
90 <xsl:attribute name="match">/addresses/address</xsl:attribute>
91
92 <xsl:element name="xsl:choose">
93 <!-- <xsl:attribute name="match"><xsl:value-of select="@select" /></xsl:attribute> -->
94 <xsl:element name="xsl:when">
95 <xsl:attribute name="test"><xsl:value-of select="@select" /></xsl:attribute>
96
97 <!-- insert-before!!! -->
98 <!-- <xsl:apply-templates /> -->
99
100 <!-- call the "identity template rule" to passthru all childnodes -->
101 <xsl:element name="xsl:call-template">
102 <xsl:attribute name="name">identity_template_rule</xsl:attribute>
103 </xsl:element>
104
105 <!-- insert-after!!! -->
106 <xsl:apply-templates />
107
108 </xsl:element>
109 <xsl:element name="xsl:otherwise">
110
111 <!-- call the "identity template rule" to passthru all childnodes -->
112 <xsl:element name="xsl:call-template">
113 <xsl:attribute name="name">identity_template_rule</xsl:attribute>
114 </xsl:element>
115
116 </xsl:element>
117
118 </xsl:element>
119 </xsl:element>
120
121 <!-- <xsl:apply-templates /> -->
122
123 </xsl:template>
124
125 <!-- This node passes through all attributes and childnodes rewriting the tagname only. -->
126 <xsl:template match="xupdate:element">
127 <xsl:comment> 3.a. vivify elements </xsl:comment>
128 <xsl:element name="xsl:element">
129 <xsl:copy-of select="@*"/>
130 <xsl:apply-templates />
131 </xsl:element>
132 </xsl:template>
133
134 <!-- This node passes through all attributes and childnodes rewriting the tagname only. -->
135 <xsl:template match="xupdate:attribute">
136 <xsl:comment> 3.b. vivify attributes </xsl:comment>
137 <xsl:element name="xsl:attribute">
138 <xsl:copy-of select="@*"/>
139 <xsl:apply-templates />
140 </xsl:element>
141 </xsl:template>
142
143 </xsl:stylesheet>
144

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed