implementing a urlresolver for xsl so that we can include documents properly using the document function.

updates to press release xsds - it's now basically working.



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3926 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Ariel Backenroth
2006-09-25 22:15:14 +00:00
parent 1c87282333
commit 3dcbd24150
12 changed files with 280 additions and 160 deletions

View File

@@ -27,6 +27,7 @@ import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.web.bean.wcm.AVMConstants;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@@ -39,8 +40,6 @@ import org.w3c.dom.Document;
public class OutputUtil public class OutputUtil
{ {
private static final Log LOGGER = LogFactory.getLog(OutputUtil.class); private static final Log LOGGER = LogFactory.getLog(OutputUtil.class);
private static final String PARENT_AVM_PATH =
"repo-1:/repo-1/alice/appBase/avm_webapps/ROOT";
private static String stripExtension(String s) private static String stripExtension(String s)
{ {
@@ -64,6 +63,9 @@ public class OutputUtil
OutputStream fileOut = avmService.createFile(parentPath, generatedFileName); OutputStream fileOut = avmService.createFile(parentPath, generatedFileName);
String fullAvmPath = parentPath + '/' + generatedFileName; String fullAvmPath = parentPath + '/' + generatedFileName;
String avmStore = parentPath.substring(0, parentPath.indexOf(":/"));
String sandBoxUrl = AVMConstants.buildAVMStoreUrl(avmStore);
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
LOGGER.debug("Created file node for file: " + LOGGER.debug("Created file node for file: " +
@@ -71,7 +73,7 @@ public class OutputUtil
TemplateOutputMethod tom = tt.getOutputMethods().get(0); TemplateOutputMethod tom = tt.getOutputMethods().get(0);
OutputStreamWriter out = new OutputStreamWriter(fileOut); OutputStreamWriter out = new OutputStreamWriter(fileOut);
tom.generate(xml, tt, out); tom.generate(xml, tt, sandBoxUrl, out);
out.close(); out.close();
NodeRef outputNodeRef = AVMNodeConverter.ToNodeRef(-1, fullAvmPath); NodeRef outputNodeRef = AVMNodeConverter.ToNodeRef(-1, fullAvmPath);
@@ -117,10 +119,14 @@ public class OutputUtil
String generatedFileName = (String) String generatedFileName = (String)
nodeService.getProperty(generatedNodeRef, nodeService.getProperty(generatedNodeRef,
ContentModel.PROP_NAME); ContentModel.PROP_NAME);
String avmPath = (String)AVMNodeConverter.ToAVMVersionPath(nodeRef)[1];
String avmStore = avmPath.substring(0, avmPath.indexOf(":/"));
String sandBoxUrl = AVMConstants.buildAVMStoreUrl(avmStore);
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
LOGGER.debug("regenerating file node for : " + fileName + " (" + LOGGER.debug("regenerating file node for : " + fileName + " (" +
nodeRef.toString() + ") to " + generatedNodeRef.toString()); nodeRef.toString() + ") to " + generatedNodeRef.toString());
// get a writer for the content and put the file // get a writer for the content and put the file
ContentWriter writer = contentService.getWriter(generatedNodeRef, ContentWriter writer = contentService.getWriter(generatedNodeRef,
@@ -132,7 +138,7 @@ public class OutputUtil
// put a loop to generate all output methods // put a loop to generate all output methods
TemplateOutputMethod tom = tt.getOutputMethods().get(0); TemplateOutputMethod tom = tt.getOutputMethods().get(0);
OutputStreamWriter out = new OutputStreamWriter(writer.getContentOutputStream()); OutputStreamWriter out = new OutputStreamWriter(writer.getContentOutputStream());
tom.generate(xml, tt, out); tom.generate(xml, tt, sandBoxUrl, out);
out.close(); out.close();
LOGGER.debug("generated " + fileName + " using " + tom); LOGGER.debug("generated " + fileName + " using " + tom);

View File

@@ -32,10 +32,12 @@ public interface TemplateOutputMethod
* *
* @param xmlContent the xml content to serialize * @param xmlContent the xml content to serialize
* @param tt the template type that collected the xml content. * @param tt the template type that collected the xml content.
* @param sandBoxUrl the url of the current sandbox
* @param out the writer to serialize to. * @param out the writer to serialize to.
*/ */
public void generate(final Document xmlContent, public void generate(final Document xmlContent,
final TemplateType tt, final TemplateType tt,
final String sandBoxUrl,
final Writer out) final Writer out)
throws Exception; throws Exception;
} }

View File

@@ -33,6 +33,7 @@ public class FreeMarkerOutputMethod
public void generate(final Document xmlContent, public void generate(final Document xmlContent,
final TemplateType tt, final TemplateType tt,
final String sandBoxUrl,
final Writer out) final Writer out)
{ {
} }

View File

@@ -17,6 +17,8 @@
package org.alfresco.web.templating.xforms; package org.alfresco.web.templating.xforms;
import java.io.*; import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import org.alfresco.web.templating.*; import org.alfresco.web.templating.*;
import org.chiba.xml.util.DOMUtil; import org.chiba.xml.util.DOMUtil;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
@@ -30,7 +32,10 @@ import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource; import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -41,6 +46,8 @@ public class XSLTOutputMethod
implements TemplateOutputMethod implements TemplateOutputMethod
{ {
private static final Log LOGGER = LogFactory.getLog(XSLTOutputMethod.class);
private final NodeRef nodeRef; private final NodeRef nodeRef;
public XSLTOutputMethod(final NodeRef nodeRef) public XSLTOutputMethod(final NodeRef nodeRef)
@@ -50,6 +57,7 @@ public class XSLTOutputMethod
public void generate(final Document xmlContent, public void generate(final Document xmlContent,
final TemplateType tt, final TemplateType tt,
final String sandBoxUrl,
final Writer out) final Writer out)
throws ParserConfigurationException, throws ParserConfigurationException,
TransformerConfigurationException, TransformerConfigurationException,
@@ -58,11 +66,49 @@ public class XSLTOutputMethod
IOException IOException
{ {
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
TemplatingService ts = TemplatingService.getInstance(); final TemplatingService ts = TemplatingService.getInstance();
DOMSource source = new DOMSource(ts.parseXML(this.nodeRef)); DOMSource source = new DOMSource(ts.parseXML(this.nodeRef));
final Templates templates = tf.newTemplates(source); final Templates templates = tf.newTemplates(source);
final Transformer t = templates.newTransformer(); final Transformer t = templates.newTransformer();
t.setURIResolver(new URIResolver()
{
public Source resolve(final String href, final String base)
throws TransformerException
{
URI uri = null;
try
{
uri = new URI(sandBoxUrl + href);
}
catch (URISyntaxException e)
{
throw new TransformerException("unable to create uri " + sandBoxUrl + href, e);
}
try
{
LOGGER.debug("loading " + uri);
final Document d = ts.parseXML(uri.toURL().openStream());
LOGGER.debug("loaded " + ts.writeXMLToString(d));
return new DOMSource(d);
}
catch (Exception e)
{
LOGGER.warn(e);
throw new TransformerException("unable to load " + uri, e);
}
}
});
t.setParameter("avm_store_url", sandBoxUrl);
LOGGER.debug("setting parameter avm_store_url=" + sandBoxUrl);
final StreamResult result = new StreamResult(out); final StreamResult result = new StreamResult(out);
t.transform(new DOMSource(xmlContent), result); try
{
t.transform(new DOMSource(xmlContent), result);
}
catch (TransformerException e)
{
LOGGER.error(e.getMessageAndLocation());
throw e;
}
} }
} }

View File

@@ -0,0 +1,36 @@
<!-- Footer -->
<div id="footer">
<div id="site">
<div id="footer-logos">
<a href="http://www.mysql.com/"><img src="/assets/images/footer/mysql.gif" alt="MySQL" title="MySQL" border="0" /></a>
<a href="http://www.jboss.org"><img src="/assets/images/footer/jboss.gif" alt="JBoss Certified Partner" title="JBoss Certified Partner" border="0" width="74" height="34" /></a>
<a href="http://www.springframework.org/"><img src="/assets/images/footer/spring.gif" alt="Spring Framework" title="Spring Framework" border="0" width="67" height="34" /></a>
<a href="http://www.hibernate.org/"><img src="/assets/images/footer/hibernate.gif" alt="Hibernate" title="Hibernate" border="0" width="111" height="34" /></a>
<a href="http://tomcat.apache.org"><img src="/assets/images/footer/tomcat.gif" alt="Tomcat" title="Tomcat" border="0" width="44" height="34" /></a>
<a href="http://lucene.apache.org/"><img src="/assets/images/footer/lucene.gif" alt="Lucene" title="Lucene" border="0" width="143" height="34" /></a>
<a href="http://myfaces.apache.org/"><img src="/assets/images/footer/myfaces.gif" alt="My Faces" title="My Faces" border="0" width="37" height="34" /></a>
</div>
<div id="footer-links">
<p>
<a href="/">Home</a> |
<a href="/legal/">Legal</a> |
<a href="/privacy/">Privacy</a> |
<a href="/accessibility/">Accessibility</a> |
<a href="/sitemap/">Site Map</a> |
<a href="/rss/?feed=all/">RSS</a>
<img src="/assets/images/icons/feedicon12.gif" alt="RSS" title="RSS" width="12" height="12" />
</p>
<p>
<a href="/about/">Open Source ECMS</a> |
<a href="/products/">CMS Products</a> |
<a href="/services/support/">Management Services</a> |
<a href="/resources/">EMS Resources</a>
</p>
<p>&#169; 2005-2006 Alfresco Software, Inc., All Rights Reserved</p>
<p><img src="/assets/images/icons/powered_by_alfresco.gif" alt="Powered by Alfresco" width="88" height="32" /></p>
</div>
</div>
<div style="clear:both; padding-bottom: 10px;"></div>
</div>
<div style="clear:both; padding-bottom: 20px;"></div>
<!-- End Footer -->

View File

@@ -0,0 +1,40 @@
<div id="masthead">
<!-- Search -->
<div id="top_links">
<ul>
<li><a href="/accessibility/">Accessibility</a> |</li>
<li><a href="/sitemap/">Site Map</a> |</li>
<li><a href="/about/contact/">Contact Us</a> |</li>
<li><a href="/store/">Store</a> |</li>
<li><a href="/rss/?feed=all">RSS</a> <img src="/assets/images/icons/feedicon10.gif" alt="RSS" title="RSS" width="10" height="10" /></li>
</ul>
<form action="http://www.google.com/search" method="get"><br />
<input type="hidden" name="sitesearch" value="www.alfresco.com" />
<input type="hidden" name="ie" value="UTF-8" />
<input type="hidden" name="oe" value="UTF-8" />
<input class="searchbox" type="text" size="20" value="Search..." name="query" onfocus="if (this.value == 'Search...') this.value = ''; " onblur="if (this.value == '') this.value = 'Search...';" />
<input class="searchbutton" type="submit" name="" value="Go" />
</form>
</div>
<!-- End Search -->
</div>
<div id="topnav">
<ul id="nav">
<li id="home"><a href="/" accesskey="h" ><span>Home</span></a></li>
<li id="products"><a href="/products/" accesskey="p" ><span>Products</span></a></li>
<li id="services"><a href="/services/support/" accesskey="s" ><span>Services</span></a></li>
<li id="customers"><a href="/customers/" accesskey="c" ><span>Customers</span></a></li>
<li id="partners"><a href="/partners/" accesskey="r" ><span>Partners</span></a></li>
<li id="about"><a href="/about/" accesskey="a" class="selected" ><span>About us</span></a></li>
<li id="developers"><a href="http://dev.alfresco.com/" accesskey="v" ><span>Developers</span></a></li>
<li id="blogs"><a href="http://blogs.alfresco.com/" accesskey="b" ><span>Blogs</span></a></li>
<li id="end"></li>
</ul>
</div>
<div id="outer">
<div id="inner">
<div id="sabout">
<p><a href="/about/">Company</a>&#160;&#160;|&#160;&#160;<a href="/about/contact/">Contact</a>&#160;&#160;|&#160;&#160;<a href="/about/news/">News</a>&#160;&#160;|&#160;&#160;<a href="/about/events/">Events</a>&#160;&#160;|&#160;&#160;<a href="/about/people/">People</a></p>
</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0"?>
<alfresco:about-blurb xmlns:alfresco="http://www.alfresco.org/alfresco">
<alfresco:name>Activiti</alfresco:name>
<alfresco:body>Alfresco used to be called Activiti. See About Alfresco.</alfresco:body>
</alfresco:about-blurb>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:alfresco="http://www.alfresco.org/alfresco" xmlns:alfresco="http://www.alfresco.org/alfresco"
targetNamespace="http://www.alfresco.org/aflresco" targetNamespace="http://www.alfresco.org/alfresco"
elementFormDefault="qualified"> elementFormDefault="qualified">
<xs:element name="about-blurb"> <xs:element name="about-blurb">
<xs:complexType> <xs:complexType>

View File

@@ -4,18 +4,12 @@
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:alfresco="http://www.alfresco.org/alfresco" xmlns:alfresco="http://www.alfresco.org/alfresco"
exclude-result-prefixes="xhtml"> exclude-result-prefixes="xhtml">
<!--
<xsl:character-map name="htmlentities">
<xsl:output-character character="&#160;" string="&amp;nbsp;" />
<xsl:output-character character="&#8212;" string="&amp;mdash;" />
<xsl:output-character character="&#169;" string="&amp;copy;" />
</xsl:character-map>
-->
<xsl:output method="html" version="4.01" encoding="UTF-8" indent="yes" <xsl:output method="html" version="4.01" encoding="UTF-8" indent="yes"
use-character-maps="htmlentities"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:preserve-space elements="*"/> <xsl:preserve-space elements="*"/>
<xsl:template match="/"> <xsl:template match="/">
this template produces no output. the xml is used by press-release.xsl
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:alfresco="http://www.alfresco.org/alfresco" xmlns:alfresco="http://www.alfresco.org/alfresco"
targetNamespace="http://www.alfresco.org/aflresco" targetNamespace="http://www.alfresco.org/alfresco"
elementFormDefault="qualified"> elementFormDefault="qualified">
<xs:simpleType name="category"> <xs:simpleType name="category">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -14,6 +14,7 @@
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="about-blurb"> <xs:simpleType name="about-blurb">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
<xs:enumeration value="Activiti"/>
<xs:enumeration value="Alfresco"/> <xs:enumeration value="Alfresco"/>
<xs:enumeration value="Kofax"/> <xs:enumeration value="Kofax"/>
<xs:enumeration value="Aarden Ringcroft"/> <xs:enumeration value="Aarden Ringcroft"/>

View File

@@ -1,153 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0"
xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:alfresco="http://www.alfresco.org/alfresco" xmlns:alfresco="http://www.alfresco.org/alfresco"
exclude-result-prefixes="xhtml"> exclude-result-prefixes="xhtml">
<!-- <xsl:output method="html" encoding="UTF-8" indent="yes"
<xsl:character-map name="htmlentities">
<xsl:output-character character="&#160;" string="&amp;nbsp;" />
<xsl:output-character character="&#8212;" string="&amp;mdash;" />
<xsl:output-character character="&#169;" string="&amp;copy;" />
</xsl:character-map>
-->
<xsl:output method="html" version="4.01" encoding="UTF-8" indent="yes"
use-character-maps="htmlentities"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:preserve-space elements="*"/>
<xsl:template match="/"> <xsl:preserve-space elements="*"/>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <xsl:param name="avm_store_url" select="'not_specified'"/>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><xsl:value-of select="/alfresco:press-release/alfresco:title"/></title>
<meta name="description" lang="en">
<xsl:attribute name="content">
<xsl:value-of select="/alfresco:press-release/alfresco:abstract"/>
</xsl:attribute>
</meta>
<link href="/assets/css/screen.css" rel="stylesheet" type="text/css" media="screen" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.nooked.com/news/feed/alfresco" />
<style type="text/css">
p.leader {
font-weight: 700;
}
</style>
</head>
<body>
<script language="JavaScript" type="text/javascript" src="/assets/js/controls.js"></script>
<script language="JavaScript" type="text/javascript" src="/assets/js/search.js" ></script>
<div id="container">
<div id="masthead">
<!-- Search -->
<div id="top_links">
<ul>
<li><a href="/accessibility/">Accessibility</a> |</li>
<li><a href="/sitemap/">Site Map</a> |</li>
<li><a href="/about/contact/">Contact Us</a> |</li>
<li><a href="/store/">Store</a> |</li>
<li><a href="/rss/?feed=all">RSS</a> <img src="/assets/images/icons/feedicon10.gif" alt="RSS" title="RSS" width="10" height="10" /></li>
</ul>
<form action="http://www.google.com/search" method="get"><br />
<input type="hidden" name="sitesearch" value="www.alfresco.com" />
<input type="hidden" name="ie" value="UTF-8" />
<input type="hidden" name="oe" value="UTF-8" />
<input class="searchbox" type="text" size="20" value="Search..." name="query" onfocus="if (this.value == 'Search...') this.value = ''; " onblur="if (this.value == '') this.value = 'Search...';" />
<input class="searchbutton" type="submit" name="" value="Go" />
</form>
</div>
<!-- End Search -->
</div>
<div id="topnav">
<ul id="nav">
<li id="home"><a href="/" accesskey="h" ><span>Home</span></a></li>
<li id="products"><a href="/products/" accesskey="p" ><span>Products</span></a></li>
<li id="services"><a href="/services/support/" accesskey="s" ><span>Services</span></a></li>
<li id="customers"><a href="/customers/" accesskey="c" ><span>Customers</span></a></li>
<li id="partners"><a href="/partners/" accesskey="r" ><span>Partners</span></a></li>
<li id="about"><a href="/about/" accesskey="a" class="selected" ><span>About us</span></a></li>
<li id="developers"><a href="http://dev.alfresco.com/" accesskey="v" ><span>Developers</span></a></li>
<li id="blogs"><a href="http://blogs.alfresco.com/" accesskey="b" ><span>Blogs</span></a></li>
<li id="end"></li>
</ul>
</div>
<div id="outer">
<div id="inner">
<div id="sabout">
<p><a href="/about/">Company</a>&#160;&#160;|&#160;&#160;<a href="/about/contact/">Contact</a>&#160;&#160;|&#160;&#160;<a href="/about/news/">News</a>&#160;&#160;|&#160;&#160;<a href="/about/events/">Events</a>&#160;&#160;|&#160;&#160;<a href="/about/people/">People</a></p>
</div>
</div>
</div>
<div id="content"></div>
<!-- Main Content -->
<div id="main_content">
<!-- BEGIN MAIN CONTENT --> <xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><xsl:value-of select="/alfresco:press-release/alfresco:title"/></title>
<meta name="description" lang="en" >
<xsl:attribute name="content"><xsl:value-of select="/alfresco:press-release/alfresco:title"/></xsl:attribute>
</meta>
<link href="/assets/css/screen.css" rel="stylesheet" type="text/css" media="screen"></link>
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.nooked.com/news/feed/alfresco"></link>
<style type="text/css">
p.leader {
font-weight: 700;
}
</style>
</head>
<body>
<script language="JavaScript" type="text/javascript" src="/assets/js/controls.js"></script>
<script language="JavaScript" type="text/javascript" src="/assets/js/search.js" ></script>
<h1><xsl:value-of select="/alfresco:press-release/alfresco:title"/></h1> <div id="container">
<p><strong><xsl:value-of select="/alfresco:press-release/alfresco:abstract"/></strong></p> <div id="masthead">
<p><xsl:value-of select="/alfresco:press-release/alfresco:location"/>&#8212;<xsl:value-of select="/alfresco:press-release/alfresco:launch_date"/>&#8212;</p> <!-- Search -->
<xsl:for-each select="/alfresco:press-release/alfresco:body"> <div id="top_links">
<p><xsl:value-of select="."/></p> <ul>
</xsl:for-each> <li><a href="/accessibility/">Accessibility</a> |</li>
<xsl:for-each select="/alfresco:press-release/alfresco:include_about_blurb"> <li><a href="/sitemap/">Site Map</a> |</li>
<xsl:variable name="blurb-id"><xsl:value-of select="."/></xsl:variable> <li><a href="/about/contact/">Contact Us</a> |</li>
<h2><xsl:value-of select="document(concat($blurb-id, '.xml'))/alfresco:about-blurb/alfresco:name"/></h2> <li><a href="/store/">Store</a> |</li>
<xsl:for-each select="document(concat($blurb-id, '.xml'))/alfresco:about-blurb/alfresco:body"> <li><a href="/rss/?feed=all">RSS</a> <img src="/assets/images/icons/feedicon10.gif" alt="RSS" title="RSS" width="10" height="10" /></li>
<p><xsl:value-of select="."/></p> </ul>
</xsl:for-each> <form action="http://www.google.com/search" method="get"><br />
</xsl:for-each> <input type="hidden" name="sitesearch" value="www.alfresco.com" />
<xsl:if test="/alfresco:press-release/alfresco:include_media_contacts = true"> <input type="hidden" name="ie" value="UTF-8" />
<h2>Media Contacts</h2> <input type="hidden" name="oe" value="UTF-8" />
<div><p>John Newton<br />Alfresco Software Inc.<br />+44 1628 860639<br />press@alfresco.com</p></div> <input class="searchbox" type="text" size="20" value="Search..." name="query" onfocus="if (this.value == 'Search...') this.value = ''; " onblur="if (this.value == '') this.value = 'Search...';" />
<div><p>Chuck Tanowitz<br />Schwartz Communications<br />+1 781 684-0770<br />alfresco@schwartz-pr.com</p></div> <input class="searchbutton" type="submit" name="" value="Go" />
</xsl:if> </form>
<!-- END MAIN CONTENT --> </div>
<!-- End Search -->
</div>
<div id="topnav">
<ul id="nav">
<li id="home"><a href="/" accesskey="h" ><span>Home</span></a></li>
<li id="products"><a href="/products/" accesskey="p" ><span>Products</span></a></li>
<li id="services"><a href="/services/support/" accesskey="s" ><span>Services</span></a></li>
<li id="customers"><a href="/customers/" accesskey="c" ><span>Customers</span></a></li>
<li id="partners"><a href="/partners/" accesskey="r" ><span>Partners</span></a></li>
<li id="about"><a href="/about/" accesskey="a" class="selected" ><span>About us</span></a></li>
<li id="developers"><a href="http://dev.alfresco.com/" accesskey="v" ><span>Developers</span></a></li>
<li id="blogs"><a href="http://blogs.alfresco.com/" accesskey="b" ><span>Blogs</span></a></li>
<li id="end"></li>
</ul>
</div>
<div id="outer">
<div id="inner">
<div id="sabout">
<p><a href="/about/">Company</a>&#160;&#160;|&#160;&#160;<a href="/about/contact/">Contact</a>&#160;&#160;|&#160;&#160;<a href="/about/news/">News</a>&#160;&#160;|&#160;&#160;<a href="/about/events/">Events</a>&#160;&#160;|&#160;&#160;<a href="/about/people/">People</a></p>
</div>
</div>
</div>
<div id="content">&#160;</div>
<!-- Main Content -->
<div id="main_content">
</div> <!-- BEGIN MAIN CONTENT -->
<!-- Feature Content --> <h1><xsl:value-of select="/alfresco:press-release/alfresco:title"/></h1>
<div id="right_content"> <p><strong><xsl:value-of select="/alfresco:press-release/alfresco:abstract"/></strong></p>
</div> <p><xsl:value-of select="/alfresco:press-release/alfresco:location"/>&#8212;<xsl:value-of select="/alfresco:press-release/alfresco:launch_date"/>&#8212;</p>
<div id="clear"></div> <xsl:for-each select="/alfresco:press-release/alfresco:body">
</div> <p><xsl:value-of select="." disable-output-escaping="yes"/></p>
<!--All Three End --> </xsl:for-each>
<!-- Footer --> <xsl:for-each select="/alfresco:press-release/alfresco:include_about_blurb">
<div id="footer"> <xsl:variable name="blurb-id"><xsl:value-of select="."/></xsl:variable>
<div id="site"> <xsl:variable name="blurb-url"><xsl:value-of select="concat('/media/releases/content/about_blurbs/', concat($blurb-id, '.xml'))"/></xsl:variable>
<div id="footer-logos"> <h2><xsl:value-of select="document($blurb-url)/alfresco:about-blurb/alfresco:name"/></h2>
<a href="http://www.mysql.com/"><img src="/assets/images/footer/mysql.gif" alt="MySQL" title="MySQL" border="0" /></a> <xsl:for-each select="document($blurb-url)/alfresco:about-blurb/alfresco:body">
<a href="http://www.jboss.org"><img src="/assets/images/footer/jboss.gif" alt="JBoss Certified Partner" title="JBoss Certified Partner" border="0" width="74" height="34" /></a> <p><xsl:value-of select="." disable-output-escaping="yes"/></p>
<a href="http://www.springframework.org/"><img src="/assets/images/footer/spring.gif" alt="Spring Framework" title="Spring Framework" border="0" width="67" height="34" /></a> </xsl:for-each>
<a href="http://www.hibernate.org/"><img src="/assets/images/footer/hibernate.gif" alt="Hibernate" title="Hibernate" border="0" width="111" height="34" /></a> </xsl:for-each>
<a href="http://tomcat.apache.org"><img src="/assets/images/footer/tomcat.gif" alt="Tomcat" title="Tomcat" border="0" width="44" height="34" /></a> <h2>Media Contacts</h2>
<a href="http://lucene.apache.org/"><img src="/assets/images/footer/lucene.gif" alt="Lucene" title="Lucene" border="0" width="143" height="34" /></a> <div><p>John Newton<br />Alfresco Software Inc.<br />+44 1628 860639<br />press@alfresco.com</p></div>
<a href="http://myfaces.apache.org/"><img src="/assets/images/footer/myfaces.gif" alt="My Faces" title="My Faces" border="0" width="37" height="34" /></a></div> <div><p>Chuck Tanowitz<br />Schwartz Communications<br />+1 781 684-0770<br />alfresco@schwartz-pr.com</p></div>
<div id="footer-links"> <!-- END MAIN CONTENT -->
<p> </div>
<a href="/">Home</a> | <!-- Feature Content -->
<a href="/legal/">Legal</a> | <div id="right_content">&#160;</div>
<a href="/privacy/">Privacy</a> | <div id="clear"></div>
<a href="/accessibility/">Accessibility</a> |
<a href="/sitemap/">Site Map</a> |
<a href="/rss/?feed=all/">RSS</a>
<img src="/assets/images/icons/feedicon12.gif" alt="RSS" title="RSS" width="12" height="12" />
</p>
<p>
<a href="/about/">Open Source ECMS</a> |
<a href="/products/">CMS Products</a> |
<a href="/services/support/">Management Services</a> |
<a href="/resources/">EMS Resources</a>
</p>
<p>&#169; 2005-2006 Alfresco Software, Inc., All Rights Reserved</p>
<p><img src="/assets/images/icons/powered_by_alfresco.gif" alt="Powered by Alfresco" width="88" height="32" /></p>
</div> </div>
</div> <!--All Three End -->
<div style="clear:both; padding-bottom: 10px;"></div> <!-- Footer -->
</div> <div id="footer">
<div style="clear:both; padding-bottom: 20px;"></div> <div id="site">
<!-- End Footer --> <div id="footer-logos">
</body> <a href="http://www.mysql.com/"><img src="/assets/images/footer/mysql.gif" alt="MySQL" title="MySQL" border="0" /></a>
</html> <a href="http://www.jboss.org"><img src="/assets/images/footer/jboss.gif" alt="JBoss Certified Partner" title="JBoss Certified Partner" border="0" width="74" height="34" /></a>
</xsl:template> <a href="http://www.springframework.org/"><img src="/assets/images/footer/spring.gif" alt="Spring Framework" title="Spring Framework" border="0" width="67" height="34" /></a>
<a href="http://www.hibernate.org/"><img src="/assets/images/footer/hibernate.gif" alt="Hibernate" title="Hibernate" border="0" width="111" height="34" /></a>
<a href="http://tomcat.apache.org"><img src="/assets/images/footer/tomcat.gif" alt="Tomcat" title="Tomcat" border="0" width="44" height="34" /></a>
<a href="http://lucene.apache.org/"><img src="/assets/images/footer/lucene.gif" alt="Lucene" title="Lucene" border="0" width="143" height="34" /></a>
<a href="http://myfaces.apache.org/"><img src="/assets/images/footer/myfaces.gif" alt="My Faces" title="My Faces" border="0" width="37" height="34" /></a></div>
<div id="footer-links">
<p>
<a href="/">Home</a> |
<a href="/legal/">Legal</a> |
<a href="/privacy/">Privacy</a> |
<a href="/accessibility/">Accessibility</a> |
<a href="/sitemap/">Site Map</a> |
<a href="/rss/?feed=all/">RSS</a>
<img src="/assets/images/icons/feedicon12.gif" alt="RSS" title="RSS" width="12" height="12" />
</p>
<p>
<a href="/about/">Open Source ECMS</a> |
<a href="/products/">CMS Products</a> |
<a href="/services/support/">Management Services</a> |
<a href="/resources/">EMS Resources</a>
</p>
<p>&#169; 2005-2006 Alfresco Software, Inc., All Rights Reserved</p>
<p><img src="/assets/images/icons/powered_by_alfresco.gif" alt="Powered by Alfresco" width="88" height="32" /></p>
</div>
</div>
<div style="clear:both; padding-bottom: 10px;"></div>
</div>
<div style="clear:both; padding-bottom: 20px;"></div>
<!-- End Footer -->
</body>
</html>
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>