I have to admit, I'm not a fan of using SMW and SF for social-networking-type features like favorites, forums, ratings, etc. The semantic content of a page should reflect information in the real world, not wiki-specific information, in my opinion (although the "Modification date" special property in SMW already breaks that).
In any case - wow, I'm impressed by what you've accomplished. For the problem with the radiobutton not showing up - it sounds like the form can't figure out the corresponding property from the template, which isn't too surprising. If you add "|property=Operation" to the field declaration in the form, it should work. For the other issues - what's the difference (to you) between "default=" and "preload="? -Yaron On Thu, Jul 16, 2009 at 11:13 AM, najevi <naj...@gmail.com> wrote: > > For the past several days I've been slowly but surely figuring out how > to emulate something that resembles the classic "Add to my favorites" > and "Remove from my favorites" links for wiki articles using semantic > data. After some long and quite spells at IRC #semanticmediawiki, > today I learned about this SF mailing list so I am polling you all to > find out if anybody recognizes the same (or similar) design goal and > can offer me some advice. > > Overview: > I am planning for a collection of wiki articles describing "skins" for > each of several "boat" models. Those skinned boats are raced on > "tracks" which also have there own wiki articles describing each > track. So I will have: > 3 categories of wiki articles: {Boats, Skins, Tracks} > 3 templates: Template:Skin, Template:Boat, Template:Track > which are used, respectively, by: > 3 forms: Form:Skin, Form:Boat, Form:Track > all to facilitate the creating of each type of wiki article. That was > the easy part! > > Each visitor to the wiki has their own personal favorites and would > like to bookmark/tag/record those favorites for later query. > > * The wiki hosting service is Wikia and they happen to have a 5 > star article rating system which does seem to store each user's > personal 1..5 rating score for a page in a list ... however, that does > not appear to be linked in any way to semantic data or semantic > queries. (I am reasonably certain this is a dead end - but I mention > it just in case someone reading this knows better.) > > My current best effort > So here's what I've been able to do with semantic data and later on > I'll describe where I get stuck. The core of my current best solution > is that each wiki article has obfuscated semantic data in the form of > a comma-delimited list of users who have marked that article as one of > ther favorite articles. (Am I going to run into some limit as to how > many strings can be in that comma delimited list?) > > To manipulate that list of usernames, I define 3 properties: > Property:Favored by [[has type:string]] (this will become the list of > users who have marked the current page as a favorite) > Property:This user [[has type:string]] > Property:Operation [[has type:string]] [[allows value::Add]] [[allows > value::Remove]] > and 1 template: > Template:Favorites > which is used by > Form:Favorites > > Form:Favorites is a partial form designed to manipulate only the 3 > properties listed above. Notice that all other content is hidden even > the Favored by list identified above. viz: > > {{{info|partial form|edit title=Manage your favorites}}} > {{{for template|Favorites|label=Add/Remove this page to/from your > favorites}}} > {{{field|Favoredby|hidden}}} > {{{field|Thisuser|default=current user|hidden}}} > ;Add or remove current user? : {{{field|Operation|radiobutton| > default=Remove|mandatory}}} > {{{end template}}} > > {{{standard input|free text|hidden}}} > > {{{standard input|summary|preload=Form:Favorites/Preloads/ > summary}}} > {{{standard input|save|label=Confirm}}} {{{standard input| > cancel}}} > > > The first sticking point is this. Intuitively I'd prefer to be > specifying {{{field|Thisuser|preload=current user}}} rather than > default=current user but it seems that partial form with preload at > the field parameter level is not available by design. I think this is > one great example where you really do want the existing value of This > user to be overwritten by the argument to a preload parameter. I think > my workaround for this is satisfactory (see below). > > The second sticking point is that the radiobutton parameter is not > producing the expected toggling pair of radio buttons for user input. > With all other fields in Form:Favorites hidden/obfuscated this simple > Add/Remove binary choice should be the only decision a browsing user > is required to make. > > A third (but minor) snafu is my use of |preload=Form:Favorites/ > Preloads/summary > It just does not seem to be behaving as described at > http://www.mediawiki.org/wiki/Extension:Semantic_Forms#Form_markup_language > > Template:Favorites does the clever work of silently adding or removing > the current username to/from a comma-delimited list of usernames. > viz. > > {{#switch: {{#lc: {{{Operation|}}} }} > | add = {{#arraymap:{{{Favoredby|}}}|,|x|{{#set:Is a favorite > of=x}} }} {{#set:Is a favorite of={{{Thisuser|}}} }} > | remove = {{#arraymap:{{#replace:{{#arraymap: > {{{Favoredby|}}}|,|!|{{#switch:{{{Thisuser|}}}=|!}}}}|, ,|,}} |,|x| > {{#set:Is a favorite of=x}} }} > | #default = {{#arraymap:{{{Favoredby|}}}|,|x|{{#set:Is a favorite > of=x}} }}</includeonly> > }} > {{#set:Operation={{{Operation|remove}}} }} > {{#set:This user=}} > > > (If the http://www.mediawiki.org/wiki/Extension:ArrayExtension was > installed at Wikia then the above would be much more elegantly > implemented using #ArrayUnion: and #ArrayDiff:) > > The aforementioned workaround that makes |default=current user > deliver what |preload=current user might have delivered is that very > last line that leaves This user with a null value. Without that null > value the |default=current user parameter does not behave with the > preload effect that I wanted. > > Finally, access to this partial form is created within Template:Skin, > Template:Boat, Template:Track via the line: > > [[Special:EditData/Favorites/{{PAGENAME}}|Manage your favorites]] > > > Where I need help > The above solution is functioning fine but it is singularly clumsy > that the user is presented with a text input box in which to type > either Add or Remove when a binary pair of radiobuttons is prescribed. > If someone can help me fix that anomaly then I'll be most grateful. > The above test case can be examined at > http://smwtest.wikia.com/wiki/Form:Skin > however, I am working on it at the present time so the code you see > there may not reflect what you have just read above and of course, in > the weeks ahead, it may be erased altogether. > > There may be a better way to implement this "Manage my favorites" > feature so if you have solved this problem differently then please > share it here. > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Semantic Forms" group. To post to this group, send email to semantic-forms@googlegroups.com To unsubscribe from this group, send email to semantic-forms+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/semantic-forms?hl=en -~----------~----~----~----~------~----~------~--~---