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
$

0 件のコメント: