Re: Fileutils

First off, I think file utils types of steps are *essential*.   I cant 
imagine writing any kind of 'real world' script that doesnt require dealing
with these kinds of operations (copy/move/exists/is-dir etc).  So +1 for 
working on this ! I think that could go a long ways towards making xproc
usable as something that can fully replace a script instead of be a part 
of a script.

One titdbit of an oppinion.  I suggest the difference between "move" and 
"rename" is archaic and unnecessary.
you only really need "move" ...




David A. Lee
dlee@calldei.com  
http://www.calldei.com
http://www.xmlsh.org
812-482-5224



Norman Walsh wrote:
> Dave's Ant/XProc thread of a few days ago makes it clear that some
> pipelines are going to want to interact with the local filesystem.
>
> This seems like the ideal place for exproc; these steps aren't part of
> the XProc 1.0 standard, but there's no reason we implementors can't
> agree on their semantics and what they're called.
>
> Before I try to write these up as extensions, let's see if we can all
> agree on the semantics that we think would be most useful. Here's what
> I've implemented so far, with a few notes.
>
>     <p:library xmlns:p="http://www.w3.org/ns/xproc"
>                xmlns:cxf="http://xmlcalabash.com/ns/extensions/fileutils"
>                xmlns:ml="http://xmlcalabash.com/ns/extensions/marklogic"
>                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>     
> These are in my own extension namespace, I'll move them to an exproc
> namespace when there's consensus.
>
>     <p:documentation xmlns="http://www.w3.org/1999/xhtml">
>     <div>
>     <h1>XML Calabash Fileutils Library</h1>
>     <h2>Version 1.0</h2>
>     <p>The steps defined in this library are implemented in
>     <a href="http://xmlcalabash.com/">XML Calabash</a>.
>     </p>
>     </div>
>     </p:documentation>
>     
> For better or worse, I've given every step a single non-primary output
> port. None of them has an input port.
>
> All of the steps may fail due to security constraints. In XML
> Calabash, they all fail if you run the pipeline in "safe" mode.
>
>     <p:declare-step type="cxf:exists">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>     
> Returns <c:result>true</c:result> if the specified file exists,
> <c:result>false</c:result> otherwise.
>
> Q: Should "file" be made absolute wrt to the current base URI, or left
> unchanged (effectively making it relative to the implementations
> notion of current working directory)?
>
>     <p:declare-step type="cxf:is-readable">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns true if the file is readable.
>     
>     <p:declare-step type="cxf:is-writable">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns true if the file is writable.
>     
>     <p:declare-step type="cxf:is-directory">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>     
> Returns true if the file is a directory.
>
>     <p:declare-step type="cxf:is-file">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns true if the file is a file (is not a directory).
>     
>     <p:declare-step type="cxf:is-hidden">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns true if the file is hidden (what constitutes "hidden" is
> implementation-defined).
>     
>     <p:declare-step type="cxf:last-modified">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing an xs:dateTime of the files last
> modified date. The xs:dateTime MUST be expressed in the UTC timezone.
> The step fails if the specified file does not exist.
>     
>     <p:declare-step type="cxf:size">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing the size in bytes of the specified
> file. The step fails if the specified file does not exist.
>     
>     <p:declare-step type="cxf:delete">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing the absolute filename of the deleted
> file. The step fails if the file does not exist or if it cannot be
> deleted.
>     
>     <p:declare-step type="cxf:mkdir">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>     </p:declare-step>
>
> Creates a directory with the name spacified in the "file" option. If
> the name includes more than one directory component, all of the
> intermediate components are created. The path separator is
> implementation-defined. Returns a <c:result> containing the absolute
> filename of the directory created. The step fails if the directory
> cannot be created.
>     
>     <p:declare-step type="cxf:copy">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>       <p:option name="target" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing the absolute filename of the target
> file. The step fails if the file does not exist or if it cannot be
> copied to the specified target.
>     
>     <p:declare-step type="cxf:rename">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>       <p:option name="target" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing the absolute filename of the target
> file. The step fails if the file does not exist, if the target *does*
> exist, or if the file cannot be renamed.
>     
>     <p:declare-step type="cxf:move">
>       <p:output port="result" primary="false"/>
>       <p:option name="file" required="true"/>
>       <p:option name="target" required="true"/>
>     </p:declare-step>
>
> Returns a <c:result> containing the absolute filename of the target
> file. The step fails if the file does not exist, if the file is a
> directory, if the target file cannot be created, or if the file cannot
> be deleted.
>     
>     </p:library>
>
> Comments?
>
>                                         Be seeing you,
>                                           norm
>
>   

Received on Monday, 25 May 2009 21:22:29 UTC