On 02.Oct.2002 -- 06:38 PM, Stefano Mazzocchi wrote:
> Quoting Jeff Turner <[EMAIL PROTECTED]>:
> 
> > Ehm.. more code, less talk :)
> 
> Before you guys start coding something that looks like FS from 10 Km, please, 
> make a formal votation by writing a small description of what you are trying to 
> do. TIA
> 

Prerequisite
========================================================================
The code base now contains for some time so called InputModules
(together with their OutputModule and some database autoincrement
module friends) as an abstract, uniform method to access small data
items. Examples are request attributes, request parameters, session
attributes &c. 

With this other components can be created to be independent of the
data source, thus reducing the the number of components that share
functionality but differ with respect to data sources to one
implementation.

Since the interface is simple, consisting only of getAttribute(),
getAttributeValues(), and getAttributeNames(), it is trivial for a
user to implement custom InputModules and combine them with existing
functionality or vice versa.

Some InputModules provide simple transformation / interpretation of
data obtained from other InputMoudles -- effectively chaining
modules. Since they are composed of other modules, I like to call them
"meta" modules. This is done without change to the original
interface. Examples are the DigestMetaModule or the
DefaultsMetaModule.

InputModules are currently used: sitemap (treeprocessor in 2.1,
compiled in 2.0): "{request-param:foo}", modular.Database*Action,
modular.WildcardMatcher, modular.CachingWildcardMatcher, flow



The Case
========================================================================
Now, since important objects like the request object offer many kinds
of data, Konstantin came up with a JXPath based InputModule for the
request object, simplifying things even further, because no separate
modules are needed for request parameters, attributes, headers, &c.

Jeff provided a patch for a JXPath based module that operates on
XML. This lead to a discussion 

a) if JXPath should be 
a1) a meta module or 
a2) property of specific modules.

b) how chaining should be done
b1) as property of individual modules (i.e. through inheritance)
b2) as meta module (i.e. through composition)

c) the method getAttributeNames()
c1) is superfluous and should be removed
c2) is useful and should stay

d) when chaining modules, should it be possible to augment / replace
the attribute name.
d1) yes
d2) no



The State Of The Discussion
========================================================================
For a) we settled on a2) since otherwise we would need a way to pass
the request object to the next module which would not fit into the
current interface. Besides, JXPath may not be useful for each and
every module.

For c) we settled on c2) with a lose contract, i.e. it's not always
guaranteed to return an enumeration that contains all possible
attribute names. This is mostly because it would be difficult to
enumerate all XPaths expressions.

For d) we agree on d1)

For b) we still have a dispute. Jeff believes this is easily
achievable through inheritance and would make sense for every module
to obtain values from other modules if the attriibute is absent. I
believe that this is a completely different concern and should be
handled with a meta module that combines several other modules and
e.g. uses the first attribute present. In addition, I feel that this
way it would be easier to code new custom modules.

Please see original thread for arguments in detail
http://marc.theaimsgroup.com/?l=forrest-dev&m=103338039706391&w=2
and
http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=103354978904793&w=2



The Votes
========================================================================
Ladies and Gentlemen, please cast your votes.

        Chris.
-- 
C h r i s t i a n       H a u l
[EMAIL PROTECTED]
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to