>    - provide access to relational database towards a dedicated fs (with XML
>    rappresentation of query results, but dont know yet about data manipulation
>    and error handling)

an rdbms interface will be messy; maybe just try to get a ODBC client
library.  most of the time what is really needed is fast lookup;
something like PQ would do.  a lot of places use DB to store things
that naturally belong in a file heirarchy.

>    - provide a filesystem capable of transform an XML file with an XSLT
>    template, so that dbfs and rest webservices could be handled the same way.

i see these as filters used by filterfs.  the filter to file mapping
might be doable using plumber.

>    - provide a filesystem able to transform a TAL (tag attribute language)
>    template to XSLT, allowing graphic designer to directly transform the data
>    provided by programmers in XML without knowing XSLT (just tal and 
> eventually
>    xpath)
>    - implement url rewrite (if missing)
>    - glue all together with a set of filesystem/applications able to handle
>    the business logic (for example a simpe ecommerce would have a cataloguefs
>    and a shoppingcartfs) rapidly written towards a dedicated library (may be
>    something like your cgifs?)

it's easy to develop libraries for cgifs.  it's all in rc.  if you
need something special, write a C utility that does the
specific thing.

>    - provide a "sessionfs" able to mount (unmount would be necessary? I
>    think so...) the correct filesystems/applications for each visitor.

srvfs posted to /srv will do; a httpd running with the proper
permissions wont have a problem mounting what's posted in /srv.  what
i have in mind for sessionfs is to keep a stateless http session
(using session id's that are consecutive and time sensitive) to carry
a conversation with factotum.

fyi, here's the rc version of 'save' that uses cgifs:

#!/bin/rc

. /lib/cgifs/sandbox

fn logit {
        echo $* > log
}

switch (`{cat request/method}) {
case GET POST
        foo=`{cat request/info}
        if (! ~ $#foo 0) {
                foo=`{echo $foo | sed 's/^.//'}
                logit $foo
                foo=`{basename $foo '.html'}
                logit $foo
                if (test -f /www/save/^$foo^'.data') {
                        bar=$foo^'.data'
                        foo=$foo^'.html'
                        switch (`{cat request/method}) {
                        case POST
                                str = `{cat request/body}
                        case *
                                str = `{cat request/query}
                        }
                        echo at `{date -n} $str >> /www/save/^$bar
                        rit -D /www/save/^$foo > response/body
                }
                if not {
                        echo $foo does not exist > response/body
                }
        }
        echo -n text/html > response/content-type
        echo -n 200 OK > response/reply

case *
        echo -n text/html > response/content-type
        echo -n 405 Method Not Allowed > response/reply
}
exit 0


Reply via email to