[xwiki-dev] [ArchitectureV2] Model proposal

Ludovic Dubost ludovic at xwiki.com
Tue May 29 20:55:35 CEST 2007



Hi,

Concerning the XWiki model and the JCR model, this is a really 
interesting and important discussion..
There are quite a few benefits to have our objects comply with the JCR 
model. I've thought a few times about and XWiki model on top of JCR, and 
this not only for storage.
I don't think we should view right away JCR as "storage".. We can 
definitively view it as an API also..

The main question we should ask ourselves is:

1/ Can we maintain the old XWiki api to have a layer of compatibility on 
top of an XWiki model being a superset of the JCR model.
2/ Can we support a different storage mecanism using the JCR model than 
the JCR storage API
3/ Can we extend the JCR model with an XWiki model
4/ Do we like the JCR model (is it a api that is nice to use)
5/ How would the XWiki scripting api (new version, not compatible) look 
like using the JCR model

Concerning the mapping of XWiki<->JCR. I'm not sure that Farm is JCR 
engine..
In the current usage of the Farm, we have different DBs for different 
wikis in a farm.. Are we sure we can get this behavior from 
engine/repository

Farm <=> JCR engine
Wiki <=> Repository
Space <=> Node

Ludovic

Vincent Massol a écrit :
> Hi everyone,
>
> On May 29, 2007, at 5:43 PM, Stéphane Laurière wrote:
>
>> Hi Vincent, Sergiu and all,
>>
>> Some remarks below after having discussed today with Mikhail Kotelnikov
>> (in CC, author of WikiModel, co-founder of Cognium Systems, a partner of
>> Nepomuk that XWiki company is part of [3]).
>>
>> [1] 
>> http://nepomuk.semanticdesktop.org/xwiki/bin/view/Components/WikiModel
>> * WikiModel v2 contains an alpha version of a JavaCC grammar for the
>> XWiki syntax. WikiModelv2 is common event model working currently with
>> several wiki syntaxes: creole, gwiki, jspwiki, mediawiki, xwiki.
>>
>> [2] WikiModel v2 source code download:
>> http://nepomuk.semanticdesktop.org/xwiki/bin/download/Components/WikiModel/WikiModelV2.zip 
>>
>>
>> [3] http://nepomuk.semanticdesktop.org
>>
>> [4] http://www.cogniumsystems.com
>>
>> The topic is not easy, we are aware several strategies are possible,
>> here's a contribution :-)
>>
>> Sergiu Dumitriu wrote:
>>> On 5/28/07, Vincent Massol <vincent at massol.net> wrote:
>>>> Hi,
>>>> Starting from today I'm going to spend some time every week on the
>>>>  V2 Architecture/Redesign. Today I'd like to start at the heart of
>>>>  the topic with the domain model. Here's my proposal:
>>>> * Model classes are classes representing the XWiki model. The main 
>>>> classes are: - Farm - Wiki - Space - Document - XObject - XClass
>>> Attachment
>>
>>
>> Couldn't we try to merge the Document, XObject and Attachment classes
>> into a single class, along the lines of the JCR API where there is
>> mainly a Node class that can have various types and various properties?
>> An Attachment would be represented by a Node with a property containing
>> a binary stream and possibly other properties such as the text
>> description, the title etc. The advantage of this approach is to
>> offer a simplified and more flexible model.
>
> [snip]
>
> That's an interesting idea. However for me the relationship with JCR 
> is not an advantage and certainly not a requirement. We want our model 
> classes to be independent on any storage mechanism. However from a 
> design perspective it's interesting to evaluate how the model classes 
> could look like if they were using a Node API similar in design to the 
> JCR (which I don't know so well but I guess it's similar to the DOM 
> API too).
>
> I can see some pros and cons:
>
> Pros:
> - flexibility in that it's easy to add a new node type
> - genericity in that it's a hierarchical structure (a graph) and it 
> would support nested nodes
>
> Cons:
> - less strongly typed API in general a more generic API vs a more 
> business oriented API with the API I proposed. Compare 
> Space.getDocuments() to node.getElementsByType(NodeType.DOCUMENT). Of 
> course I guess we could add a SpaceNode class that implements the Node 
> interface and that method could then have a getDocuments() API which 
> internally would be implemented as 
> getElementsByType(NodeType.DOCUMENT). There's still the problem of 
> doing "if"s on the node type to cast to the correct specific node 
> class. Personally I've always found the DOM API to be a real pain 
> (which is probably why there are frameworks like JDOM, DOM4J, etc).
> - There are business APIs to implement too (not just navigating) and 
> these APIs don't make much sense applied to a Node. They do make sense 
> applied to business objects.
>
> We need to discuss this more and I need to think more about this too 
> to evaluate the consequences.
>
> Thanks for this interesting discussion Stephane
> -Vincent
>
>
> ------------------------------------------------------------------------
>
>
> --
> You receive this message as a subscriber of the xwiki-dev at objectweb.org mailing list.
> To unsubscribe: mailto:xwiki-dev-unsubscribe at objectweb.org
> For general help: mailto:sympa at objectweb.org?subject=help
> ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>   


-- 
Ludovic Dubost
Blog: http://www.ludovic.org/blog/
XWiki: http://www.xwiki.com
Skype: ldubost GTalk: ldubost 
AIM: nvludo Yahoo: ludovic





More information about the devs mailing list