ruby-xslt 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ <!ELEMENT commentary (meta, body)>
2
+ <!ELEMENT meta (author, version, date, id, title, subtitle?)>
3
+
4
+ <!-- Metadata about the requirements -->
5
+ <!ENTITY % string "#PCDATA">
6
+ <!ENTITY % character "#PCDATA">
7
+ <!ENTITY % letter "#PCDATA">
8
+ <!ENTITY % number_att "CDATA">
9
+
10
+
11
+ <!ELEMENT author (first_name, last_name, email)>
12
+
13
+ <!ELEMENT first_name (%string;)>
14
+ <!ELEMENT last_name (%string;)>
15
+ <!ELEMENT email (%string;)>
16
+
17
+ <!ELEMENT version (#PCDATA)>
18
+ <!ELEMENT date (#PCDATA)>
19
+ <!ELEMENT id (#PCDATA)>
20
+ <!ELEMENT title (#PCDATA)>
21
+ <!ELEMENT subtitle (#PCDATA)>
22
+
23
+ <!ELEMENT body (para+)>
24
+
25
+
26
+ <!ELEMENT para (#PCDATA|thought|url|ol)*>
27
+ <!ATTLIST para
28
+ style (default|ps) "default">
29
+
30
+ <!ELEMENT ol (li+)>
31
+ <!ELEMENT li (#PCDATA)>
32
+ <!ELEMENT url (#PCDATA)>
33
+ <!ELEMENT thought (#PCDATA)>
34
+
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <xsl:stylesheet
4
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5
+ xmlns:src="http://xml.apache.org/xindice/Query"
6
+ xmlns:ex="http://test.none"
7
+ xsl:version="1.0">
8
+ <xsl:output
9
+ encoding="UTF-8"
10
+ indent="yes"
11
+ />
12
+
13
+ <xsl:variable name="number" select="1"/>
14
+ <xsl:variable name="string" select="'comment appelle-tu ça?'"/>
15
+ <xsl:variable name="bool" select="true()"/>
16
+ <xsl:variable name="nodes" select="nodes"/>
17
+
18
+ <xsl:template match="/">
19
+ <table>
20
+ <tr><th>value-of</th><th>ex:type()</th><th>ex:round-trip()</th></tr>
21
+ <tr>
22
+ <td><xsl:value-of select="$nodes"/></td>
23
+ <td><xsl:value-of select="ex:type($nodes)"/></td>
24
+ <td><xsl:apply-templates select="ex:round-trip($nodes)"/></td>
25
+ </tr>
26
+ <xsl:call-template name="row">
27
+ <xsl:with-param name="value" select="$number"/>
28
+ </xsl:call-template>
29
+ <xsl:call-template name="row">
30
+ <xsl:with-param name="value" select="$string"/>
31
+ </xsl:call-template>
32
+ <xsl:call-template name="row">
33
+ <xsl:with-param name="value" select="$bool"/>
34
+ </xsl:call-template>
35
+ </table>
36
+ </xsl:template>
37
+
38
+ <xsl:template name="row">
39
+ <xsl:param name="value"/>
40
+ <tr>
41
+ <td><xsl:value-of select="$value"/></td>
42
+ <td><xsl:value-of select="ex:type($value)"/></td>
43
+ <td><xsl:value-of select="ex:round-trip($value)"/></td>
44
+ </tr>
45
+ </xsl:template>
46
+
47
+ <xsl:template match="node">
48
+ <xsl:value-of select="."/>(<xsl:value-of select="@number"/>)&#10;
49
+ </xsl:template>
50
+
51
+ </xsl:stylesheet>
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require '../xslt'
4
+
5
+ xslt = XML::XSLT.new()
6
+ xslt.xmlfile = "fuzface.xml"
7
+ xslt.xslfile = "fuzface.xsl"
8
+
9
+ out = xslt.serve()
10
+ print out;
11
+
12
+ out = xslt.serve()
13
+ print out;
@@ -0,0 +1,154 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <?xml-stylesheet href="fuzface.xsl" type="text/xsl"?>
3
+
4
+ <!DOCTYPE commentary SYSTEM "commentary.dtd">
5
+
6
+ <commentary>
7
+ <meta>
8
+ <author>
9
+ <first_name>Sean</first_name>
10
+ <last_name>Chittenden</last_name>
11
+ <email>sean@chittenden.org</email>
12
+ </author>
13
+ <version>$Version$</version>
14
+ <date>$Date: 2005/11/07 07:42:28 $</date>
15
+ <id>$Id: fuzface.xml,v 1.1 2005/11/07 07:42:28 greg Exp $</id>
16
+ <title>Fuzface...</title>
17
+ <subtitle>The Internet's a big place and here's some proof...</subtitle>
18
+ </meta>
19
+
20
+ <body>
21
+ <para>
22
+ I think it's a tragedy that I'm going to start off my new
23
+ commentary by talking about facial hair and the Internet.
24
+ Something about that just screams pathetic, but whatever: it's
25
+ humor and that's life.
26
+ </para>
27
+
28
+ <para>
29
+ I've been working at home for a while now, which has been great.
30
+ I've been doing a lot of reading, good work, contributing to the
31
+ FreeBSD project, and living life at my own pace. The problem?
32
+ I don't have to interact with people, so I've let my appearance
33
+ slide a bit, most notably I've gone two weeks without shaving
34
+ and I have an awful hairy face.
35
+ </para>
36
+
37
+ <para>
38
+ Nothing is worse than going for a hard run, coming back, and
39
+ then bending your head down so that the hairs under your chin
40
+ touch the hairs on your neck. This has to be one of the most
41
+ disgusting/gross feelings I've experienced in a while. While
42
+ today wasn't the first time I'd experienced such a slimy tangled
43
+ mess, it is the first time I seriously considered shaving part
44
+ of my face, but not all of it: I was considering a beard.
45
+ </para>
46
+
47
+ <para>
48
+ Alright, so it's 5pm and I'm a sweaty post-run mess (it was 110
49
+ degrees in direct sunlight according to my thermometer) and
50
+ considering the possibility of growing a beard. Swifty nift?
51
+ Maybe. This is something I'd never done before, let alone
52
+ seriously consider. Normally I'd call my dad for such manly
53
+ advice, but he is: a) normally in another state, and; b) in
54
+ another country right now probably growing a beard (he's
55
+ notorious for coming back from a trip with a gnarly unshaven
56
+ face, sometimes he'll shape it into a decent beard). So, what's
57
+ a tech-junkie to do? Hop on the Internet and see if Google's
58
+ able to provide me with some inspiration.
59
+ </para>
60
+
61
+ <para>
62
+ Sure enough, I typed in "pictures of bearded men" and I was able
63
+ to find something: 14,000 pages of something to be exact.
64
+ Anyway, so most of these were rinky dink sites, a few of them
65
+ had some promise. One guy was trying to start a tradition where
66
+ everyone grows a beard for New Years. As I was scrolling down
67
+ the page trying to find some pictures, my mind was having the
68
+ following thought process: <thought>This seems like a dumb
69
+ idea... New Years provides a perfectly good excuse to kiss some
70
+ total stranger that you've had your eye on for the duration of a
71
+ New Years party. Why waste such an opportunity with a crappy
72
+ kiss?</thought> And at about this point I said this page sucks,
73
+ and flipped back to my search results.
74
+ </para>
75
+
76
+ <para>
77
+ Since I'd never done this before, I didn't know what was
78
+ fashionably correct in terms of where a guy should shave under
79
+ his neck, or what the deal was... I knew there were lots of
80
+ styles out there, just none that I could picture in my mind
81
+ (save maybe Santa Claus and a few really gnarly beards that are
82
+ long enough to be used as full-body covering. Oooh! And don't
83
+ forget the Russian and Amish beards, those stand out in my mind
84
+ too.). Google, being pretty comprehensive, and the Internet
85
+ being huge, found the exact screwball page I was looking for:
86
+ <url>http://fuzface-gallery.tripod.com/</url>
87
+ </para>
88
+
89
+ <para>
90
+ I don't know if I really should be amazed at the sheer number of
91
+ entries that Google returned, or that the Internet is big enough
92
+ to house such random gallery of crap, but it is and it never
93
+ ceases to amaze me... it's almost as amazing as the fact that
94
+ some bozo spent the time to create such a page. Don't people
95
+ have lives? Oh wait, I just visited his page... so back to my
96
+ diatribe...
97
+ </para>
98
+
99
+ <para>
100
+ There were tons of faces, lots of men, lots of hair, and plenty
101
+ of styles to choose from. Page after page of faces and hair.
102
+ Ugh. This wasn't getting any where and I was now entertaining
103
+ the rebound though of shaving my head. Time to close my browser
104
+ and hop in the shower: I reak. So what'd I do? Well, after
105
+ looking through enough of those pictures, I decided a few
106
+ things:
107
+ </para>
108
+
109
+ <para>
110
+ <ol>
111
+ <li>
112
+ I'm amazed that the Internet is big enough to foster the
113
+ creation of such random and utterly useless information. Then
114
+ again, I've been on and using the Net since '95, so this
115
+ shouldn't surprise me that much.
116
+ </li>
117
+
118
+ <li>
119
+ There are a lot of guys out there with varying tastes in,
120
+ shall we say, "facial hair styles," most of which I find
121
+ pretty unappealing.
122
+ </li>
123
+
124
+ <li>
125
+ I don't like beards. After one clogged drain, two
126
+ reapplications of shaving cream, and a few pases with the
127
+ razor, it took me about 5-10 minutes to get a nice cleanly
128
+ shaven face.
129
+ </li>
130
+
131
+ <li>
132
+ &lt;crass comment&gt;And - back me up here fellas, you can
133
+ sympathize with this feeling after you get done looking
134
+ through a magazine for a hair-cut style (ladies.. just smile
135
+ and nod and pretend you care) - after looking at a few dozen
136
+ pictures of men, I was able to safely reaffirm my desire for
137
+ heterosexual relations (translation from Bill Clintonese: have
138
+ sex with a woman). And with that thought in mind, I began to
139
+ pine for the college porn collection of old. Mmmm,
140
+ Playboy.&lt;/crass comment&gt;
141
+ </li>
142
+ </ol>
143
+ </para>
144
+
145
+ <para>
146
+ ::grin:: Until next time. -Sean
147
+ </para>
148
+
149
+ <para style="ps">
150
+ P.S. To the guys out there with beards, this is just my
151
+ opinion: take it with a grain of salt.
152
+ </para>
153
+ </body>
154
+ </commentary>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" ?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+ <xsl:include href="ramblings.xsl" />
4
+ </xsl:stylesheet>
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/ruby -w
2
+ require 'rexml/document'
3
+ require '../xslt'
4
+
5
+ xslt = XML::XSLT.new()
6
+
7
+ xslt.xml = REXML::Document.new File.open( "fuzface.xml" )
8
+ xslt.xsl = REXML::Document.new File.open( "fuzface.xsl" )
9
+
10
+ out = xslt.serve()
11
+ puts out
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require 'xml/smart'
4
+ require '../xslt'
5
+
6
+ xslt = XML::XSLT.new()
7
+
8
+ xslt.xml = XML::Smart.open( "fuzface.xml" )
9
+ xslt.xsl = XML::Smart.open( "fuzface.xsl" )
10
+
11
+ out = xslt.serve()
12
+ puts out
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require '../xslt'
4
+
5
+ xslt = XML::XSLT.new()
6
+ xslt.xml = IO::readlines( "fuzface.xml" ).join
7
+ xslt.xsl = IO::readlines( "fuzface.xsl" ).join
8
+
9
+ out = xslt.serve()
10
+ print out;
11
+
12
+ out = xslt.serve()
13
+ print out;
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require '../xslt'
4
+
5
+ xslt = XML::XSLT.new()
6
+
7
+ print "\n-------------------------------------------------\n"
8
+ print "ERROR #1 : XML XSL inverse\n"
9
+ begin
10
+ xslt.xsl = IO::readlines( "fuzface.xml" ).join( )
11
+ rescue => e
12
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
13
+ p XML::XSLT::errors
14
+ end
15
+
16
+ begin
17
+ xslt.xml = IO::readlines( "fuzface.xsl" ).join( )
18
+ rescue => e
19
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
20
+ p XML::XSLT::errors
21
+ end
22
+
23
+ begin
24
+ out = xslt.serve()
25
+ rescue => e
26
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
27
+ p XML::XSLT::errors
28
+ end
29
+
30
+ print "\n-------------------------------------------------\n"
31
+ print "ERROR #2 : XSL error\n"
32
+ begin
33
+ xslt.xml = IO::readlines( "fuzface.xml" ).join( )
34
+ rescue => e
35
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
36
+ p XML::XSLT::errors
37
+ end
38
+
39
+ begin
40
+ xslt.xsl = "totototototot"
41
+ rescue => e
42
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
43
+ p XML::XSLT::errors
44
+ end
45
+
46
+ begin
47
+ out = xslt.serve()
48
+ rescue => e
49
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
50
+ p XML::XSLT::errors
51
+ end
52
+
53
+ print "\n-------------------------------------------------\n"
54
+ print "ERROR #3 : XML error\n"
55
+ begin
56
+ xslt.xml = "totototototot"
57
+ rescue => e
58
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
59
+ p XML::XSLT::errors
60
+ end
61
+
62
+ begin
63
+ xslt.xsl = IO::readlines( "fuzface.xsl" ).join( )
64
+ rescue => e
65
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
66
+ p XML::XSLT::errors
67
+ end
68
+
69
+ begin
70
+ out = xslt.serve()
71
+ rescue => e
72
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
73
+ p XML::XSLT::errors
74
+ end
75
+
76
+ print "\n-------------------------------------------------\n"
77
+ print "SUCCESS !\n"
78
+ xslt.xml = IO::readlines( "fuzface.xml" ).join( )
79
+ xslt.xsl = IO::readlines( "fuzface.xsl" ).join( )
80
+ begin
81
+ out = xslt.serve()
82
+ rescue => e
83
+ print "Error trapped by ", e.class, " : ", e.message, "\n"
84
+ p XML::XSLT::errors
85
+ end
86
+
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require '../xslt'
4
+
5
+ xslt = XML::XSLT.new()
6
+ xslt.xsl = "fuzface.xsl"
7
+
8
+ print xslt.xsl_to_s;
9
+ puts
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby
2
+ require "../xslt"
3
+
4
+ print "MAX_DEPTH = ", XML::XSLT::MAX_DEPTH, "\n"
5
+ print "MAX_SORT = ", XML::XSLT::MAX_SORT, "\n"
6
+ print "ENGINE_VERSION = ", XML::XSLT::ENGINE_VERSION, "\n"
7
+ print "LIBXSLT_VERSION = ", XML::XSLT::LIBXSLT_VERSION, "\n"
8
+ print "LIBXML_VERSION = ", XML::XSLT::LIBXML_VERSION, "\n"
9
+ print "XSLT_NAMESPACE = ", XML::XSLT::XSLT_NAMESPACE, "\n"
10
+ print "DEFAULT_VENDOR = ", XML::XSLT::DEFAULT_VENDOR, "\n"
11
+ print "DEFAULT_VERSION = ", XML::XSLT::DEFAULT_VERSION, "\n"
12
+ print "DEFAULT_URL = ", XML::XSLT::DEFAULT_URL, "\n"
13
+ print "NAMESPACE_LIBXSLT = ", XML::XSLT::NAMESPACE_LIBXSLT, "\n"
14
+ print "NAMESPACE_NORM_SAXON = ", XML::XSLT::NAMESPACE_NORM_SAXON, "\n"
15
+ print "NAMESPACE_SAXON = ", XML::XSLT::NAMESPACE_SAXON, "\n"
16
+ print "NAMESPACE_XT = ", XML::XSLT::NAMESPACE_XT, "\n"
17
+ print "NAMESPACE_XALAN = ", XML::XSLT::NAMESPACE_XALAN, "\n"
18
+
19
+ print "RUBY_XSLT_VERSION = ", XML::XSLT::RUBY_XSLT_VERSION, "\n"
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" ?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
3
+ <xsl:template match="/">
4
+ <xsl:element name="html">
5
+ <xsl:element name="head">
6
+ <xsl:element name="title">Ramblings - <xsl:value-of select="commentary/meta/title" /> - <xsl:value-of select="commentary/meta/subtitle" /></xsl:element>
7
+ </xsl:element>
8
+
9
+ <xsl:element name="body">
10
+ <xsl:element name="h1"><xsl:value-of select="commentary/meta/title" /></xsl:element>
11
+ <xsl:element name="h3"><xsl:value-of select="commentary/meta/subtitle" /></xsl:element>
12
+ By: <xsl:value-of select="commentary/meta/author/first_name" /> <xsl:value-of select="commentary/meta/author/last_name" /><xsl:element name="br" />
13
+ Date: <xsl:value-of select="commentary/meta/date" /><xsl:element name="br" />
14
+
15
+ <xsl:for-each select="./commentary/body">
16
+ <xsl:apply-templates />
17
+ </xsl:for-each>
18
+
19
+ </xsl:element>
20
+ </xsl:element>
21
+ </xsl:template>
22
+
23
+ <xsl:template match="para">
24
+ <xsl:element name="p">
25
+ <xsl:apply-templates />
26
+ </xsl:element>
27
+ </xsl:template>
28
+
29
+ <xsl:template match="ol">
30
+ <xsl:element name="ol">
31
+ <xsl:apply-templates select="li" />
32
+ </xsl:element>
33
+ </xsl:template>
34
+
35
+ <xsl:template match="li">
36
+ <xsl:element name="li">
37
+ <xsl:value-of select="." />
38
+ </xsl:element>
39
+ </xsl:template>
40
+
41
+ <xsl:template match="thought">
42
+ <xsl:element name="i">
43
+ <xsl:value-of select="." />
44
+ </xsl:element>
45
+ </xsl:template>
46
+ </xsl:stylesheet>