- From: Fang, Andrew <afang@ptc.com>
- Date: Sun, 26 Feb 2006 20:29:34 -0500
- To: <public-xml-processing-model-wg@w3.org>
- Message-ID: <A69AA663CE9BBC44AE1DA72483DE15DE02A88186@HQ-MAIL3.ptcnet.ptc.com>
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