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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations)
Tue May 6 14:33:31 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
Changes since 1.2: +22 -10 lines
File MIME type: text/xml
fixed last serious bugs (hopefully)

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

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