<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 -->

<document>

 <properties>
  <title>Turbine Services - XSLT Service</title>
 </properties>

<body>

<section name="XSLT Service">

<p>
    The XSLT service is a simple way to transform a well-formed
    XML document into web content for your site. This may be
    dynamic or static content. You can easily integrate the
    XSLT service into a Turbine screen module, or you can
    use the existing <strong>org.apache.turbine.modules.layouts.VelocityXslLayout</strong>
    class to produce dynamic content.
</p>

</section>

<section name="Configuration">

<source><![CDATA[
# -------------------------------------------------------------------
# 
#  S E R V I C E S
#
# -------------------------------------------------------------------
# Classes for Turbine Services should be defined here.
# Format: services.[name].classname=[implementing class]
#
# To specify properties of a service use the following syntax:
# service.[name].[property]=[value]

services.XSLTService.classname=org.apache.turbine.services.xslt.TurbineXSLTService
.
.
.
# -------------------------------------------------------------------
# 
#  X S L T  S E R V I C E
#
# -------------------------------------------------------------------
services.XSLTService.path = /WEB-INF/stylesheets
services.XSLTService.cache = false

]]></source>

</section>

<section name="Usage">

<p>
  Please look at the <strong>org.apache.turbine.modules.layouts.VelocityXslLayout</strong>
  for an example usage pattern.
</p>  

</section>

</body>
</document>
