Arbortext Pipeline implementation Summary

Arbortext Pipeline implementation:

 

1. Main Purpose: Convert xml/sgml of various doctypes into various
output formats including: xml, html, web (multiple html), htmlhelp, PDF,
postscirpt, etc. Standard pipeline components (we call them filters)
including:

   a. XSL transformation

   b. Profiling 

   c. Link resolution

   d. Chunking (break monolithic doc into smaller pieces)

   e. Switch (handle conditions)

   f. Serialization to file and dom

 

2. Java + sax event based implementation. 

 

3. Terminology: 

   Input: refer to sax events from the previous component

   Parameter: refer to configuration parameters which include
stylesheet, stylesheet parameter, serializer properties such as number
of indentation, character substitution, profiling expression, etc.

4. Each component has at least one input except the first component
(called source). Pipeline construction based on the input. No output is
specified on component. 

5. Components can send additional parameters/instructions to downstream
components through a special channel using PI. (Not through regular sax
channel as it could be intercepted/filtered by components in between)

6. Each component parameter can be static or set at command line.

7. Condition is made possible by a component (called Switch)

 

An example:

 

The following is an example that converts an XML/SGML into html. Depends
on the input stylesheet type (fosi or XSL), the pipeline could use one
path or the other. 

 

XML/SGML document => Profiling => ...

=>Link Resolution => (pipe a) xsl => XSL Transformation => Serialize to
file

                          => (pipe b) fosi=> Send back to Application
(through in memory DOM)   

 

---

 

<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE Composer PUBLIC "-//Arbortext//DTD Composer 1.0//EN"

 
"../doctypes/composer/composer.dtd"

[<!ENTITY % stock PUBLIC "-//Arbortext//DTD Fragment - ATI Stock filter
list//EN" "../composer/stock.ent">

%stock;

]>

 

<Composer>

  <Label>Compose to HTML</Label>

  <Documentation>

  </Documentation>

  <Interface>

    <Parameter name="outputFile" 

                   idref="fileSerializer.outputFile" 

                   required="yes"/>

 

                   ...

   <Parameter name="stylesheet" idref="xslTransformer.stylesheet" 

                   required="yes"/>

    <Parameter name="transformerParams" 

               idref="xslTransformer.transformerParams"/>

    <Parameter name="stylesheetType" required="yes"/>

                   ...

    <Parameter name="encoding"

                   idref="fileSerializer.encoding"/>

    <Parameter name="method"

                   idref="fileSerializer.method"/>

    <Parameter name="docID" 

                   idref="epicSerializer.docId"/>

    <Parameter name="dcamSessionId" idref="dcam.sessionId"/>

                   ...

    <Parameter name="dcamDatabaseName" idref="dcam.databaseName"/>

    <Parameter name="dcamDocSetId" idref="dcam.docSetId"/>

 

    &serverProfilerParameters;

    &clientProfilerParameters;

 

  </Interface>

  <Resource>

    <Label></Label>

    <Documentation></Documentation>

    &epicGenerator;

    &serverProfiler;

    &clientProfiler;    

    &xslTransformer;

    &fileSerializer;

    &epicSerializer;

    &switch;

    &errorHandler;

    &atiEventConverter;

    &linkResolver;

  </Resource>

 

  <Pipeline     startFilters="epic_generator">

    <Filter id="epic_generator" filterDefRef="epicGenerator">

      <FilterParameter name="docId">

        <ComposerParameter name="document"/>

      </FilterParameter>

      <FilterParameter name="entSubFname">

        <ComposerParameter name="entSubFname"/>

      </FilterParameter>

      <FilterParameter name="graphicsHref">

        <ComposerParameter name="graphicsHref"/>

      </FilterParameter>

      <FilterParameter name="graphicsPath">

        <ComposerParameter name="graphicsPath"/>

      </FilterParameter>

      <FilterParameter name="generateEpicDirectives">

        <ComposerParameter name="generateEpicDirectives"/>

      </FilterParameter>

      <FilterParameter name="generateDeclHandlerEvents">

        <ComposerParameter name="generateDeclHandlerEvents"/>

      </FilterParameter>

      <FilterParameter name="changetracking">

        <ComposerParameter name="changetracking"/>

      </FilterParameter>

    </Filter>

 

    <Filter id="profiler1" filterDefRef="serverProfiler">

      <FilterParameter name="logicalExpression">

        <ComposerParameter name="prof.logicalExpression"/>

      </FilterParameter>

              <FilterParameter name="docID">

                <ComposerParameter name="document"/>

              </FilterParameter>

      <Input filterRef="epic_generator"/>

    </Filter>

 

    <Filter id="linkResolver" filterDefRef="linkresolver">

      <FilterParameter name="dcam.docID">

        <ComposerParameter name="document"/>

      </FilterParameter>

      <FilterParameter name="dcam.sessionId">

        <ComposerParameter name="dcamSessionId"/>

      </FilterParameter>

      <FilterParameter name="dcam.location">

        <ComposerParameter name="dcamServiceLocation"/>

      </FilterParameter>

      <FilterParameter name="dcam.databaseName">

        <ComposerParameter name="dcamDatabaseName"/>

      </FilterParameter>

      <FilterParameter name="dcam.useRemoteSession">

        <ComposerParameter name="dcamUseRemoteSession"/>

      </FilterParameter>

      <FilterParameter name="dcam.docSetId">

        <ComposerParameter name="dcamDocSetId"/>

      </FilterParameter>

      <FilterParameter name="serverProfiler.logicalExpression">

        <ComposerParameter name="prof.logicalExpression"/>

      </FilterParameter>

      <FilterParameter name="dcam.docID">

            <ComposerParameter name="document"/>

      </FilterParameter>

      <FilterParameter name="serverProfiler.docID">

            <ComposerParameter name="document"/>

      </FilterParameter>

      <Input filterRef="profiler1"/>

    </Filter>

 

 

    <Filter id="profiler2" filterDefRef="clientProfiler">

      <FilterParameter name="targetAttributes">

        <ComposerParameter name="prof.targetAttributes"/>

              </FilterParameter>

              <FilterParameter name="ProfilePIName">

        <ComposerParameter name="prof.ProfilePIName"/>

              </FilterParameter>

              <FilterParameter name="ProfileValuesPIName">

        <ComposerParameter name="prof.ProfileValuesPIName"/>

              </FilterParameter>

              <FilterParameter name="docID">

                <ComposerParameter name="document"/>

              </FilterParameter>

              <Input filterRef="linkResolver"/>

    </Filter>

    

    <Filter id="_switch" filterDefRef="switch">

      <FilterParameter name="pipeName1">

        <Value>xsl</Value>

      </FilterParameter>

      <FilterParameter name="pipeName2">

        <Value>fosi</Value>

      </FilterParameter>

      <FilterParameter name="outputPipe">

        <ComposerParameter name="stylesheetType"/>

      </FilterParameter>

      <Input filterRef="profiler2"/>

    </Filter>

 

 

    <Filter id="xsl_transformer" filterDefRef="xslTransformer">

      <FilterParameter name="stylesheet">

        <ComposerParameter name="stylesheet"/>

      </FilterParameter>

      <FilterParameter name="transformerParams">

        <ComposerParameter name="transformerParams"/>

      </FilterParameter>

      <Input filterRef="_switch" pipeName="pipe1"/>

    </Filter>

 

    <Filter id="ati_event_converter" filterDefRef="atiEventConverter">

      <Input filterRef="xsl_transformer" />

    </Filter>

 

    <Filter id="file_serializer" filterDefRef="fileSerializer">

      <FilterParameter name="outputFile">

        <ComposerParameter name="outputFile"/>

      </FilterParameter>

      <FilterParameter name="encoding">

        <ComposerParameter name="encoding"/>

      </FilterParameter>

      <FilterParameter name="html.entSubFname">

        <ComposerParameter name="html.entSubFname"/>

      </FilterParameter> 

      <FilterParameter name="xml.entSubFname">

        <ComposerParameter name="xml.entSubFname"/>

      </FilterParameter> 

      <FilterParameter name="text.entSubFname">

        <ComposerParameter name="text.entSubFname"/>

      </FilterParameter> 

      <FilterParameter name="method">

        <ComposerParameter name="method"/>

      </FilterParameter> 

      <Input filterRef="xsl_transformer" pipeName="outputProps"/> 

      <Input filterRef="ati_event_converter"/>

    </Filter>

 

 

    <Filter id="epic_serializer" filterDefRef="epicSerializer">

      <FilterParameter name="docId">

        <ComposerParameter name="docID"/>

      </FilterParameter> 

      <Input filterRef="_switch" pipeName="pipe2"/>

    </Filter>

 

  </Pipeline>  

</Composer>

Received on Monday, 27 February 2006 03:25:35 UTC