[CPS-devel] CPSShema and managment of relations between objects

Anahide Tchertchian at at nuxeo.com
Thu Aug 10 21:17:11 CEST 2006


Santi Camps a écrit :
> Sure.   The main reason to work with CPSSchemas is that I want an
> administrator be able to define relation fields, just saying "the
> field customer of the invoice schema will be a reference to an object
> with portal_type='Customer'  "    CPSRelation is probably a better
> way, but needs some programming on each new type of objects using
> relations, and doing it in CPSSchemas allows an advanced user to
> define new types an relations on its own.

I'm not sure I understand your need, maybe it's just a user-interface 
issue ?

For CPSComment that was not necessary, but I've been thinking of making 
it possible to manage relations using CPSSchemas fields, schemas, 
widgets and layouts.
I even did some changes in the code to be able to define a storage 
adapter specific to a schema. In my mind, a new type of schema, 
inheritating from base schema class, would be used to commit (via a 
standard datamodel) relations to graphs instead of setting attributes to 
a document. Standard fields, widgets and layouts could be used.

For the moment I did not really have this need. I sometimes use the 
standard layout/schema mechanism to describe a relation to be set, but I 
never commit any datamodel: instead I call a specific API that will do 
the job.

Some of the issues is that a node is really described by its type 
(resource, literal... etc using the RDF jargon), sometimes its prefix 
(e.g its RDF namespace) if you'd like to handle a specific resource, and 
then its value. I did some job to be able to address these problems in 
the abstraction branch: making the interface between Python classes and 
RDF nodes is not so easy and requires configuring CPSRelation graphs 
carefully.

Some other issues would need to be addressed because updating a relation 
  is really a "remove old relation" and *then* "add new relation" 
operation for RDF graphs. So I guess the datamodel should also remember 
the old values to be able to delete them in the graph.

And last but not least, sometimes relations are not managed in a 
document context, so it would not make sense to define schemas/layouts 
for relations management in a document type definition.

>> When comments or commented documents are deleted, Z3 events allow to
>> delete now useless relations.
> 
> I have implemented the opposite feature.   When a dead document (with
> no proxies) is related with a live document, at least last revision of
> the document should remain in the portal_repository, so its
> information could be viewed from the live document.    When all
> referencing objects are also dead, then the documents could be purged
> from the repository.

Yes, that makes sense too. Z3 events are really powerfull to address 
this kind of issues :)
I guess you could query a CPSRelation graph, and see if a resource is 
still in the graph before allowing it to be deleted.

Regards,

-- 
Anahide Tchertchian, Nuxeo
Mail: at at nuxeo.com - Tel: +33 (0)1 40 33 71 60
http://www.nuxeo.com - http://www.cps-project.org


More information about the cps-devel mailing list

This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.