|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Web sites: building common components centrally
___
Kevin Bird
Matrix
...... Original Message .......
On Sat, 27 Nov 2004 08:19:31 -0800 Robert Koberg <rob@xxxxxxxxxx> wrote:
>Hi,
>
>We (an application service provider CMS (livestoryboard.com) based on
>XML/XSL.) do something like the following...
>
>Each client project usually defines a layouts.xsl[1] that imports
>several XSLs. The client project can use the applcation defaults for the
>imports or can extend/override them. You would use (in java) a custom
>URIResolver to check the client project's dir structure for a file, if
>not there fallback to the app's default
>
>To overrride an import, the client project could either import their own
>uniquely named xsl file while removing the import for the override or
>create the file (with the same name as the one to override) in the
>project's filesystem.
>
>To extend an existing imported XSL, the client would create the template
>they want to override from the default, but still use the default file.
>For example, head.xsl[2] has a named template that calls other
>templates. If you want to extend the head.xsl without overriding it
>completely you could define one of the named templates in the
>layouts.xsl or some other imported XSL.
>
>Hope this makes sense.
>
>best,
>-Rob
>
>
>[1] A layouts.xsl might look like:
>
><?xml version="1.0" encoding="UTF-8" ?>
><xsl:stylesheet exclude-result-prefixes="s" version="1.0"
>xmlns:s="http://livestoryboard.com/schemas/lsb"
>xmlns="http://www.w3.org/1999/xhtml"
>xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <!--
> XSL will be looked first relative to this XSL file. If it is not
>found, the system will lookup an LSB default. If nothing is found it
>will will return an error (null).
> -->
> <xsl:import href="head.xsl"/>
> <xsl:import href="banner.xsl"/>
> <xsl:import href="top-level-nav.xsl"/>
> <xsl:import href="second-level-nav.xsl"/>
> <xsl:import href="topics.xsl"/>
> <xsl:import href="footer.xsl"/>
>
> <xsl:import href="components/indexer.xsl"/>
> <xsl:import href="components/metadata.xsl"/>
> <xsl:import href="components/toc.xsl"/>
> <xsl:import href="components/pager.xsl"/>
> <xsl:import href="components/snailtrail.xsl"/>
>
> <xsl:import href="content.xsl"/>
> <xsl:import href="table.xsl"/>
> <xsl:import href="flash.xsl"/>
>
> <xsl:import href="global_definitions.xsl"/>
> <xsl:import href="metadata_nodesets.xsl"/>
> <xsl:import href="linking.xsl"/>
> <xsl:import href="aggregator.xsl"/>
>
> <xsl:output
> doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
>
>doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
> encoding="utf-8"
> indent="no"
> method="xml"
> omit-xml-declaration="yes"/>
>
> <xsl:template match="/">
> <html xmlns="http://www.w3.org/1999/xhtml">
> <xsl:call-template name="head"/>
> <body class="{$lsb_folder_nodeset/@name}">
> <xsl:choose>
> <xsl:when test="$user.focus.layout='default'">
> <xsl:call-template name="default"/>
> </xsl:when>
> <!--<xsl:when test="$user.focus.layout='home'">
> <xsl:call-template name="home"/>
> </xsl:when>
> <xsl:when test="$user.focus.layout='topics'">
> <xsl:call-template name="topics"/>
> </xsl:when>
> <xsl:when test="$user.focus.layout='screenshots'">
> <xsl:call-template name="screenshots"/>
> </xsl:when>-->
> <xsl:otherwise/>
> </xsl:choose>
> </body>
> </html>
> </xsl:template>
>
> <xsl:template name="default">
> <xsl:call-template name="banner"/>
> <xsl:call-template name="tabs"/>
> <div id="content-main">
> <xsl:if test="$lsb_folder_nodeset/@snailtrail">
> <xsl:call-template name="snailtrail"/>
> </xsl:if>
> <h1>
> <xsl:value-of select="$focus_title"/>
> </h1>
> <xsl:apply-templates mode="load_regions"
>select="$lsb_folder_metadata/s:regions/s:region[@name='wideColumn']/*"/>
> <xsl:apply-templates mode="load_regions"
>select="$lsb_focus_metadata/s:regions/s:region[@name='wideColumn']/*"/>
> <xsl:if test="$lsb_folder_nodeset/@pager">
> <xsl:call-template name="pager"/>
> </xsl:if>
> </div>
> <div id="content-sidebar">
> <div id="nav-header">
> <xsl:variable name="href">
> <xsl:apply-templates select="$lsb_folder_nodeset"
>mode="get_page_href"/>
> </xsl:variable>
> <a href="{$href}">
> <xsl:value-of select="$lsb_folder_nodeset/@label"/>
> </a>
> <xsl:text>:</xsl:text>
> </div>
> <xsl:call-template name="nav"/>
> <xsl:apply-templates mode="load_regions"
>select="$lsb_folder_metadata/s:regions/s:region[@name='narrowCol']/*"/>
> <xsl:apply-templates mode="load_regions"
>select="$lsb_focus_metadata/s:regions/s:region[@name='narrowCol']/*"/>
> <br class="brkr"/>
> </div>
> <xsl:call-template name="footer"/>
> </xsl:template>
>
></xsl:stylesheet>
>
>
>[2] head.xsl's main named template:
>
>
> <xsl:template name="head">
> <head>
>
> <xsl:call-template name="head-misc-before"/>
> <xsl:call-template name="head-css"/>
> <xsl:call-template name="head-favicon"/>
> <xsl:call-template name="head-metadata-misc"/>
> <xsl:call-template name="head-metadata-dc"/>
> <xsl:call-template name="head-title"/>
> <xsl:call-template name="head-misc-after"/>
>
> </head>
> </xsl:template>
>
>
>
>
>Frans Englich wrote:
>
>>
>> Hello,
>>
>> I am working on a project which as user interface has a web site. The software
>> is information intensive and produces much data. What the website consists of
>> is plain informative documents(such as FAQs), and various data files which
>> are statically produced. The browser-sophisticance requirement for solving my
>> problem can be fairly high since the userbase is software developers;
support
>> for client side XSLT transformation can be assumed, if it's deemed
necessary.
>>
>> The problem I have is of plain web design: How do I in the best way
insert
>> common elements, such as footers and navigation, into every file which
is
>> part of the website?
>>
>> Currently, my plan is to write/produce all documents in XHTML, and
associate
>> every file with an XSLT which adds the common parts such as base CSS,
>> headers, navigation, footers, and so forth; the styleheet would "merge"
the
>> document with the common elements.
>>
>> To me it sounds practical, the documents are standalone, valid XHTML
>> documents(they can be validated and tested independently) and the
website
>> framework is centrally controlled. Bandwidth can be saved by doing the
>> transformation at the client. Perhaps it is restraining if the
navigation is
>> somehow dynamic/context bound, affected by the document, I cannot yet
tell.
>>
>> But this is a common problem -- how do people usually solve this?
>>
>> I've worked with a PHP framework, where documents were written in
>> php-tags+body content + php tags, and the php tags then inserted the XML
>> declaration, navigation, and head, html tags, and so forth(the documents
were
>> not well-formed). When the documents needed to affect the navigation,
such as
>> to add a menu, they simply declared PHP variables. Apart from that, this
>> copy&paste solution was of course a major pain; impossible to validate
the
>> documents, and just think about extending or integrating an XML
technology,
>> such as Docbook..
>>
>> I might add that I have no dependency on a procedural server-side
language,
>> and it would be nice if it stayed that way.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








