Hi Thomas, On 01/19/2010 12:29 PM, Thomas Mortagne wrote: > Did not seen there was two threads, reproducing my comments here: > > On Mon, Jan 18, 2010 at 15:54, Anca Luca<ancapaula.l...@xwiki.com> wrote: >> Hi devs, >> >> to resume, and try to converge to an implementable version, I propose: >> >> 1/ adding only OBJECT and PROPERTY EntityTypes for the moment, referring to >> an >> object instance and a property instance in a document (a property ref would >> have >> an object as a parent which would have a document reference as a parent), and >> limiting the implementation to references to properties of object instances >> (leaving aside type definitions ftm). >> >> here's my +1 for this. > > +1 > >> >> 2/ using a serialization of the form >> wiki:Space.Page^className[objectnumber]#property and > > +1 for className[objectnumber] syntax > +0.5 for theses separator, at least i don't see any specific issue > that theses separators could cause, i think i would have done > wiki:Space.Page#className[objectnumber]^property because ^ "sounds" > nicer to me (but i don't have more detailed argument ;)) > >> >> a) using indexed ('multivalued') references, adding an additional >> IndexedEntityReference class, to which API caller would have to cast. >> ObjectReference would be such an IndexedEntityReference and provide object >> related helper functions. >> >> b) className[objectnumber] is used as an 'object name', it would be the name >> of >> the object reference, and it would be the caller of the generic API that >> would >> have to parse& serialize this kind of strings to actually extract classname >> and >> object index. However, this would again be all hidden behind the >> ObjectReference >> API. >> >> I'm 0.5 and 0.5 between the two, any would suit my purpose. >> >> An additional question is what would wiki:Space.Page^className (and >> wiki:Space.Page^className#property) mean: >> i) nothing, we consider it as invalid reference, we'll fix that later, we >> keep >> it simple ftm >> >> my +1 goes for this > > I think that's the safest for now until we think more about the model > et what we want for use case like that. I doubt it's really needed > yet. > >> >> ii) all objects of class className in the document >> > > That would be a major change in the apis if we make EntityReference > able to point to several entities. I think i would prefer > EntityReference mean only one reference but not 100% sure, in any case > this need more thinking so again +1 of i) > >> iii) first object of that class in the document (as >> XWikiDocument#getObject(className) does) >> > > At least this follow the current general behavior in BaseObject/Object API so > a user would not be too lost. > >> iv) a shortcut for wiki:Space.Page^className[0] (which, note, does not >> necessarily mean the first object in that document, since indexing of objs >> in a >> document is not recomputed when objects are deleted). >> > > 0 could point to nothing i think, "first object" make more sense if we > want it to point to one entity.
but anything could potentially point to nothing, the class could not exist, or the object or the property name (or a document could not exist), it's more about the semantic that we associate with such a reference. The 0 value came rather from the potential generic approach that an indexed reference which would have no specified index could be considered as having the index 0. However, I think it should be the 'first' object, since it is a much more used reference, and also it's the way the API works (if you ask a prop to be displayed for a doc, for example, the first object of that class will be used), so users are accustomed to it. Thanks, Anca > >> WDYT? >> >> Thanks, >> Anca >> >> On 01/13/2010 02:42 PM, Anca Luca wrote: >>> Hi devs, >>> >>> Short story: >>> 1/ add the CLASS, OBJECT, PROPERTY EntityTypes in the model >>> >>> +1 >>> >>> 2/ serialization for referencing a property of an object >>> a) wiki:Space.Page^className[objectNumber]#property >>> b) wiki:Space.Page^className#objectNumber$property >>> +0.75 for b) >>> >>> Long story: >>> >>> 1/ I would need to extend the EntityReference to be able to target a >>> property in an object in a document. >>> For this, I will need to add >>> >>> /** >>> * Represents a Class Entity >>> */ >>> CLASS, >>> >>> /** >>> * Represents an Object Entity. >>> */ >>> OBJECT, >>> >>> /** >>> * Represents a Property Entity >>> */ >>> PROPERTY, >>> >>> in the EntityType. Although I would prefer an extensible framework that >>> would allow to extend the possible entity types without changing an enum >>> in the platform (for any API user to be able to define its own >>> references), I think this is fairly extensible (these are key concepts >>> in the xwiki model and I don't think they would be changed that soon, >>> and their interpretation is flexible, they could be combined with any >>> parent to generate either references to class definitions or instances). >>> here's my +1 for this. >>> >>> 2/ I would also need a 'standard' string serialization for these. Now, >>> there's also the option to do it in my own module (annotations) because >>> only I need it ftm, but I prefer to have a platform wide approach. Opinions? >>> There are 2 choices, with a potentially different combination of separators: >>> >>> a/ wiki:Space.Page^className[objectNumber]#property >>> >>> pros: it's a suggestive way to access objects by number ([] is the >>> standard syntax for array indexed access and the objects are accessed by >>> index), [] is supported by JCR so maybe we should support it too >>> cons: [] is somewhat inconsistent with all other separators which are >>> just one separator, to the left (right) of the entity, harder to >>> implement the [] separators on the current framework >>> >>> b/ wiki:Space.Page^className#objectNumber$property >>> >>> pros: inline with the separator usage we already have (and easier to >>> implement for this reason), could be easier refactored to contain an >>> object name instead of the number >>> cons: $ separator can collide with velocity syntax (can potentially >>> cause trouble when used in velocity -- an alternative could be the pipe >>> |), could be harder to drop the object number part of the reference to >>> refer a property in a class (if wanted, in the future) >>> >>> I have no other argument between a) and b) but the implementation speed >>> one, so I'd go for a b)-like approach, in the spirit of the current >>> separators. >>> >>> WDYT? >>> >>> Thanks, >>> Anca >>> >>> _______________________________________________ >>> devs mailing list >>> devs@xwiki.org >>> http://lists.xwiki.org/mailman/listinfo/devs >> _______________________________________________ >> devs mailing list >> devs@xwiki.org >> http://lists.xwiki.org/mailman/listinfo/devs >> > > > _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs