jeremy 02/02/22 14:15:35 Modified: src/scratchpad/webapp/mount/editor README sitemap.xmap src/scratchpad/webapp/mount/editor/docs welcome.xml src/scratchpad/webapp/mount/editor/stylesheets simple-page2html.xsl Added: src/scratchpad/webapp/mount/editor editor.xmap test.xmap src/scratchpad/webapp/mount/editor/docs tests.xml xfwt.xml src/scratchpad/webapp/mount/editor/editor/docs editor.xml template.xml src/scratchpad/webapp/mount/editor/editor/images dir.gif file.gif get.gif new.gif view.gif src/scratchpad/webapp/mount/editor/editor/stylesheets editor-components.xsl editor-page2html.xsl editor-utils.xsl simple-page2html.xsl stream2xfwt.xsl src/scratchpad/webapp/mount/editor/tests include-me.xml make-page.xsl test1.xml test2.xml test3.xml test4.xml test5.xml Removed: src/scratchpad/webapp/mount/editor/docs include-me.xml test1.xml test2.xml test3.xml test4.xml test5.xml src/scratchpad/webapp/mount/editor/stylesheets directory2html.xsl make-page.xsl Log: Everything moved around to incorporate a new demo file editor Revision Changes Path 1.2 +5 -0 xml-cocoon2/src/scratchpad/webapp/mount/editor/README Index: README =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/README,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- README 15 Feb 2002 21:38:59 -0000 1.1 +++ README 22 Feb 2002 22:15:34 -0000 1.2 @@ -29,6 +29,11 @@ BTW, the directory is called 'editor' because that is what I hope to turn it into, with a few more components. +To use this in your project, you need to add the 'editor' folder and 'editor.xmap' to your project, and add the 'editor pipelines' from the file 'sitemap.xmap' to your sitemap. + +Then you need to develop components for your particular document markup! + ie. StyleSheets that understand your documents, editor config for your forms etc. + I'll go into this in more detail at a later date. Thanks 1.2 +25 -60 xml-cocoon2/src/scratchpad/webapp/mount/editor/sitemap.xmap Index: sitemap.xmap =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/sitemap.xmap,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- sitemap.xmap 15 Feb 2002 21:38:59 -0000 1.1 +++ sitemap.xmap 22 Feb 2002 22:15:34 -0000 1.2 @@ -1,38 +1,10 @@ <?xml version="1.0"?> -<!-- This sitemap shows what is possible and what is not allowed. --> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"/> - <map:serializers default="html"> - - <!-- You can define your own Serializer for FileWritingTransformer to use--> - - <map:serializer - name="my-xml-serializer" - mime-type="text/xml" logger="sitemap.serializer.myxml" - src="org.apache.cocoon.serialization.XMLSerializer" - > - <!--<doctype-system>urn:hrc:doc</doctype-system>--> - <encoding>utf-8</encoding> - <omit-xml-declaration>no</omit-xml-declaration> - </map:serializer> - - </map:serializers> - <map:transformers default="xslt"> - - <!-- Define 'filewriter' as the name for FileWritingTransformer --> - <!-- You can set up the default Serialiser here --> - <!-- You can also set it in the invocation tag below --> - <!-- or place serializer="serializer-name" in the xfwt:write tag --> - <!-- if you leave it out altogether, 'xml' is used --> - - <map:transformer name="filewriter" logger="sitemap.transformer.tofile" - src="org.apache.cocoon.transformation.FileWritingTransformer"> - <serializer>my-xml-serializer</serializer> - </map:transformer> - - </map:transformers> + <map:serializers default="html"/> + <map:transformers default="xslt"/> <map:readers default="resource"/> <map:matchers default="wildcard"/> <map:selectors default="browser"/> @@ -47,43 +19,36 @@ <map:redirect-to uri="welcome"/> </map:match> - <!-- the welcome page --> - <map:match pattern="welcome"> - <map:generate src="docs/welcome.xml"/> - <map:transform src="stylesheets/simple-page2html.xsl"/> - <map:serialize type="html"/> - </map:match> - - <!-- the tests --> - <map:match pattern="test*"> - <map:generate src="docs/test{1}.xml"/> - <map:transform type="cinclude"/> <!-- only here for test4 --> - <map:transform type="filewriter"/> <!-- invoke the filewriter --> - <map:transform src="stylesheets/simple-page2html.xsl"> - <map:parameter name="view-source" value="docs/test{1}.xml"/> - </map:transform> - <map:serialize type="html"/> +<!-- start EDITING PIPELINES --> +<!-- We mount the Editor SiteMap into the same base as this SiteMap, so the Editor can reach this SiteMap's files --> + + <!-- slash-edit pipeline --> + <!-- edit/, edit/new, edit/get/*, edit/put/* --> + <map:match pattern="edit**"> + <map:mount uri-prefix="edit" src="editor.xmap" check-reload="yes"/> </map:match> - <!-- the results --> - <map:match pattern="result*"> - <map:generate src="docs/result{1}.xml"/> - <map:transform src="stylesheets/simple-page2html.xsl"> - <map:parameter name="view-source" value="docs/result{1}.xml"/> - </map:transform> - <map:serialize type="html"/> + <!-- test/result pipeline --> + <!-- /test/*, /result/*, result/*/* --> + <map:match pattern="*/**"> + <map:mount uri-prefix="" src="test.xmap" check-reload="yes"/> </map:match> - <!-- the result of test3 --> - <map:match pattern="**result*"> - <map:generate src="docs/{1}result{2}.xml"/> - <map:transform src="stylesheets/simple-page2html.xsl"> - <map:parameter name="view-source" value="docs/{1}result{2}.xml"/> - </map:transform> +<!-- end EDITING PIPELINES --> + + <!-- view page --> + <map:match pattern="**"> + <map:generate src="docs/{1}.xml"/> + <map:transform src="stylesheets/simple-page2html.xsl"/> <map:serialize type="html"/> </map:match> - </map:pipeline> + <map:handle-errors> + <map:transform src="context://stylesheets/system/error2html.xsl"/> + <map:serialize status-code="500"/> + </map:handle-errors> + + </map:pipeline> </map:pipelines> </map:sitemap> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor.xmap Index: editor.xmap =================================================================== <?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"/> <map:serializers default="html"> <!-- You can define your own Serializer for FileWritingTransformer to use--> <map:serializer name="my-xml-serializer" mime-type="text/xml" logger="sitemap.serializer.myxml" src="org.apache.cocoon.serialization.XMLSerializer" > <!--<doctype-system>urn:hrc:doc</doctype-system>--> <encoding>utf-8</encoding> <omit-xml-declaration>no</omit-xml-declaration> <indent>2</indent> </map:serializer> </map:serializers> <map:transformers default="xslt"> <!-- Define 'filewriter' as the name for FileWritingTransformer --> <!-- You can set up the default Serialiser here --> <!-- You can also set it in the invocation tag below --> <!-- or place serializer="serializer-name" in the xfwt:write tag --> <!-- if you leave it out altogether, 'xml' is used --> <map:transformer name="filewriter" logger="sitemap.transformer.tofile" src="org.apache.cocoon.transformation.FileWritingTransformer" label="xfwt"> <serializer>my-xml-serializer</serializer> </map:transformer> </map:transformers> <map:readers default="resource"/> <map:matchers default="wildcard"/> <map:selectors default="browser"/> </map:components> <map:views> <map:view name="content" from-label="content"> <map:serialize type="xml"/> </map:view> <map:view name="xfwt" from-label="xfwt"> <map:serialize type="xml"/> </map:view> </map:views> <map:pipelines> <map:pipeline internal-only="true"> <!-- internal pipelines, so aggregation can be used with these components --> <!-- directory listing, limited to the contents of your project's 'docs' folder --> <map:match pattern="dir/**"> <map:generate type="directory" src="docs/{1}"/> <!-- enforce the use of 'docs'--> <map:serialize type="xml"/> </map:match> <!-- parse form data --> <map:match pattern="stream"> <map:generate type="stream"> <map:parameter name="form-name" value="content"/> </map:generate> <map:serialize type="xml"/> </map:match> </map:pipeline> <map:pipeline> <!-- the default page --> <map:match pattern=""> <map:redirect-to uri="welcome"/> </map:match> <map:match pattern="/"> <map:redirect-to uri="welcome"/> </map:match> <map:match pattern="welcome"> <map:generate src="editor/docs/welcome.xml"/> <map:transform src="editor/stylesheets/simple-page2html.xsl"/> <map:serialize type="html"/> </map:match> <!-- directory images --> <map:match pattern="**image/*.gif"> <map:read src="editor/images/{2}.gif" mime-type="image/gif"/> </map:match> <!-- The behaviour pipelines Beware of the slashes added to the 'target-dir' parameter. The stylesheets expect to recieve directory paths with a slash at either end, so the Sitemap (who removed then dure to matching technique) must replace them. This is not the case for the 'put' behaviour, the 'target-dir' parameter arrived complete in a form field, it was not derived by the sitemap. Also be careful of the various places where use of the parent sitemap's 'docs' folder is enforced --> <!-- view your site's pages in the editor --> <map:match pattern="view/**/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="docs/{1}/{2}"/> <!-- enforce the use of 'docs'--> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{2}"/> <map:parameter name="target-dir" value="/{1}/"/> <map:parameter name="behaviour" value="view"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- view your site's pages in the editor, from root --> <map:match pattern="view/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="docs/{1}"/> <!-- enforce the use of 'docs'--> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{1}"/> <map:parameter name="target-dir" value="/"/> <map:parameter name="behaviour" value="view"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the any directory --> <map:match pattern="dir/**/"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="cocoon:/dir/{1}"/> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-dir" value="/{1}/"/> <map:parameter name="behaviour" value="dir"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the default directory --> <map:match pattern="dir/"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="cocoon:/dir/"/> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-dir" value="/"/> <map:parameter name="behaviour" value="dir"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- make a new page with a form --> <map:match pattern="new/**/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="editor/docs/template.xml"/> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{2}"/> <map:parameter name="target-dir" value="/{1}/"/> <map:parameter name="behaviour" value="new"/> <map:parameter name="form-name" value="content"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- make a new page with a form in the root --> <map:match pattern="new/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="editor/docs/template.xml"/> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{1}"/> <map:parameter name="target-dir" value="/"/> <map:parameter name="behaviour" value="new"/> <map:parameter name="form-name" value="content"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the get a page as a form --> <map:match pattern="get/**/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="docs/{1}/{2}"/> <!-- enforce the use of 'docs'--> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{2}"/> <map:parameter name="target-dir" value="/{1}/"/> <map:parameter name="behaviour" value="get"/> <map:parameter name="form-name" value="content"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the get a page as a form from the root --> <map:match pattern="get/*"> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="docs/{1}"/> <!-- enforce the use of 'docs'--> </map:aggregate> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{1}"/> <map:parameter name="target-dir" value="/"/> <map:parameter name="behaviour" value="get"/> <map:parameter name="form-name" value="content"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the post a page from a form --> <!-- unlike the other matchers, this one receives 'complete' paths ie. requires no addition of slashes --> <map:match pattern="put"> <map:act type="request"> <map:parameter name="parameters" value="true"/> <map:aggregate element="root" label="content"> <map:part src="editor/docs/editor.xml"/> <map:part src="cocoon:/stream"/> </map:aggregate> <map:transform src="editor/stylesheets/stream2xfwt.xsl"> <map:parameter name="target-file" value="{target-file}"/> <map:parameter name="target-dir" value="docs{target-dir}"/><!-- enforce saving in docs folder of main project. Do not put a slash after docs, the target-dir already has the correct ones --> </map:transform> <map:transform type="filewriter"/> <map:transform src="editor/stylesheets/editor-page2html.xsl"> <map:parameter name="target-file" value="{target-file}"/> <map:parameter name="target-dir" value="{target-dir}"/> <map:parameter name="behaviour" value="put"/> </map:transform> <map:serialize type="html"/> </map:act> </map:match> <map:handle-errors> <!--<map:transform src="context://stylesheets/system/error2html.xsl"/> <map:serialize status-code="500"/>--> <map:serialize type="xml" status-code="500"/> </map:handle-errors> <map:handle-errors type="404"> <map:transform src="context://stylesheets/system/error2html.xsl"/> <map:serialize/> </map:handle-errors> </map:pipeline> </map:pipelines> </map:sitemap> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/test.xmap Index: test.xmap =================================================================== <?xml version="1.0"?> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"/> <map:serializers default="html"> <!-- You can define your own Serializer for FileWritingTransformer to use--> <map:serializer name="my-xml-serializer" mime-type="text/xml" logger="sitemap.serializer.myxml" src="org.apache.cocoon.serialization.XMLSerializer" > <!--<doctype-system>urn:hrc:doc</doctype-system>--> <encoding>utf-8</encoding> <omit-xml-declaration>no</omit-xml-declaration> <indent>2</indent> </map:serializer> </map:serializers> <map:transformers default="xslt"> <!-- Define 'filewriter' as the name for FileWritingTransformer --> <!-- You can set up the default Serialiser here --> <!-- You can also set it in the invocation tag below --> <!-- or place serializer="serializer-name" in the xfwt:write tag --> <!-- if you leave it out altogether, 'xml' is used --> <map:transformer name="filewriter" logger="sitemap.transformer.tofile" src="org.apache.cocoon.transformation.FileWritingTransformer"> <serializer>my-xml-serializer</serializer> </map:transformer> </map:transformers> <map:readers default="resource"/> <map:matchers default="wildcard"/> <map:selectors default="browser"/> </map:components> <map:pipelines> <map:pipeline> <!-- the tests --> <map:match pattern="test/4"> <map:generate src="tests/test4.xml"/> <map:transform type="cinclude"/> <map:transform type="filewriter"/> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/test4.xml"/> </map:transform> <map:serialize type="html"/> </map:match> <map:match pattern="test/5"> <map:generate src="tests/test5.xml"/> <map:transform src="tests/make-page.xsl"/> <!--<map:transform type="log"> <map:parameter name="logfile" value="test1.log"/> <map:parameter name="append" value="no"/> </map:transform>--> <map:transform type="filewriter"> <map:parameter name="serializer" value="xml"/> <!-- invoke the filewriter with 'xml' serializer --> </map:transform> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/test5.xml"/> </map:transform> <map:serialize type="html"/> </map:match> <map:match pattern="test/*"> <map:generate src="tests/test{1}.xml"/> <map:transform type="filewriter"/> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/test{1}.xml"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the results --> <map:match pattern="result/*"> <map:generate src="tests/result{1}.xml"/> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/result{1}.xml"/> </map:transform> <map:serialize type="html"/> </map:match> <!-- the result of test3 --> <map:match pattern="result/*/*"> <map:generate src="tests/{1}/result{2}.xml"/> <map:transform src="stylesheets/simple-page2html.xsl"> <map:parameter name="view-source" value="tests/{1}/result{2}.xml"/> </map:transform> <map:serialize type="html"/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap> <!-- end of file --> 1.3 +10 -128 xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/welcome.xml Index: welcome.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/welcome.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- welcome.xml 16 Feb 2002 20:21:41 -0000 1.2 +++ welcome.xml 22 Feb 2002 22:15:35 -0000 1.3 @@ -1,132 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <page> - <title>FileWritingTransformer</title> - <content> - - - <para> - Uses the tag <pre><xfwt:write src="path-to-file" [serializer="serializer-name"]/></pre> - in the namespace xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0". - </para> - - <para> - The contents of this tag are Serialised to file when the document containing it is transformed by FileWritingTransformer. - </para> - - <para> - SiteMap: - </para> - - <para> - FileWritingTransformer is defined using XML like this: - </para> - - <para> -<pre> - <map:transformer name="filewriter" logger="sitemap.transformer.filewriter" - src="org.apache.cocoon.transformation.FileWritingTransformer"> - [<serializer>my-xml-serializer</serializer>] - </map:transformer> -</pre> - </para> - - <para> - The default Serializer, if none is specified is 'xml'. - You can specify the Serializer in 3 different places, - SiteMap Definition, SiteMap Invocation and in the 'serializer attribute of the '<xfwt:write/>' Tag. - In the examples, something surrounded by [ and ] is optional. - </para> - - <para> - The Serializer you want to use has to be defined somewhere in the SiteMap hierarchy, - if you need a special one, set it up how you set up any other Serializer. - </para> - - <para> -<pre> - <map:serializer - name="my-xml-serializer" - mime-type="text/xml" logger="sitemap.serializer.myxml" - src="org.apache.cocoon.serialization.XMLSerializer" - > - <encoding>utf-8</encoding> - <omit-xml-declaration>no</omit-xml-declaration> - </map:serializer> -</pre> - </para> - - - <para> - In the pipeline, you use XML like this to allow FileWritingTransformer to do it's job, - again specifying the Serializer to use here is optional. - </para> - - <para> -<pre> - <map:transform type="filewriter"> - [<map:parameter name="serialiser" value="my-xml-serialiser"/>] - </map:transform> -</pre> - </para> - - <para> - Document: - </para> - - <para> - Something like this XML Fragment somewhere in the Document being processed, - will result in an XML file being written at the location specified, - with the <page/> tag as the Document Root. - </para> - - <para> -<pre> - <xfwt:write src="docs/result1.xml" [serializer="my-xml-serializer"]> - <page> - <title>FileWritingTransformer Test Result 1</title> - <content> - <para>Congratulations!</para> - </content> - </page> - </xfwt:write> -</pre> - </para> - - <para> - This XMLFragment (or your equivalent) could have got into the stream by any means available to the Cocoon2 SiteMap. - Generation, Transformation, Aggregation, Inclusion etc. - Again, the serializer attribute is optional. - </para> - - <para> - Tests: Please run these tests and report any problems. - </para> - <para> - Test 1: <a href="test1">Test 1</a>: the basic test, makes <a href="result1">Result 1</a>. - </para> - <para> - Test 2: <a href="test2">Test 2</a>: the namespace test, makes <a href="result2">Result 2</a>, with the XLink namespace used inside. - </para> - <para> - Test 3: <a href="test3">Test 3</a>: the new folder test, makes <a href="newfolder/result3">Result 3</a>, in a new folder. - </para> - <para> - Test 4: <a href="test4">Test 4</a>: the XInclude test, makes <a href="result4">Result 4</a>, having XIncluded the content earlier in the pipeline. - </para> - <para> - Test 5: <a href="test5">Test 5</a>: the XSLT test, a <a href="../../view-source?filename=mount/editor/stylesheets/make-page.xsl">StyleSheet</a> makes <a href="result5">Result 5</a>, from parts of <a href="test5">Test 5</a>. - </para> - - - <para> - Known Problems: - </para> - <para> - You get double NS declarations if the same NS exists in the Generated and XIncluded document. - </para> - <para> - The NS declaration for xfwt is always copied to the output file. - </para> - </content> + <title>Experimental File Editing Pipelines</title> + <content> + <para>Please try the <a href="tests">tests</a> +</para> + <para>Please try out the demo file editor <a href="edit/"><slash-edit/></a> +</para> + <para>This suite uses the <a href="xfwt">FileWritingTransformer</a> +</para> + + </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/tests.xml Index: tests.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page> <title>FileWritingTransformer Tests</title> <content> <para> Tests: Please run these tests and report any problems. </para> <para> Test 1: <a href="test/1">Test 1</a>: the basic test, makes <a href="result/1">Result 1</a>. </para> <para> Test 2: <a href="test/2">Test 2</a>: the namespace test, makes <a href="result/2">Result 2</a>, with the XLink namespace used inside. </para> <para> Test 3: <a href="test/3">Test 3</a>: the new folder test, makes <a href="result/newfolder/3">Result 3</a>, in a new folder. </para> <para> Test 4: <a href="test/4">Test 4</a>: the XInclude test, makes <a href="result/4">Result 4</a>, having XIncluded the content earlier in the pipeline. </para> <para> Test 5: <a href="test/5">Test 5</a>: the XSLT test, a <a href="../../view-source?filename=mount/editor/stylesheets/make-page.xsl">StyleSheet</a> makes <a href="result/5">Result 5</a>, from parts of <a href="test/5">Test 5</a>. </para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/docs/xfwt.xml Index: xfwt.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page> <title>FileWritingTransformer</title> <content> <para>Please try the <a href="tests">tests</a></para> <para> Uses the tag <pre><xfwt:write src="path-to-file" [serializer="serializer-name"]/></pre> in the namespace xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0". </para> <para> The contents of this tag are Serialised to file when the document containing it is transformed by FileWritingTransformer. </para> <para> SiteMap: </para> <para> FileWritingTransformer is defined using XML like this: </para> <para> <pre> <map:transformer name="filewriter" logger="sitemap.transformer.filewriter" src="org.apache.cocoon.transformation.FileWritingTransformer"> [<serializer>my-xml-serializer</serializer>] </map:transformer> </pre> </para> <para> The default Serializer, if none is specified is 'xml'. You can specify the Serializer in 3 different places, SiteMap Definition, SiteMap Invocation and in the 'serializer attribute of the '<xfwt:write/>' Tag. In the examples, something surrounded by [ and ] is optional. </para> <para> The Serializer you want to use has to be defined somewhere in the SiteMap hierarchy, if you need a special one, set it up how you set up any other Serializer. </para> <para> <pre> <map:serializer name="my-xml-serializer" mime-type="text/xml" logger="sitemap.serializer.myxml" src="org.apache.cocoon.serialization.XMLSerializer" > <encoding>utf-8</encoding> <omit-xml-declaration>no</omit-xml-declaration> </map:serializer> </pre> </para> <para> In the pipeline, you use XML like this to allow FileWritingTransformer to do it's job, again specifying the Serializer to use here is optional. </para> <para> <pre> <map:transform type="filewriter"> [<map:parameter name="serialiser" value="my-xml-serialiser"/>] </map:transform> </pre> </para> <para> Document: </para> <para> Something like this XML Fragment somewhere in the Document being processed, will result in an XML file being written at the location specified, with the <page/> tag as the Document Root. </para> <para> <pre> <xfwt:write src="docs/result1.xml" [serializer="my-xml-serializer"]> <page> <title>FileWritingTransformer Test Result 1</title> <content> <para>Congratulations!</para> </content> </page> </xfwt:write> </pre> </para> <para> This XMLFragment (or your equivalent) could have got into the stream by any means available to the Cocoon2 SiteMap. Generation, Transformation, Aggregation, Inclusion etc. Again, the serializer attribute is optional. </para> <para> Known Problems: </para> <para>If you have an error while editing an existing file, the file will probably be trashed by the process.</para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/docs/editor.xml Index: editor.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <editor title="<slash-edit/>"> <!-- Use this file to modify the text the editor displays --> <!-- if you want to change the names of the 'behaviours' make the same changes in the editor.xmap! --> <!-- Various display strings --> <title behaviour="new">Make a new Page</title> <title behaviour="get">Edit a Page</title> <title behaviour="put">Save Results</title> <title behaviour="view">View a Page</title> <title behaviour="dir">Directory Listing</title> <notify behaviour="new">Making a new File at</notify> <notify behaviour="get">Editing the File at</notify> <notify behaviour="put">Results of saving a file at</notify> <notify behaviour="view">Viewing the File at</notify> <notify behaviour="dir">Directory Listing of</notify> <notes behaviour="new">Please edit the XML, then click the 'Make New File' button below</notes> <notes behaviour="get">Please edit the XML, then click the 'Save My Changes' button below</notes> <notes behaviour="put">Thanks for using <slash-edit/></notes> <notes behaviour="view">This is the editor-view of your file, internal links are not likely to work correctly.</notes> <notes behaviour="dir">Please choose a file to view</notes> <!-- The commands --> <command behaviour="new" tip="Make a new File" icon="new.gif">new</command> <command behaviour="get" tip="Edit this File" icon="get.gif">get</command> <command behaviour="put">put</command> <command behaviour="view" tip="View this File" icon="view.gif">view</command> <command behaviour="dir" tip="View Directory listing" icon="dir.gif">dir</command> <!-- text for form buttons --> <button behaviour="new">Make New File</button> <button behaviour="get">Save My Changes</button> <!-- the tools available to each behaviour --> <tools behaviour="new"> <tool command="dir"/> <tool command="new"/> </tools> <tools behaviour="get"> <tool command="dir"/> <tool command="new"/> <tool command="view"/> </tools> <tools behaviour="put"> <tool command="dir"/> <tool command="new"/> <tool command="get"/> <tool command="view"/> </tools> <tools behaviour="view"> <tool command="dir"/> <tool command="new"/> <tool command="get"/> </tools> <tools behaviour="dir"> <tool command="new"/> </tools> <!-- what to call the parent directory link --> <parent-dir tip="View Parent Directory listing">..</parent-dir> </editor> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/docs/template.xml Index: template.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page> <title> - please write your title here - </title> <content> <para> - you can put in any number of paragraphs - </para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/images/dir.gif <<Binary file>> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/images/file.gif <<Binary file>> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/images/get.gif <<Binary file>> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/images/new.gif <<Binary file>> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/images/view.gif <<Binary file>> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-components.xsl Index: editor-components.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dir="http://apache.org/cocoon/directory/2.0" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0"> <!-- your form for editing content --> <xsl:template match="page" mode="form"> <form method="post"> <xsl:attribute name="action"><xsl:value-of select="$command-base"/><xsl:value-of select="$config/command[@behaviour = 'put']/text()"/></xsl:attribute> <table border="0" cellspacing="0" cellpadding="5" width="100%"> <tr> <td colspan="2"><textarea name="{$form-name}" rows="20" cols="80" xml:space="preserve" onchange="changed=true;"><xsl:apply-templates select="."/></textarea></td> </tr> <tr> <td valign="middle"> <span class="caption">Save as:</span> <input type="text" name="target-file" value="{$newfile}" size="40" title="Note: to make a new directory, prepend the filename with a directory path"/> </td> <td align="right"> <input type="hidden" name="target-dir" value="{$target-dir}"/> <input type="submit" value="{$config/button[@behaviour = $behaviour]}"/> </td> </tr> </table> </form> </xsl:template> <!-- supply mode="view" templates for your project's document elements, used only in view-mode --> <xsl:template match="page" mode="view"> <div class="page"><xsl:apply-templates mode="view"/></div> </xsl:template> <xsl:template match="content" mode="view"> <div class="content"><xsl:apply-templates mode="view"/></div> </xsl:template> <xsl:template match="title" mode="view"> <h2><xsl:apply-templates/></h2> </xsl:template> <xsl:template match="para" mode="view"> <p><xsl:apply-templates/></p> </xsl:template> <!-- output the tools for this page --> <xsl:template match="tools"> <xsl:for-each select="tool"> <xsl:variable name="com" select="@command"/> <xsl:variable name="command" select="$config/command[@behaviour = $com]"/> <td width="20"> <a title="{$command/@tip}"> <xsl:attribute name="href"> <xsl:if test="$is-form = 'true'"><xsl:text>javascript:exit('</xsl:text></xsl:if> <xsl:choose> <xsl:when test="$com = 'dir'"><xsl:value-of select="$command-base"/><xsl:value-of select="$command/text()"/><xsl:value-of select="$target-dir"/></xsl:when> <xsl:otherwise><xsl:value-of select="$command-base"/><xsl:value-of select="$command/text()"/><xsl:value-of select="$target-path"/></xsl:otherwise> </xsl:choose> <xsl:if test="$is-form = 'true'"><xsl:text>');</xsl:text></xsl:if> </xsl:attribute> <img src="{concat('image/',$command/@icon)}" border="0"/> </a> </td> </xsl:for-each> </xsl:template> <!-- Displays the directory listing --> <xsl:template match="dir:directory"> <table border="0" cellspacing="0" cellpadding="5" width="100%" bgcolor="white"> <tr> <td width="20"> <a href="../" title="{$config/parent-dir/@tip}"> <img src="{concat('image/',$config/command[@behaviour = 'dir']/@icon)}" border="0"/> </a> </td> <td colspan="2"> <a href="../" title="{$config/parent-dir/@tip}"><b><xsl:value-of select="$config/parent-dir/text()"/></b></a> </td> <td><xsl:value-of select="@date"/></td> </tr> <xsl:apply-templates/> </table> </xsl:template> <!-- Displays sub-directories --> <xsl:template match="dir:directory/dir:directory"> <tr> <td></td> <td width="20" align="right"> <a href="{@name}/" title="{$config/command[@behaviour = 'dir']/@tip}"> <img src="{concat('image/',$config/command[@behaviour = 'dir']/@icon)}" border="0"/> </a> </td> <td> <a href="{@name}/" title="{$config/command[@behaviour = 'dir']/@tip}"><xsl:value-of select="@name"/></a> </td> <td> <xsl:value-of select="@date"/> </td> </tr> </xsl:template> <!-- Displays files in the directory listing --> <xsl:template match="dir:file"> <tr> <td></td> <td width="20" align="right"> <a title="{$config/command[@behaviour = 'view']/@tip}"> <xsl:attribute name="href"><xsl:value-of select="$command-base"/><xsl:value-of select="$config/command[@behaviour = 'view']/text()"/><xsl:value-of select="$target-path"/><xsl:value-of select="@name"/></xsl:attribute> <img src="{concat('image/',$config/command[@behaviour = 'view']/@icon)}" border="0"/> </a> </td> <td width="60%"> <a title="{$config/command[@behaviour = 'view']/@tip}"> <xsl:attribute name="href"><xsl:value-of select="$command-base"/><xsl:value-of select="$config/command[@behaviour = 'view']/text()"/><xsl:value-of select="$target-path"/><xsl:value-of select="@name"/></xsl:attribute> <xsl:value-of select="@name"/> </a> </td> <td> <xsl:value-of select="@date"/> </td> </tr> </xsl:template> <!-- outputs the response from FileWritingTransformer --> <xsl:template match="xfwt:write"> <table border="0" cellspacing="0" cellpadding="5" width="100%"> <tr> <td class="caption">Result</td> <td class="result"> <span class="{@result}"> <xsl:value-of select="@result"/> </span> </td> </tr> <xsl:if test="@result = 'failed'"> <tr> <td class="caption">Error</td> <td class="result"> <span class="{@result}"> <xsl:value-of select="text()"/> </span> </td> </tr> </xsl:if> <tr> <td class="caption">Source</td> <td class="result"> <xsl:value-of select="@src"/> </td> </tr> <tr> <td class="caption">Action</td> <td class="result"> <xsl:choose> <xsl:when test="@action = 'new'">New file created</xsl:when> <xsl:otherwise>Existing file overwritten</xsl:otherwise> </xsl:choose> </td> </tr> <tr> <td class="caption">Serializer</td> <td class="result"> <xsl:value-of select="@serializer"/> </td> </tr> </table> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-page2html.xsl Index: editor-page2html.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dir="http://apache.org/cocoon/directory/2.0" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0"> <!-- This is the main Editor Stylesheet It adapts itself to the particular command being sent in the 'behaviour' parameter. It uses information stored in 'editor/docs/editor.xml' to work out the commands, static strings etc. --> <xsl:include href="editor-utils.xsl"/> <!-- utility templates and variables --> <xsl:include href="editor-components.xsl"/> <!-- special display templates --> <xsl:template match="root"> <html> <head> <title><xsl:value-of select="$config/@title"/> - <xsl:value-of select="$config/title[@behaviour = $behaviour]"/> - <xsl:value-of select="title"/></title> <xsl:if test="$is-form = 'true'"> <script lang="JavaScript"><![CDATA[ <!-- var changed = false; function exit(to){ if (changed == true) { if (confirm("Are you sure you want to loose your changes?")) { document.location.href = to; } } else { document.location.href = to; } //return false; }//-->]]> </script> </xsl:if> <style><![CDATA[ <!-- a{text-decoration:none} a:hover{text-decoration:underline} body{font-family : sans-serif,Arial,Tahoma;color:black;background-color : white;} form{font-size:12px;background:#0086B2} .notify{font-size:15px;} .notes{font-size:12px;font-weight:bold;color:white;background:#0086B2} .result{font-size:12px;color:black} .failure{font-size:12px;font-weight:bold;color:red} .success{font-size:12px;color:black} .caption{font-size:12px;font-weight:bold;color:black;} textarea{font-size:12px;font-family : geneva,arial,sans-serif;} //-->]]> </style> </head> <body> <center> <h1> <xsl:value-of select="$config/@title"/> - site editor demo</h1> <table border="0" cellspacing="1" cellpadding="0" bgcolor="#0086B2" width="90%"> <tr> <td> <table border="0" cellspacing="0" cellpadding="5" width="100%" bgcolor="white"> <tr> <td class="notify"><b><xsl:value-of select="$config/notify[@behaviour = $behaviour]"/>:</b> <xsl:value-of select="$target-path"/></td> <xsl:apply-templates select="$config/tools[@behaviour = $behaviour]"/> </tr> </table> </td> </tr> <tr> <td bgcolor="white"> <xsl:choose> <xsl:when test="$behaviour = 'new' or $behaviour = 'get'"><xsl:apply-templates select="page" mode="form"/></xsl:when> <xsl:when test="$behaviour = 'put'"><xsl:apply-templates select="xfwt:write"/></xsl:when> <xsl:when test="$behaviour = 'view'"><xsl:apply-templates select="page" mode="view"/></xsl:when> <xsl:when test="$behaviour = 'dir'"><xsl:apply-templates select="dir:directory"/></xsl:when> <xsl:otherwise>Houston, we have a problem.</xsl:otherwise> </xsl:choose> </td> </tr> <tr> <td> <table border="0" cellspacing="0" cellpadding="5" width="100%" bgcolor="white"> <tr> <td class="notes"><xsl:apply-templates select="$config/notes[@behaviour = $behaviour]"/></td> </tr> </table> </td> </tr> </table> </center> <!-- debug <table> <tr> <td>target-file</td> <td><xsl:value-of select="$target-file"/></td> </tr> <tr> <td>target-dir</td> <td><xsl:value-of select="$target-dir"/></td> </tr> <tr> <td>behaviour</td> <td><xsl:value-of select="$behaviour"/></td> </tr> <tr> <td>form-name</td> <td><xsl:value-of select="$form-name"/></td> </tr> </table> --> <!-- / debug --> <p align="center"> <font size="-1"> Copyright © 1999-2002 <a href="http://www.apache.org">The Apache Software Foundation</a>.<br/> All rights reserved. </font> </p> </body> </html> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/editor-utils.xsl Index: editor-utils.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <!-- standard SiteMap parameters --> <xsl:param name="target-file"/> <xsl:param name="target-dir"/> <xsl:param name="behaviour"/> <xsl:param name="form-name"/> <!-- the aggregated editor-config document --> <xsl:variable name="config" select="/root/editor"/> <!-- the relative base for commands --> <xsl:variable name="command-base"> <xsl:if test="$behaviour != 'put'"> <xsl:call-template name="find-base"> <xsl:with-param name="dir"><xsl:value-of select="$target-dir"/></xsl:with-param> </xsl:call-template> </xsl:if> </xsl:variable> <!-- Do we have a form on this page? --> <xsl:variable name="is-form"> <xsl:choose> <xsl:when test="$behaviour = 'get' or $behaviour = 'new'">true</xsl:when> <xsl:otherwise>false</xsl:otherwise> </xsl:choose> </xsl:variable> <!-- the full target path, including filename, not including 'docs' --> <xsl:variable name="target-path"> <xsl:value-of select="$target-dir"/><xsl:value-of select="$target-file"/> </xsl:variable> <!-- what to give as the default name of a new file --> <xsl:variable name="newfile"> <xsl:choose> <xsl:when test="$target-file != ''"><xsl:value-of select="$target-file"/></xsl:when> <xsl:otherwise>new.xml</xsl:otherwise> </xsl:choose> </xsl:variable> <!-- find the command base, relative to the current folder --> <xsl:template name="find-base"> <xsl:param name="dir"/> <xsl:param name="prefix"></xsl:param> <xsl:choose> <xsl:when test="$dir != ''"> <xsl:call-template name="find-base"> <xsl:with-param name="dir"><xsl:value-of select="substring-after($dir,'/')"/></xsl:with-param> <xsl:with-param name="prefix"><xsl:value-of select="concat($prefix,'../')"/></xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise><xsl:value-of select="$prefix"/></xsl:otherwise> </xsl:choose> </xsl:template> <!-- copy anything --> <xsl:template match="@*|node()" priority="-2"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template> <xsl:template match="text()" priority="-1"><xsl:value-of select="."/></xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/simple-page2html.xsl Index: simple-page2html.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0" > <!-- this stylesheet is currently only used to display the editor/edit/welcome page --> <xsl:template match="page"> <html> <head> <title> <xsl:value-of select="title"/> </title> <style><![CDATA[ <!-- a{text-decoration:none} a:hover{text-decoration:underline} body{font-family : sans-serif,Arial,Tahoma;color:black;background-color : white;font-size:12px;} td{font-family : sans-serif,Arial,Tahoma;color:black;background-color : white;font-size:12px;} //-->]]> </style> </head> <body bgcolor="white"> <center> <h1> <xsl:value-of select="title"/> - site editor demo</h1> <table border="0" cellspacing="1" cellpadding="0" bgcolor="#0086B2" width="90%"> <tr> <td> <table border="0" cellspacing="0" cellpadding="5" width="100%" bgcolor="white"> <tr> <td class="notify"><b>Welcome to <slash-edit/></b></td> <td width="20"> <a title="View Directory listing" href="dir/"><img src="image/dir.gif" border="0"/></a> </td> <td width="20"> <a title="Make a new File" href="new/"><img src="image/new.gif" border="0"/></a> </td> </tr> </table> </td> </tr> <tr> <td bgcolor="white"> <xsl:apply-templates/> </td> </tr> <tr> <td> <table border="0" cellspacing="0" cellpadding="5" width="100%" bgcolor="white"> <tr> <td class="notes">Thanks for trying <slash-edit/></td> </tr> </table> </td> </tr> </table> </center> <p align="center"> <font size="-1"> Copyright © 1999-2002 <a href="http://www.apache.org">The Apache Software Foundation</a>.<br/> All rights reserved. </font> </p> </body> </html> </xsl:template> <xsl:template match="para"> <p align="left"> <xsl:apply-templates/> </p> </xsl:template> <xsl:template match="para/para"> <blockquote> <p align="left"> <xsl:apply-templates/> </p> </blockquote> </xsl:template> <xsl:template match="@*|node()" priority="-2"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template> <xsl:template match="text()" priority="-1"><xsl:value-of select="."/></xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/editor/stylesheets/stream2xfwt.xsl Index: stream2xfwt.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0" > <xsl:include href="editor-utils.xsl"/> <!-- You have to get pretty tricky with your XSL here to make sure your XML indentation written to file is how you like it --> <xsl:template match="root"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="page"> <xfwt:write src="{$target-path}" xml:space="preserve"> <page><xsl:copy-of select="@*"/> <title><xsl:value-of select="title[1]"/></title> <content><xsl:copy-of select="content/@*"/> <xsl:for-each select="content[1]/para"><para><xsl:copy-of select="@*"/><xsl:apply-templates/></para> </xsl:for-each> </content> </page> </xfwt:write> </xsl:template> </xsl:stylesheet> 1.3 +1 -1 xml-cocoon2/src/scratchpad/webapp/mount/editor/stylesheets/simple-page2html.xsl Index: simple-page2html.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/mount/editor/stylesheets/simple-page2html.xsl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- simple-page2html.xsl 16 Feb 2002 20:21:41 -0000 1.2 +++ simple-page2html.xsl 22 Feb 2002 22:15:35 -0000 1.3 @@ -25,7 +25,7 @@ <xsl:choose> <xsl:when test="$view-source"> <a> - <xsl:attribute name="href">../../view-source?filename=mount/editor/<xsl:value-of select="$view-source"/></xsl:attribute> + <xsl:attribute name="href">../../../view-source?filename=mount/editor/<xsl:value-of select="$view-source"/></xsl:attribute> <xsl:attribute name="target">xfwt</xsl:attribute> <xsl:apply-templates/> </a> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/include-me.xml Index: include-me.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:xl="http://www.w3.org/1999/xlink"> <title>Include me in Test Result 4</title> <content> <para>This is an external file that is to be XIncluded by 'test4' to make a new document.</para> <para>This is an element in the <link xl:to="nowhere">XLink Namespace</link>.</para> <para> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </para><para> Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. </para><para> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </para><para> Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. </para><para> Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. </para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/make-page.xsl Index: make-page.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0" > <xsl:template match="page"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="make-page"> <xfwt:write src="tests/result5.xml" xml:space="preserve"> <page xmlns:xl="http://www.w3.org/1999/xlink"> <title>Result from - <xsl:value-of select="/page/title"/></title> <content> <para>This file was assembled by XSLT from elements in <a href="../../view-source?filename=mount/editor/docs/test5.xml">test5</a></para> <para>Here are some paragraphs copied from there: <import> <xsl:for-each select="/page/content/para"> <xsl:copy><xsl:apply-templates/></xsl:copy> </xsl:for-each> </import> </para> <para>And <link xl:to="nowhere">here</link> is another fake XLink, for luck</para> </content> </page> </xfwt:write> </xsl:template> <xsl:template match="@*|node()" priority="-2"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="text()" priority="-1"><xsl:value-of select="."/></xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test1.xml Index: test1.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0"> <title>FileWritingTransformer Test Page 1</title> <content> <para><b>Test</b>: Basic</para> <para>This test should have written a file called result1.xml, in the same directory as this.</para> <para>The file's content should come from the xml below.</para> <para>The XML is:</para> <para> <pre> <xfwt:write src="tests/result1.xml"> <page> <title>FileWritingTransformer Test Result 1</title> <content> <para>Congratulations!</para> </content> </page> </xfwt:write> </pre> </para> <xfwt:write src="tests/result1.xml"> <page> <title>FileWritingTransformer Test Result 1</title> <content> <para>Congratulations!</para> </content> </page> </xfwt:write> <para>Have a <a href="../result/1">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test2.xml Index: test2.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0" > <title>FileWritingTransformer Test Page 2</title> <content> <para><b>Test</b>: Namespace</para> <para>This test should have written a file called result2.xml, in the same directory as this.</para> <para>The file's content should come from the xml below.</para> <para>The XML is:</para> <para> <pre> <xfwt:write src="tests/result2.xml"> <page xmlns:xl="http://www.w3.org/1999/xlink"> <title>FileWritingTransformer Test Result 2</title> <content> <para>Congratulations!</para> <para><link xl:to="test2">I am in the XLink NameSpace</link></para> </content> </page> </xfwt:write> </pre> </para> <para>The namespace is: http://www.w3.org/1999/xlink</para> <xfwt:write src="tests/result2.xml"> <page xmlns:xl="http://www.w3.org/1999/xlink"> <title>FileWritingTransformer Test Result 2</title> <content> <para>Congratulations!</para> <para><link xl:to="test/2">I am in the XLink NameSpace</link></para> </content> </page> </xfwt:write> <para>Have a <a href="../result/2">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test3.xml Index: test3.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page page="blah" > <title>FileWritingTransformer Test Page 3!!!!!</title> <content> <para><b>Test</b>: New Folder Test</para> <para>This test should have written a file called result3.xml, in a directory that did not originally exist.</para> <para>The file's content should come from the xml below.</para> <para>The XML is:</para> <para> <pre> <xfwt:write src="tests/newfolder/result3.xml"> <page> <title>FileWritingTransformer Test Result 3</title> <content> <para>Congratulations!</para> </content> </page> </xfwt:write> </pre> </para> <xfwt:write src="tests/newfolder/result3.xml" xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0"> <page> <title>FileWritingTransformer Test Result 3</title> <content> <para>Congratulations!</para> </content> </page> </xfwt:write> <para>Have a <a href="../result/newfolder/3">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test4.xml Index: test4.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page xmlns:xfwt="http://apache.org/cocoon/xfwt/1.0" xmlns:ci="http://apache.org/cocoon/include/1.0" > <title>FileWritingTransformer Test Page 4</title> <content> <para><b>Test</b>: XInclude Test</para> <para>This test should have written a file called result4.xml, with the contents coming from the file <a href="../../../view-source?filename=mount/editor/tests/include-me.xml" target="xfwt">include-me.xml</a>.</para> <para>The file's content is setup from the xml below.</para> <para>The XML is:</para> <para> <pre> <xfwt:write src="tests/result4.xml"> <ci:include src="tests/include.xml"/> </xfwt:write> </pre> </para> <xfwt:write src="tests/result4.xml"> <ci:include src="tests/include-me.xml"/> </xfwt:write> <para>Have a <a href="../result/4">look!</a></para> </content> </page> 1.1 xml-cocoon2/src/scratchpad/webapp/mount/editor/tests/test5.xml Index: test5.xml =================================================================== <?xml version="1.0" encoding="utf-8"?> <page> <title>FileWritingTransformer Test Page 5</title> <content> <para><b>Test</b>: XSLT Test</para> <para>This test should have written a file called result5.xml, with the contents being generated by a <a href="../../../view-source?filename=mount/editor/tests/make-page.xsl" target="xfwt">StyleSheet</a>.</para> <para>This also tests setting the serializer from the invocation of FileWritingTransformer in the SiteMap.</para> <para>Anyway, the big issue here is that it is tricky to write XSL that gives you a clean XML indentation in your file. You can probably see how I have not quite got it right yet ;)</para> <para>The file's content is setup from the xml below.</para> <para>The XML is:</para> <para> <pre> <make-page/> </pre> </para> <make-page/> <para>Have a <a href="../result/5">look!</a></para> </content> </page>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]