2011年5月3日火曜日

[XML VQG] 2. XSLT (10)

I gave up to follow the examples in the book one by one. So this example is the last one, and covers all the features regarding XSLT that explained in the chapter 2.

Here's the list of additional features.

  • xsl:sort

  • xsl:choose

  • xsl:template

  • xsl:apply-templates




$ cat vcard-rdf-sample.xml
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#">

<v:VCard rdf:about = "http://example.com/me/corky" >
<v:n>Corky Crystal</v:n>
<v:fn>Corky Crystal</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Corky</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Corky</v:sort-string>
<v:x-phonetic-first-name>Corky</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Crystal</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 5555 5555</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:corky@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>111 Lake Drive</v:street-address>
<v:locality>WonderCity</v:locality>
<v:postal-code>5555</v:postal-code>
<v:country-name>Australia</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/al" >
<v:n>Al Pacino</v:n>
<v:fn>Al Pacino</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Al</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Al</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pacino</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 6666 6666</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:al@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>301 West 57th Street, 16C</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10017</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/ethan" >
<v:n>Ethan Hawke</v:n>
<v:fn>Ethan Hawke</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Ethan</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Ethan</v:sort-string>
<v:x-phonetic-first-name>Ethan</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Hawke</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 7777 7777</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:ethan@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>c/o 1775 Broadway 701</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10019</v:postal-code>
<v:country-name>USA</v:country-name>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/brad" >
<v:n>Brad Pitt</v:n>
<v:fn>Brad Pitt</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Brad</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Brad</v:sort-string>
<v:x-phonetic-first-name>Brad</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pitt</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 8888 8888</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:brad@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>9150 Wilshire Boulevard Suite 350</v:street-address>
<v:locality>Beverly Hills</v:locality>
<v:region>California</v:region>
<v:postal-code>90212</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
</rdf:Description>
</v:adr>
</v:VCard>
</rdf:RDF>


$ cat xslt-sample.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>Addresses of VIP</title></head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1"><tr><th>Name</th><th>Country</th><th>Tel</th></tr>

<xsl:for-each select="rdf:RDF/v:VCard">
<xsl:sort select="v:sort-string" order="descending" data-type="text"/>
<tr><td>
<strong>
<a><xsl:attribute name="href">
<xsl:value-of select="v:email/@rdf:resource"/>
</xsl:attribute>
<xsl:value-of select="v:x-phonetic-first-name"/>
</a>
</strong><br/>(<em><xsl:value-of select="v:x-phonetic-last-name"/></em>)</td>
<td>
<xsl:value-of select="v:adr/rdf:Description/v:country-name"/>
<xsl:choose>
<xsl:when test="v:adr/rdf:Description/rdf:type[@rdf:resource='http://www.w3.org/2006/vcard/ns#Home']"> [Home]</xsl:when>
<xsl:when test="v:adr/rdf:Description/rdf:type[@rdf:resource='http://www.w3.org/2006/vcard/ns#Work']"> [Work]</xsl:when>
<xsl:otherwise> [Unknown]</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:value-of select="v:tel/rdf:Description/rdf:value"/>
<xsl:apply-templates select="v:tel/rdf:Description/rdf:type[@rdf:resource='http://www.w3.org/2006/vcard/ns#Home']"/>
</td>
</tr>
</xsl:for-each>

</table>
</body></html>
</xsl:template>

<xsl:template match="v:tel/rdf:Description/rdf:type[@rdf:resource='http://www.w3.org/2006/vcard/ns#Home']">
[Home]
</xsl:template>

</xsl:stylesheet>


$ java -cp ~/Dropbox/java/lib/saxon9he.jar net.sf.saxon.Transform -t -s:vcard-rdf-sample.xml -xsl:xslt-sample.xsl
Saxon-HE 9.3.0.4J from Saxonica
Java version 1.6.0_24
Warning: at xsl:stylesheet on line 5 column 17 of xslt-sample.xsl:
Running an XSLT 1 stylesheet with an XSLT 2 processor
Stylesheet compilation time: 392 milliseconds
Processing file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 5 milliseconds
Tree size: 273 nodes, 421 characters, 23 attributes
<html xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:v="http://www.w3.org/2006/vcard/ns#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Addresses of VIP</title>
</head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1">
<tr>
<th>Name</th>
<th>Country</th>
<th>Tel</th>
</tr>
<tr>
<td><strong><a href="mailto:ethan@example.com">Ethan</a></strong><br>(<em>Hawke</em>)
</td>
<td>USA [Unknown]</td>
<td>+61 7 7777 7777
[Home]

</td>
</tr>
<tr>
<td><strong><a href="mailto:corky@example.com">Corky</a></strong><br>(<em>Crystal</em>)
</td>
<td>Australia [Home]</td>
<td>+61 7 5555 5555
[Home]

</td>
</tr>
<tr>
<td><strong><a href="mailto:brad@example.com">Brad</a></strong><br>(<em>Pitt</em>)
</td>
<td>USA [Work]</td>
<td>+61 7 8888 8888</td>
</tr>
<tr>
<td><strong><a href="mailto:al@example.com">Al</a></strong><br>(<em>Pacino</em>)
</td>
<td>USA [Home]</td>
<td>+61 7 6666 6666</td>
</tr>
</table>
</body>
</html>Execution time: 83ms
Memory used: 4788984
NamePool contents: 49 entries in 47 chains. 8 prefixes, 8 URIs
$

2011年5月2日月曜日

[XML VQG] 2. XSLT (9)

Fourth example introduces xsl:if.


$ cat vcard-rdf-sample.xml
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#">

<v:VCard rdf:about = "http://example.com/me/corky" >
<v:n>Corky Crystal</v:n>
<v:fn>Corky Crystal</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Corky</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Corky</v:sort-string>
<v:x-phonetic-first-name>Corky</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Crystal</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 5555 5555</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:corky@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>111 Lake Drive</v:street-address>
<v:locality>WonderCity</v:locality>
<v:postal-code>5555</v:postal-code>
<v:country-name>Australia</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/al" >
<v:n>Al Pacino</v:n>
<v:fn>Al Pacino</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Al</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Al</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pacino</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 6666 6666</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:al@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>301 West 57th Street, 16C</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10017</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/ethan" >
<v:n>Ethan Hawke</v:n>
<v:fn>Ethan Hawke</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Ethan</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Ethan</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Hawke</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 7777 7777</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:ethan@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>c/o 1775 Broadway 701</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10019</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/brad" >
<v:n>Brad Pitt</v:n>
<v:fn>Brad Pitt</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Brad</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Brad</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pitt</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 8888 8888</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:brad@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>9150 Wilshire Boulevard Suite 350</v:street-address>
<v:locality>Beverly Hills</v:locality>
<v:region>California</v:region>
<v:postal-code>90212</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Work"/>
</rdf:Description>
</v:adr>
</v:VCard>
</rdf:RDF>


$ cat 02-17.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>Addresses of VIP</title></head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1"><tr><th>Name</th><th>Country</th><th>Tel</th></tr>

<xsl:for-each select="rdf:RDF/v:VCard">
<tr><td><strong><xsl:value-of select="v:x-phonetic-first-name"/></strong><br/>(<em><xsl:value-of select="v:x-phonetic-last-name"/></em>)</td>
<td>
<xsl:value-of select="v:adr/rdf:Description/v:country-name"/>
<xsl:if test="v:adr/rdf:Description/rdf:type[@rdf:resource!='http://www.w3.org/2006/vcard/ns#Home']">
[Not home]
</xsl:if>
</td>
<td>
<xsl:value-of select="v:tel/rdf:Description/rdf:value"/>
<xsl:if test="v:tel/rdf:Description/rdf:type[@rdf:resource='http://www.w3.org/2006/vcard/ns#Home']">
[Home]
</xsl:if>
</td>
</tr>
</xsl:for-each>

</table>
</body></html>
</xsl:template>
</xsl:stylesheet>


$ java -cp ~/Dropbox/java/lib/saxon9he.jar net.sf.saxon.Transform -t -s:vcard-rdf-sample.xml -xsl:02-17.xsl
Saxon-HE 9.3.0.4J from Saxonica
Java version 1.6.0_24
Warning: at xsl:stylesheet on line 5 column 17 of 02-17.xsl:
Running an XSLT 1 stylesheet with an XSLT 2 processor
Stylesheet compilation time: 365 milliseconds
Processing file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 5 milliseconds
Tree size: 276 nodes, 416 characters, 24 attributes
<html xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:v="http://www.w3.org/2006/vcard/ns#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Addresses of VIP</title>
</head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1">
<tr>
<th>Name</th>
<th>Country</th>
<th>Tel</th>
</tr>
<tr>
<td><strong>Corky</strong><br>(<em>Crystal</em>)
</td>
<td>Australia</td>
<td>+61 7 5555 5555
[Home]

</td>
</tr>
<tr>
<td><strong>Al</strong><br>(<em>Pacino</em>)
</td>
<td>USA</td>
<td>+61 7 6666 6666</td>
</tr>
<tr>
<td><strong>Ethan</strong><br>(<em>Hawke</em>)
</td>
<td>USA</td>
<td>+61 7 7777 7777
[Home]

</td>
</tr>
<tr>
<td><strong>Brad</strong><br>(<em>Pitt</em>)
</td>
<td>USA
[Not home]

</td>
<td>+61 7 8888 8888</td>
</tr>
</table>
</body>
</html>Execution time: 99ms
Memory used: 4916080
NamePool contents: 44 entries in 42 chains. 8 prefixes, 8 URIs
$

[XML VQG] 2. XSLT (8)

Oops. 'vCard RDF' specification doesn't contain elements that have both a value and an attribute simultaneously. So I couldn't create an XSLT style sheet that uses attribute selection mechanism. Any way, here's third example.


$ cat vcard-rdf-sample.xml
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#">

<v:VCard rdf:about = "http://example.com/me/corky" >
<v:n>Corky Crystal</v:n>
<v:fn>Corky Crystal</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Corky</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Corky</v:sort-string>
<v:x-phonetic-first-name>Corky</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Crystal</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 5555 5555</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:corky@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>111 Lake Drive</v:street-address>
<v:locality>WonderCity</v:locality>
<v:postal-code>5555</v:postal-code>
<v:country-name>Australia</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/al" >
<v:n>Al Pacino</v:n>
<v:fn>Al Pacino</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Al</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Al</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pacino</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 6666 6666</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:al@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>301 West 57th Street, 16C</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10017</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/ethan" >
<v:n>Ethan Hawke</v:n>
<v:fn>Ethan Hawke</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Ethan</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Ethan</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Hawke</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 7777 7777</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:ethan@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>c/o 1775 Broadway 701</v:street-address>
<v:locality>New York</v:locality>
<v:region>New York</v:region>
<v:postal-code>10019</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
<v:VCard rdf:about = "http://example.com/me/brad" >
<v:n>Brad Pitt</v:n>
<v:fn>Brad Pitt</v:fn>
<v:sound>
<rdf:Description>
<rdf:value>Brad</rdf:value>
<rdf:type rdf:resource="@@@X-irmc-n@@@"/>
</rdf:Description>
</v:sound>
<v:sort-string>Al</v:sort-string>
<v:x-phonetic-first-name>Brad</v:x-phonetic-first-name>
<v:x-phonetic-last-name>Pitt</v:x-phonetic-last-name>
<v:tel>
<rdf:Description>
<rdf:value>+61 7 8888 8888</rdf:value>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/>
</rdf:Description>
</v:tel>
<v:email rdf:resource="mailto:brad@example.com"/>
<v:adr>
<rdf:Description>
<v:street-address>9150 Wilshire Boulevard Suite 350</v:street-address>
<v:locality>Beverly Hills</v:locality>
<v:region>California</v:region>
<v:postal-code>90212</v:postal-code>
<v:country-name>USA</v:country-name>
<rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/>
</rdf:Description>
</v:adr>
</v:VCard>
</rdf:RDF>


$ cat 02-14.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:v="http://www.w3.org/2006/vcard/ns#"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>Addresses of VIP</title></head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1"><tr><th>Name</th><th>Country</th><th>Tel</th></tr>

<xsl:for-each select="rdf:RDF/v:VCard">
<tr><td><strong><xsl:value-of select="v:x-phonetic-first-name"/></strong><br/>(<em><xsl:value-of select="v:x-phonetic-last-name"/></em>)</td>
<td><xsl:value-of select="v:adr/rdf:Description/v:country-name"/></td>
<td><xsl:value-of select="v:tel/rdf:Description/rdf:value"/></td>
</tr>
</xsl:for-each>

</table>
</body></html>
</xsl:template>
</xsl:stylesheet>


$ java -cp ~/Dropbox/java/lib/saxon9he.jar net.sf.saxon.Transform -t -s:vcard-rdf-sample.xml -xsl:02-14.xsl
Saxon-HE 9.3.0.4J from Saxonica
Java version 1.6.0_24
Warning: at xsl:stylesheet on line 5 column 17 of 02-14.xsl:
Running an XSLT 1 stylesheet with an XSLT 2 processor
Stylesheet compilation time: 351 milliseconds
Processing file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/Volumes/Macintosh%20HD2/Dropbox/xml/vcard-rdf-sample.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 5 milliseconds
Tree size: 276 nodes, 416 characters, 24 attributes
<html xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:v="http://www.w3.org/2006/vcard/ns#">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Addresses of VIP</title>
</head>
<body>
<h1>Addresses of Five VIPs</h1>
<table border="1">
<tr>
<th>Name</th>
<th>Country</th>
<th>Tel</th>
</tr>
<tr>
<td><strong>Corky</strong><br>(<em>Crystal</em>)
</td>
<td>Australia</td>
<td>+61 7 5555 5555</td>
</tr>
<tr>
<td><strong>Al</strong><br>(<em>Pacino</em>)
</td>
<td>USA</td>
<td>+61 7 6666 6666</td>
</tr>
<tr>
<td><strong>Ethan</strong><br>(<em>Hawke</em>)
</td>
<td>USA</td>
<td>+61 7 7777 7777</td>
</tr>
<tr>
<td><strong>Brad</strong><br>(<em>Pitt</em>)
</td>
<td>USA</td>
<td>+61 7 8888 8888</td>
</tr>
</table>
</body>
</html>Execution time: 70ms
Memory used: 21770992
NamePool contents: 43 entries in 41 chains. 8 prefixes, 8 URIs
$

2011年5月1日日曜日

[XML VQG] 2. XSLT (7)

Second example.


$ cat 02-07.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>Address list of VIPs</title></head>
<body>
<p align="center"><img src="corky.jpg" width="120" height="171"/></p>
<p>Blah, blah.
</p>
</body>
</html>

</xsl:template>
</xsl:stylesheet>


$ java -cp ~/Dropbox/java/lib/saxon9he.jar net.sf.saxon.Transform -t -s:02-01.xml -xsl:02-07.xsl
Saxon-HE 9.3.0.4J from Saxonica
Java version 1.6.0_24
Warning: at xsl:stylesheet on line 2 column 80 of 02-07.xsl:
Running an XSLT 1 stylesheet with an XSLT 2 processor
Stylesheet compilation time: 278 milliseconds
Processing file:/Volumes/Macintosh%20HD2/Dropbox/xml/02-01.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/Volumes/Macintosh%20HD2/Dropbox/xml/02-01.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 6 milliseconds
Tree size: 70 nodes, 100 characters, 6 attributes
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Address list of VIPs</title>
</head>
<body>
<p align="center"><img src="corky.jpg" width="120" height="171"></p>
<p>Blah, blah.

</p>
</body>
</html>Execution time: 42ms
Memory used: 14636736
NamePool contents: 39 entries in 38 chains. 8 prefixes, 8 URIs


$