schema.org for watches : catalog, dataset, product ? - schema.org

I'm working on a website about watches. Goal is to display brands, brand's collections, watches, news, reviews, videos, an so on.
I'm asking myself on which kind of schema to use on collections / watches... Watch is a product, but we don't sell watches. We only display informations about watches, their brands, the official descriptions, some reviews, etc...
Is a collection a "DataCatalog" and each watch a dataset ? It is a good idea to want to add itemtype on a collection ? Or only use "Product" type on final watches from collection ?
I think it's difficult to understand the good way to implement schema.org due to the types limitation. And you, What do you think about this kind of problem ?
Thanks in advance for any suggestion

If you want to describe watch as a product using schema.org/Product is a perfect catch. I'll explain.
As you may see from schema.org/Product class structure it doesn't contain any properties for describing selling or buying. It has review, brand and other product specific properties. For describing offer/offers it has special item - well, offers of type schema.org/Offer. This type instead is exactly about selling/buying smth with properties price, acceptedPaymentMethod, etc.
Consider example from schema.org/Product page:
<div itemscope itemtype="http://schema.org/Product">
<span itemprop="name">Kenmore White 17" Microwave</span>
<img src="kenmore-microwave-17in.jpg" alt='Kenmore 17" Microwave' />
<div itemprop="aggregateRating"
itemscope itemtype="http://schema.org/AggregateRating">
Rated <span itemprop="ratingValue">3.5</span>/5
based on <span itemprop="reviewCount">11</span> customer reviews
</div>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<span itemprop="price">$55.00</span>
<link itemprop="availability" href="http://schema.org/InStock" />In stock
</div>
Product description:
<span itemprop="description">0.7 cubic feet countertop microwave.
Has six preset cooking categories and convenience features like
Add-A-Minute and Child Lock.</span>
Customer reviews:
<div itemprop="review" itemscope itemtype="http://schema.org/Review">
<span itemprop="name">Not a happy camper</span> -
by <span itemprop="author">Ellie</span>,
<meta itemprop="datePublished" content="2011-04-01">April 1, 2011
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="worstRating" content = "1">
<span itemprop="ratingValue">1</span>/
<span itemprop="bestRating">5</span>stars
</div>
<span itemprop="description">The lamp burned out and now I have to replace
it. </span>
</div>
<div itemprop="review" itemscope itemtype="http://schema.org/Review">
<span itemprop="name">Value purchase</span> -
by <span itemprop="author">Lucas</span>,
<meta itemprop="datePublished" content="2011-03-25">March 25, 2011
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="worstRating" content = "1"/>
<span itemprop="ratingValue">4</span>/
<span itemprop="bestRating">5</span>stars
</div>
<span itemprop="description">Great microwave for the price. It is small and
fits in my apartment.</span>
</div>
...
</div>
As you can see all product specific properties inserted in Product entity.
For broader research you may check Google markup for products which of course influenced on schema.org way of handling things.
Relating Dataset and DataCatalog types - they are not intended for such use. Instead they provide way for describing, well, some datasets (e.g., dataset of New York weather). For further details about this types you may check:
W3C page about this proposal with examples
Post in schema.org blog which reveals more details about it

Related

ItemList with QuantitativeValue for table lists

I am trying to create a schema to use with several tables that use a list of products (e.g. bottles) arranged based on either height, volume, width, etc.
I tried this Microdata:
<div itemscope itemtype="http://schema.org/ItemList" id="id1">
<ul>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<meta itemprop="position" content="1" />
<span itemprop="item" itemscope itemtype="http://schema.org/Thing">
<span itemprop="name" class="name">Coke Bottle</span>
<span class="measure">
<span itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="value">2359</span>
<span itemprop="unitText">mm</span>
<meta itemprop="unitCode" content="MMT" />
</span> /
<span itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="value">92.52</span>
<span itemprop="unitText">in</span>
<meta itemprop="unitCode" content="INH" />
</span>
</span>
</span>
</li>
</ul>
</div>
The problem is that the measure is not associated directly with the product.
How can I structure this data using Microdata to maintain the measurement values using QuantitativeValue and make the ItemList work for my need?
These are just tables showing a list of product names ordered by these values either ascending or descending, they are not used for navigation, just presenting information based on aggregated data.
In your post I see the following contradictions:
The problem is that the measure is not associated directly with the product.
and
These are just tables showing a list of product names
However, if this is a product, you can use the following the valid markup for your list:
<div itemscope itemtype="https://schema.org/ItemList" id="id1">
<ul>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<meta itemprop="position" content="1" />
<span itemprop="item" itemscope itemtype="https://schema.org/Product">
<a itemprop="url" href=example.com/list.html#cokebottle><span itemprop="name" class="name">Coke Bottle</span></a>
<span class="measure" itemprop="additionalProperty" itemscope itemtype="https://schema.org/PropertyValue">
<span itemprop="value">2359</span>
<span itemprop="unitText">mm</span>
<meta itemprop="unitCode" content="MMT" />
<meta itemprop="propertyID" content="http://www.unece.org/fileadmin/DAM/cefact/recommendations/bkup_htm/add3lm.htm" /> /
<span itemprop="value">92.52</span>
<span itemprop="unitText">in</span>
<meta itemprop="unitCode" content="INH" />
<meta itemprop="propertyID" content="http://www.unece.org/fileadmin/DAM/cefact/recommendations/bkup_htm/add3hk.htm" />
</span>
</span>
</li>
</ul>
</div>
Here we used the guide of Google for Single, all-in-one-page list:
A single, all-in-one-page list hosts all list information, including full text of each item: for example, a gallery of recipes for various kinds of muffins, all contained on one page.
Note that the reference (s) for this markup must have the same URL, but different anchors such as #cokebottle in the above example. So it should be a list of all of which parts (and links to these parts) are installed on one web page.
Here we also use the type PropertyValue as embedded in the property additionalProperty. This property is part of the type Product so all markup is semantic relation and description for the specific product.
Also note that here we used the property propertyID with URL as the identifier of the value of this property.
You can’t associate a QuantitativeValue with a Thing.
The best practice is to use the most specific type available. In your case, this would be Product, or one of its sub-types, if it applies (IndividualProduct, ProductModel or SomeProducts).
This allows you to use the properties depth, height, weight, and width, all of which which can take a QuantitativeValue value.

Multiple itemscope location schemes

I use itemscopes for a gallery, based in Brazil but they also have two other locations for the exhibitions somewhere else, all of them showing up in the footer.
Can I use multiple Location Schemes on a page? If so, how would I do this? Is it fine if I just duplicate the following, or should I split it up with the first belonging to Organization and the other two to Places?
<p itemscope itemtype="http://schema.org/Place">
<span itemprop="name" style="display:none;">Gallery</span>
<span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress">{!! $street !!}</span><br>
<span itemprop="addressLocality">{!! $town !!}</span><br>
<span itemprop="postalCode">{!! $postal !!}</span>
<span itemprop="addressRegion">{!! \App\Info::val('adresscountry') !!}</span><br>
<span itemprop="telephone">{!! $phone !!}</span><br><br>
<span>{!! $openinghours !!}</span><br><br>
<span itemprop="email">mail#gallery.com</span><br><br>
</span>
</p>
It is one organization that owns three places where exhibitions are held. It would be nice if every place would be featured on search machines, no need for the specific exhibitions.
Note that the following doesn’t necessarily lead to rich results in search engines. In case of Google Search, it seems they don’t offer a rich result for places (and even if they would, it would probably require a dedicated page per place). However, they have a rich result for events.
You could provide an Organization item with three location values:
<div itemscope itemtype="http://schema.org/Organization">
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-1"><!-- location 1 --></div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-2"><!-- location 2 --></div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-3"><!-- location 3 --></div>
</div>
For each ExhibitionEvent, you could reference its location (assuming that the places are part of the footer on the event pages, too) via the itemref attribute:
<div itemscope itemtype="http://schema.org/ExhibitionEvent" itemref="loc-2">
</div>

Structured Data layout for complex pricing structure

I'm working with products that have pricing structures based on bulk-buy offers. For example, the pricing for a product may be as follows:
Buy 10-19 and the value of 1 is $3
Buy 20-29 and the value of 1 is $2
Buy 30-39 and the value of 1 is $1
Buy 40 or more and the value of 1 is $0.50
Minimum quantity available to purchase is 10.
How can I mark this up properly in structured data (Microdata format)?
Currently I have:
<span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<meta itemprop="priceCurrency" content="USD"/>
<meta itemprop="price" content="3" />
<span itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<meta itemprop="minValue" content="10" />
<meta itemprop="maxValue" content="19" />
<meta itemprop="value" content="Number" />
</span>
</span>
For each variant. Then I have:
<span itemprop="priceSpecification">
<span itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<meta itemprop="minValue" content="10" />
</span>
</span>
On the product block itself, to indicate the minimum quantity of 10.
I'm really not at all confident this is the right structure and tags to use. Could anybody lend some insight?
You are missing the actual PriceSpecification items (as values for the priceSpecification property). UnitPriceSpecification seems to be the appropriate sub-type in your case.
So the structure could look like this:
<div itemscope itemtype="http://schema.org/Offer">
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
</div>
Personally I would provide a UnitPriceSpecification for the first level (10-19), too, instead of providing its properties directly under Offer:
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification">
<p itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="minValue">10</span>-<span itemprop="maxValue">19</span>
</p>
<p>$<span itemprop="price">3</span> <meta itemprop="priceCurrency" content="USD"/></p>
</div>
But I don’t know if there aren’t some consumers out there that might expect it directly under Offer.

what is the current opinion on using <meta> tags to hide individual instances of a recurring itemtype="http://schema.org/Event"

This event is a local farm market where the client will be making weekly appearances at a venue which shifts bi-annually. Because the recurrence of the event is irregular (some weeks the start time may be different and the number of days between events varies between 7 and 5), there is plenty of justification to list them individually. However, a human reader will not like the aesthetics of 20+ listings all having the same description.
You don’t have to duplicate the description, you can use the itemref attribute:
<p itemprop="description" id="farm-market">…<!-- description for all events --></p>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<time itemprop="startDate">2015-01-20</time>
</div>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<time itemprop="startDate">2015-02-04</time>
</div>
If you don’t want to show any content from the single events (i.e., not even the date), then yes, you should use meta elements in Microdata:
<p itemprop="description" id="farm-market">…<!-- description for all events --></p>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<meta itemprop="startDate" content="2015-01-20">
</div>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<meta itemprop="startDate" content="2015-02-04">
</div>
There’s nothing wrong about using meta.
It’s what gets used in some examples from the Microdata (W3C Working Group Note) specification, and for this purpose Microdata defines that it’s valid to use meta elements in the body.

Need help adding Microdata to an event

I'm struggling to correctly add microdata to events on my page. The Google Structured Data Testing tool can read the data but it isn't displaying it correctly. I'm getting confused.
I am trying to tag it for a sports league that has a single event on one night that consists of three games all taking place at the same location.
<div itemscope itemtype="http://schema.org/SportsEvent"><!--microdata week 1 event-->
<meta itemprop="name" content="Week 1 Lacrosse Games">
<meta itemprop="location" content="Street, Town, NY">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> <!--column-->
<h3>Week 1<br><span itemprop="startDate" content="2014-06-27T18:00">Friday, June 27</span></h3>
<br>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 1</span> - 6:00 PM</h4>
<p><span itemprop="performer">Team 1 vs.Team 2</span></p>
</div>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 2</span> - 7:00 PM</h4>
<p><span itemprop="performer">Team 3 vs. Team 4</span></p>
</div>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 3</span> - 8:00 PM</h4>
<p><span itemprop="performer">Team 5 vs. Team 6</span></p>
</div>
</div><!--end column-->
</div><!--microdata week 1 event-->
I'm not sure what sort of problems you're having with the rich snippets displaying, but I did notice a couple of things that I'd recommend you change. Since all of these events are sporting events, I would probably recommend that you use the SportsEvent type for them all. You also need to specify all of the start times in ISO 8601 format. Additionally, the expected value of the "performer" property is either an Organization or Person, and SportsTeam is an extension of the Organizaton type. So I would recommend using that property twice within each event so that you could specify the two different teams that are playing, along with the SportsTeam type, like this:
<div itemprop="subEvent" itemscope itemtype="http://schema.org/SportsEvent">
<h4><span itemprop="name">Game 1</span> - <meta itemprop="startDate" content="2014-06-27T18:00" />6:00 PM</h4>
<p><span itemprop="performer" itemscope itemtype="http://schema.org/SportsTeam">
<span itemprop="name">Team 1</span></span> vs</p>
<p><span itemprop="performer" itemscope itemtype="http://schema.org/SportsTeam">
<span itemprop="name">Team 2</span></span></p>
</div>
I hope that helps.
Because I was using subevents, Google required that I have the microdata URL called out for each event. They have a rule that says if you have multiple events on the same page, you need to have a URL for each one.
Since I used the same page for all of them, I gave each subevent a unique ID and I linked that ID in the address.