AxKit/App/TABOO version 0.095 ============================= INTRODUCTION AxKit::App::TABOO is a object oriented approach to creating a publishing system on the top of AxKit, the XML Application Server. The two O's thus stands for Object Oriented, AB for AxKit-Based. I don't know what the T stands for yet, suggestions are welcome! It is a fundamental design choice with TABOO that all data is to be abstracted to objects. I noticed while looking at other people's code, that though it was a lot of interesting code, it would be rather hard to integrate all the interesting parts into a coherent whole. Furthermore, everybody has their own way of storing data, and scattered files or different databases didn't seem right to me. With TABOO, everything that interacts with AxKit just interacts with the Data objects. That means, if you don't want to store things in the PostgreSQL database my Data objects use, you could always subclass it, rewrite the classes or whatever. You would mostly just have to rewrite the load method. It is also the Data object's job to create XML of its own data. The intention is to write Data objects for every kind of thing you might want to do. From the start, there will be Slashdot-type stories of varying length, with comments. These are ever-changing in the sense that people can come in an add comments at any time. The other thing we start out with is more static and longer articles. It is the intention, however, that TABOO should be a framework where one can add a Wiki, a webshop (which is a work now in progress, some code was in earlier distros but has been removed now), etc. The AxKit::App::TABOO::User class will then be reused and probably subclassed with e.g. a Customer class (now being done), but the datasource will be the same. TABOO makes extensive use of Providers. That is mostly because I like the abstraction and direct control of URIs that Providers provide. It makes it easy to create a framework where URIs are sensible and should be easy to maintain for foreseeable future. Also, there is no markup in the code, that's also rather important to make it maintainable. For the stuff that goes into the database, OTOH, XSP is used, and several taglibs are used. There is now also some cascading stylesheets, just to do minimal formatting. It isn't intended to make it pretty, I'm not actually a designer, but to give an idea of how the blocks are intended. I'll get a more colorful example in soon. This is a early release, an alpha in that it does some useful things. It is nearly a useable framework for posting news-stories. It consists mainly of News and NewsList providers that constructs objects, instruct them to load their data based on the URI, get them to write their own XML, and pass this to some XSLT stylesheets, which makes some presentable XHTML. There are also several XSP taglibs, and quite a lot of XSP pages and XSL Transformations are now included in the distribution. There is also some user-management code, including authentication and authorization, to allow adding new users and editing the information of existing users. Plural objects is a conceptual step up which has recently been introduced to allow manipulation of more than one Data object. TABOO can now also list News stories with the NewsList Provider, and there is a rudimentary front page, which is an aggregate of a newslist. The "comments" code has been rewritten and stylesheets has been begun, but needs more work, and posting comments is now supported, but it needs some polishing. TABOO can run on different virtual hosts and operate on different databases. It can also take user-entered text that has been marked up with some simple syntax like Textile http://www.textism.com/tools/textile/ and convert that to HTML. I'm following the mantra "release early", and have made everything I've done available from the start? From 0.09, it has evolved into something I can put on a website and have random people come by and use, and soon, I'll call it a beta of some sort... I'll be thrilled if other hackers are willing to poke at TABOO allready at this point! INSTALLATION To install this module use CPAN or CPANPLUS tools or type the following: perl Makefile.PL make make test make install There are various things that should be done to the get the rest running, such as copying over the htdocs and creating the database, see inline docs for details. DEPENDENCIES You will need at least Perl 5.7.3 to use TABOO. This is due to Unicode-issues that is not well supported in earlier releases. This module requires these other modules and libraries: - AxKit, of course! - DBI - DBD::Pg. You need at least 1.32. Earlier versions has problems with SQL3 Arrays, but it may be possible to get away with it. - Encode - Time::Piece - Class::Data::Inheritable - AxKit::XSP::QueryParam - AxKit::XSP::BasicSession, you must have 0.21 or later. - Formatter::HTML::Textile for formatting. - Crypt::GeneratePassword for generating passwords to send to users. - AxKit::XSP::Sendmail to send e-mail to new users. - Apache::AxKit::Plugin::AddXSLParams::Request for virtual hosts, but it is easy to remove this dependency if one wishes. - Data::Dumper lists out debugging information, but can be removed. - AxKit will bring along XML::LibXML, and while you could use any LibXSLT module supported by AxKit, I recommend XML::LibXSLT, and to ease installation, I made it a prerequisite. - Apache::AxKit::Plugin::Param::Expr is needed only to use different languages, but I made that a prerequisite too for now. You will also need some XML libraries, for example libxml2 and libxslt. You will probably have gotten these along with AxKit. TABOO should be able to use any AxKit uses, with the exception that it makes use of some self-defined EXSLT, so you'll need a library that supports that. SUPPORT There is a list taboo-dev@kjernsmo.net you can subscribe to at http://lists.kjernsmo.net/mailman/listinfo/taboo-dev Beware that TABOO is in development, so it is not yet software that you just install and use. COPYRIGHT AND LICENCE Copyright (c) 2003-2004 Kjetil Kjernsmo. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.