From: Robert M. <mra...@gm...> - 2008-05-08 09:33:41
|
I made a new section at http://sandbox.semantic-mediawiki.org/wiki/Best_Buy . I made a new property at http://sandbox.semantic-mediawiki.org/wiki/Property:Selling_with_Price . You can see the queries I ask at http://sandbox.semantic-mediawiki.org/wiki/Comparison_shop . I tried just using #ask, but that won't do what we want. I tried using templates, but that didn't work either. I haven't upgraded from 1.01 on my site, so templates seemed to work a little better there. On mine, I see parameter {{{2}}} as a big chain of comma separated values with the first semantic data followed by the second in parenthesis (i.e. An Inconvenient Truth (20 USD), Babel (21 USD), The Matrix (25 USD)). If I ever wanted to make a page that would help people find the best price for a given product, it would need to dissect this huge second parameter into some kind of array and then search that array for the given product. I could do that easily enough in Perl, PHP or Ruby, but making a template do that ... no way!! How are we supposed to chop up that second parameter in mediawiki? I started looking at parser functions that would be the equivalent to (in Perl): @var = split (/,/,$text2); foreach $pair (@var) { ($item, $cost) = split (/\s\(/,$pair); $var2[$item] = $cost; } and I can't see coming close to this level of functionality without installing 4+ extensions and making some big, ugly hacks. (see http://www.mediawiki.org/wiki/Extension:Parser_function_extensions ) To make matters worse, what if the same value is used different ways on the same page? (This would be the equivalent of Best Buy selling the same thing for two different prices, but it can come up with other kinds of data and indeed does on my wiki). Anyway, I know you said you're not familiar with the template way, S Page, but I don't think it can handle n-ary stuff as it is currently implemented. If I had to suggest a solution, it would be N-ary data, when passed to a template be separated by |'s (pipes). That way, the template would get all the individual data in a way it could use, and then process the way you want. Since somebody has truly multi-dimensional data, perhaps we could use an offset to space out the parameters in a repeating way. Using the Comparison Shop query as an example: First Call: (spacer = 3) {{{1}}} = Best Buy {{{2}}} = An Inconvenient Truth {{{3}}} = 20 USD {{{4}}} = {{{5}}} = Babel {{{6}}} = 21 USD {{{7}}} = {{{8}}} = Smart Guys etc, etc. I can't see any other way to make all the data accessible to templates, and apart from templates, I see no way to sort the data. -Robert On Wed, May 7, 2008 at 3:04 PM, S Page <in...@sk...> wrote: > Max Moroz wrote: > > We are trying to implement SMW for a very simple set of data. Could > > anyone please recommend a reasonable approach? Anything we tried so > > far doesn't work. > > > > The data looks like this (conceptually): > > > > StoreA sells: Item1 for $500, Item2 for $1000. > > StoreB sells: Item1 for $400, Item 3 for $200. > > and so on. > > > > We have pages for each store and item. In a store page, we want to > > show all items sold and at what prices. Similarly, in an item page, we > > want to show all the stores where it's sold and at what prices. > > The way to think of this is you're trying to give properties to a new > thing, "Item 3 for sale at Store B". It's hard going, but the W3C paper > referenced at http://www.semanticweb.org/wiki/N-ary_relations discusses > this issue. > > > > We defined property "on sale" with: > > > > [[has type::page; number]] > > That's a pretty good approach. You've made the "thing" into a > many-valued property tied to the item for sale. > > > > and then populated the item pages with annotations, e.g., inside > > [[Item1]] page we put: > > > > [[on sale::StoreA, $500]] [[on sale::StoreB; $400]] > > You need semicolons, not commas, separating the values. > > > > But this does not work, because when we create a query inside > > [[StoreA]] page, {{#ask:[[on sale::StoreA; ?]]}}, we are unable to > > retrieve the price data. > > ? Works fine for me: > > {{#ask: > [[On sale::{{PAGENAME}}]] > |?On sale > |default=Nothing found [[Property:On sale|on sale]] at {{PAGENAME}} > }} > > See http://sandbox.semantic-mediawiki.org/wiki/Best_Buy > I ask to display ?On sale and SMW displays the value(s) of the > many-valued property. > > I hope the commas are the only source of your problem. sandbox.s-mw is > running a more recent version of SMW than your wikia site but this > should work in SMW 1.01. > > Note that we're selecting all pages matching On sale:: in StoreA (which > selects the item for sale), but then for each item we display all its > values for On sale, so we see the price of the item in every store. > This may not be what you want. If you care, there might be a way to use > format=template and/or parser expressions to exclude the on sale values > for other stores. I'm not yet familiar with those techniques. > > This comes back to the underlying issue: you're trying to annotate "The > laptop on sale at Best Buy", which isn't quite information about the > item nor the store. If you really want fine-grained control, then you > want to create a page for each thing on sale. Check out one approach, > http://sandbox.semantic-mediawiki.org/wiki/Item_for_sale_012345 > > > > > (A minor additional problem was that we were > > unable to use {{#ask::[[on sale::{{PAGENAME}}; ?]] for some reason.) > > Works fine for me, http://sandbox.semantic-mediawiki.org/wiki/Best_Buy > > > > > Any advice appreciated. And you can see our attempts at SMW so far at > > http://twewy.wikia.com/wiki/The_World_Ends_With_You:Semantic_MediaWiki > > I didn't see a test page up showing this problem. > > Heh. "Slash vertically up on empty space to form an icicle. Inflicts > damage on contact." ???! > I would have made more of the properties Type:Page (the default) so > Attack::S explains what "S" means. > > Enjoy SMW, > -- > =S Page > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > _______________________________________________ > Semediawiki-user mailing list > Sem...@li... > https://lists.sourceforge.net/lists/listinfo/semediawiki-user > -- Roses are red,Violets are blue,I'm schizophrenic,and so am I. |