If haven’t guessed it already, I’m a big fan of the GoodRelations vocabulary as a solid way to describe products, product offers and shop locations. However, most SemWeb vocabularies have some sort of logical limit — for scalability and pure practicality, most don’t include every single data attribute that could possibly describe the object they are annotating. To create complete semantic solutions, you usually start to combine various ontologies.
As complete as GoodRelations is, I have been searching for a way to annotate product types/ categories with it. Product categories can be unique to retailer/ manufacturer, and with billions of consumer products and endless numbers of product categories, universal product categorization seems to be an unreachable goal. I have seen a few attempts at mass product categorization, but I haven’t seen a ton of progress (who would want to manage a massive global product taxonomy?!). Furthermore, getting consensus on category definitions seems like a futile effort that should really be avoided.
However, just because there aren’t any universal standards out there doesn’t mean we can’t start giving machines a shot at some semblance of product categorization. We can begin to provide definitions to product categories by annotating our HTML with RDFa and SKOS (along with other vocabs like GoodRelations).
There are a couple of initial use cases I have identified:
Parsing navigation to capture general product hierarchies
As retailers, we should want to let the world know what kind of products we sell. In my day to day duties, I’m always surprised at what type of products I uncover on our site (especially during project QA!). With around 650,000 active SKUs on any given day, there is much to explore. Of course this is a nearly impossible task for a human to do, so it makes sense to expose these rich data points in our HTML using RDFa and let the parsers do the work for us. This data is not only useful for external consumption, but internal as well. Throughout the ecommerce world there is also significant human effort dedicated to updating and maintaining product taxonomies — many organizations have entire teams dedicated to this activity. What if we could rely on smart machines to perform this function and make “recommendations”? My experience tells me there would be a whole lot less bickering in the workplace.
Enough of the justification, here’s an example and code snippet to ponder:
<div about="http://www.bestbuy.com/site/Electronics/TV-Video/abcat0100000.c?id=abcat0100000#category" typeof="skos:Concept"> <h2>Shop <span property="skos:prefLabel" xml:lang="en">TV & Video</span></h2> <ul> <li><a href="http://www.bestbuy.com/site/TV-Video/Televisions/abcat0101000.c?id=abcat0101000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">TVs</span><span property="skos:definition" content="LCD Televisions, Plasma Televisions and Projectors"></span></a></li> <li><a href="http://www.bestbuy.com/site/Televisions/Projectors-Screens/pcmcat158900050008.c?id=pcmcat158900050008#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Projectors & Screens</span><span property="skos:definition" content="Projectors and Projector Screens"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/Blu-ray-DVD-Players/abcat0102000.c?id=abcat0102000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Blu-ray & DVD Players</span><span property="skos:definition" content="Blu-ray, DVD Recorders and Players"></span></a></li> <li><a href="http://www.bestbuy.com/site/Audio/Home-Theater-Systems/abcat0203000.c?id=abcat0203000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Home Theater Systems</span><span property="skos:definition" content="Surround Sound and Home Theater Systems"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/TiVo-Internet-TV/abcat0103000.c?id=abcat0103000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">TiVo & Internet TV</span><span property="skos:definition" content="TiVo and Internet TV Players"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/Digital-Tuners-Converters/abcat0104000.c?id=abcat0104000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Digital TV Converters</span><span property="skos:definition" content="DTV Converter Boxes"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/DIRECTV-Cable-Fiber-Optics/abcat0105000.c?id=abcat0105000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">DIRECTV, Cable & Fiber Optics TV</span><span property="skos:definition" content="DIRECTV, Digital Cable and Fiber TV"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/Stands%2C+Mounts+and+Furniture/abcat0106000.c?id=abcat0106000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Stands, Mounts & Furniture</span><span property="skos:definition" content="Home Theater Furniture and Media Furniture"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/PortableTV-Video/pcmcat200900050008.c?id=pcmcat200900050008#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">Portable TV & Video</span><span property="skos:definition" content="Portable TV and Video"></span></a></li> <li><a href="http://www.bestbuy.com/site/Geek-Squad/TV-Home-Theater-Services/pcmcat138100050024.c?id=pcmcat138100050024#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">TV & Home Theater Services</span><span property="skos:definition" content="Home Theater Installation and TV Installation"></span></a></li> <li><a href="http://www.bestbuy.com/site/TV-Video/TV-Video-Accessories/abcat0107000.c?id=abcat0107000#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">TV & Video Accessories</span><span property="skos:definition" content="TV and Video Accessories"></span></a></li> </ul> </div>
Assigning product categories through product detail page “breadcrumbs” with SKOS and GoodRelations
As I mentioned previously, I have been searching for a good way to annotate product categories/ types with GoodRelations. A common practice on commerce sites is the utilization of breadcrumbs — as a visual reminder of where you are in the shopping experience. We can annotate these breadcrumbs with SKOS in the domain of GoodRelations (child of gr:includesObject) to completely categorize a product, building a product category hierarchy from top-level category down to more narrow child categories.
Example and code:
Best Buy local store open box detail page with breadcrumbs
<div rel="gr:includesObject" id="productdetails"> <div about="http://stores.bestbuy.com/577/fairless-hills-pa/products/open-box/sony-52-class-1080p-240hz-lcd-hdtv/027242765832/?uid=359#category" typeof="skos:Concept"> <ul id="breadcrumbs"> <li><a href="http://www.bestbuy.com">Best Buy</a></li> <li><a href="http://www.bestbuy.com/site/Electronics/TV-Video/abcat0100000.c?id=abcat0100000#category"><span property="skos:prefLabel" xml:lang="en">TV & Video</span><span property="skos:definition" content="DVD Players, Blu-ray Players and Television"></span></a></li> <li><a href="http://www.bestbuy.com/site/Televisions/Projectors-Screens/pcmcat158900050008.c?id=pcmcat158900050008#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">TVs</span><span property="skos:definition" content="LCD Televisions, Plasma Televisions and Projectors"></span></a></li> <li><a href="http://www.bestbuy.com/site/Televisions/All-Flat-Panel-TVs/abcat0101001.c?id=abcat0101001#category" rel="skos:narrower"><span property="skos:prefLabel" xml:lang="en">All Flat-Panel TVs</span><span property="skos:definition" content="LCD TVs and Plasma TVs"></span></a></li> <li>Product Info</li> </ul> </div> <div typeof="gr:TypeAndQuantityNode" about="http://stores.bestbuy.com/577/fairless-hills-pa/products/open-box/sony-52-class-1080p-240hz-lcd-hdtv/027242765832/?uid=359#TypeAndQuantityNode_0027242765832"> <span property="gr:amountOfThisGood" datatype="xsd:float" content="1.0"></span> <span property="gr:hasUnitOfMeasurement" datatype="xsd:string" content="C62"></span>
Full HTMLs for your perusal: facted-nav-skos.html, gr-skos-breadcrumb.html
Faceted commerce navigation example