Re: Breadcrumbs proposal

I agree that we really need to clean up breadcrumbs and come up with a
simple, usable mechanism.

The problem with the first rdfa based version that was done many years ago
was that it was so complex that most implementations got it wrong. Which is
why we simplified it in schema.org (probably over simplified it).

Let us collect the different alternatives and comeup with something that is
both usable and expressive enough.

thanks,

guha


On Wed, Jun 12, 2013 at 8:18 AM, Gregg Kellogg <gregg@greggkellogg.net>wrote:

> On Jun 11, 2013, at 2:40 PM, Stéphane Corlosquet <scorlosquet@gmail.com>
> wrote:
>
>
>
> On Tue, Jun 11, 2013 at 11:50 AM, Gregg Kellogg <gregg@greggkellogg.net>wrote:
>
>> On Jun 10, 2013, at 7:31 PM, Stéphane Corlosquet <scorlosquet@gmail.com>
>> wrote:
>>
>> Hi Jarno and all.
>>
>> I quite like Jarno's nested example which is also the same as the
>> proposal from Egor / Yandex at
>> http://www.w3.org/wiki/WebSchemas/Breadcrumbs. The advantage of the
>> current proposal is that it solves all the problems for (1) multiple
>> breadcrumb chains and (2) can be encoded in both microdata and RDFa Lite in
>> a very similar fashion (which is not the case for the ordered approach).
>> Also, both syntaxes are parsed today by Google's parser (see below).
>>
>> Here is the example in microdata (copied straight from the proposal):
>>
>> <div itemscope itemtype="http://schema.org/WebPage">
>>   <!--First chain-->
>>   <div itemprop="breadcrumb" itemscope itemtype="
>> http://schema.org/Breadcrumb">
>>     <a itemprop="url" href="/category/books">
>>       <span itemprop="name">Books</span>
>>     </a>
>>     <!--Second level of the first chain-->
>>     <span itemprop="child" itemscope itemtype="
>> http://schema.org/Breadcrumb">
>>       <a itemprop="url" href="/category/books/classics">
>>         <span itemprop="name">Boring classics</span>
>>       </a>
>>     </span>
>>   </div>
>>     <!--Second chain-->
>>   <div itemprop="breadcrumb" itemscope itemtype="
>> http://schema.org/Breadcrumb">
>>     <a itemprop="url" href="/category/bicycles">
>>       <span itemprop="name">Bicycles</span>
>>     </a>
>>     <!--Second level of the second chain-->
>>     <span itemprop="child" itemscope itemtype="
>> http://schema.org/Breadcrumb">
>>       <!--Last element is not a hyperlink in html-->
>>       <!--but it has a hyperlink in microdata markup-->
>>       <span itemprop="name">For kids</span>
>>       <link itemprop="url" href="/category/bicycles/three-wheeled"/>
>>     </span>
>>   </div>
>> </div>
>>
>>
>> and the same example translated into RDFa Lite by simply renaming the
>> attributes and moving the http://schema.org/ piece into the vocab
>> attribute:
>>
>> <div vocab="http://schema.org/" typeof="WebPage">
>>   <!--First chain-->
>>   <div property="breadcrumb" typeof="Breadcrumb">
>>     <a property="url" href="/category/books">
>>       <span property="name">Books</span>
>>     </a>
>>     <!--Second level of the first chain-->
>>     <span property="child" typeof="Breadcrumb">
>>       <a property="url" href="/category/books/classics">
>>         <span property="name">Boring classics</span>
>>       </a>
>>     </span>
>>   </div>
>>     <!--Second chain-->
>>   <div property="breadcrumb" typeof="Breadcrumb">
>>     <a property="url" href="/category/bicycles">
>>       <span property="name">Bicycles</span>
>>     </a>
>>     <!--Second level of the second chain-->
>>     <span property="child" typeof="Breadcrumb">
>>       <!--Last element is not a hyperlink in html-->
>>       <!--but it has a hyperlink in microdata markup-->
>>       <span property="name">For kids</span>
>>       <link property="url" href="/category/bicycles/three-wheeled"/>
>>     </span>
>>   </div>
>> </div>
>>
>> Both snippets above work in the Google Rich Snippet testing tool [1], and
>> you can try to paste the second snippet in the RDFa play tool [2] to view a
>> nice diagram of the breadcrumbs structure.
>>
>>
>> The difference is that microdata creates an implicit order for multiple
>> values of breadcrumb, where RDFa does not. This could be solved using the
>> @inlist attribute from RDFa 1.1, which is not part of RDFa Lite 1.1. My
>> processor interprets the above example as follows:
>>
>
> I'm not sure that having the chains ordered matters as much as having the
> elements/breadcrumbs within each chain matter, either way, it's possible to
> have them both ordered. But that's something consumers such as the search
> engines can tell us.
>
>
> No, you're right, ordering of separate Breadcrumbs is probably not
> important. I'm guilty of not looking at the markup closely enough :P.
>
> Gregg
>
> Steph.
>
>
>>
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>> @prefix rdfa: <http://www.w3.org/ns/rdfa#> .
>> @prefix schema: <http://schema.org/> .
>>
>> <> rdfa:usesVocabulary schema: .
>>
>>  [ a schema:WebPage;
>>     schema:breadcrumb
>>       [ a schema:Breadcrumb;
>>         schema:child
>>           [ a schema:Breadcrumb;
>>             schema:name "Boring classics";
>>             schema:url </category/books/classics>];
>>         schema:name "Books";
>>         schema:url </category/books>],
>>       [ a schema:Breadcrumb;
>>         schema:child
>>           [ a schema:Breadcrumb;
>>             schema:name "For kids";
>>             schema:url </category/bicycles/three-wheeled>];
>>         schema:name "Bicycles";
>>         schema:url </category/bicycles>]
>>   ] .
>>
>> Note that schema:breadcrumb has two values, which are unordered in
>> JSON-LD. If I instead add @inlist, as follows:
>>
>> <div vocab="http://schema.org/" typeof="WebPage">
>>   <!--First chain-->
>>   <div property="breadcrumb" typeof="Breadcrumb" inlist>
>>     <a property="url" href="/category/books">
>>       <span property="name">Books</span>
>>     </a>
>>     <!--Second level of the first chain-->
>>     <span property="child" typeof="Breadcrumb" inlist>
>>       <a property="url" href="/category/books/classics">
>>         <span property="name">Boring classics</span>
>>       </a>
>>     </span>
>>   </div>
>>     <!--Second chain-->
>>   <div property="breadcrumb" typeof="Breadcrumb" inlist>
>>     <a property="url" href="/category/bicycles">
>>       <span property="name">Bicycles</span>
>>     </a>
>>     <!--Second level of the second chain-->
>>     <span property="child" typeof="Breadcrumb" inlist>
>>       <!--Last element is not a hyperlink in html-->
>>       <!--but it has a hyperlink in microdata markup-->
>>       <span property="name">For kids</span>
>>       <link property="url" href="/category/bicycles/three-wheeled"/>
>>     </span>
>>   </div>
>> </div>
>>
>> I get ordered breadcrumbs:
>>
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>> @prefix rdfa: <http://www.w3.org/ns/rdfa#> .
>> @prefix schema: <http://schema.org/> .
>>
>> <> rdfa:usesVocabulary schema: .
>>
>> [ a schema:WebPage;
>>   schema:breadcrumb (
>>     [ a schema:Breadcrumb;
>>       schema:child (
>>         [ a schema:Breadcrumb;
>>           schema:name "Boring classics";
>>           schema:url </category/books/classics>]
>>       );
>>       schema:name "Books";
>>       schema:url </category/books>]
>>     [ a schema:Breadcrumb;
>>       schema:child (
>>         [ a schema:Breadcrumb;
>>           schema:name "For kids";
>>           schema:url </category/bicycles/three-wheeled>]);
>>       schema:name "Bicycles";
>>       schema:url </category/bicycles>]
>>   )
>> ] .
>>
>> Gregg
>>
>> Steph.
>>
>> [1] http://www.google.com/webmasters/tools/richsnippets
>> [2] http://rdfa.info/play/
>>
>>
>> On Mon, Jun 10, 2013 at 7:51 PM, Jarno van Driel <jarno@quantumspork.nl>wrote:
>>
>>> To be a bit more clear where my point is going. (My previous response
>>> was a bit incomplete).
>>>
>>> ------------------------------------------------------
>>>
>>> In case the proposal is taken as a base (Nested):
>>>
>>> <!--First level of the first chain-->
>>> <p itemprop="breadcrumb" itemscope itemtype="http://schema.org/WebPage">
>>>   <a itemprop="url" href="/category/books">
>>>     <span itemprop="name">Books</span>
>>>   </a>
>>>   <!--Second level of the first chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>     <!--Third level of the first chain-->
>>>     <span itemprop="child" itemscope itemtype="http://schema.org/WebPage
>>> ">
>>>       <a itemprop="url" href="/category/books/classics">
>>>         <span itemprop="name">Boring classics</span>
>>>       </a>
>>>     </span>
>>>   </span>
>>> </p>
>>>
>>> <!--First level of the second chain-->
>>> <p itemprop="breadcrumb" itemscope itemtype="http://schema.org/WebPage">
>>>   <a itemprop="url" href="/category/books">
>>>     <span itemprop="name">Books</span>
>>>   </a>
>>>   <!--Second level of the second chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>     <!--Third level of the second chain-->
>>>     <span itemprop="child" itemscope itemtype="http://schema.org/WebPage
>>> ">
>>>       <a itemprop="url" href="/category/books/classics">
>>>         <span itemprop="name">Boring classics</span>
>>>       </a>
>>>     </span>
>>>   </span>
>>> </p>
>>>
>>> ------------------------------------------------------
>>>
>>> And in case the data-vocabulary style is taken as a base (Ordered):
>>>
>>> <!--First level of the first chain-->
>>> <p itemprop="breadcrumb" itemscope itemtype="http://schema.org/WebPage">
>>>   <a itemprop="url" href="/category/books">
>>>     <span itemprop="name">Books</span>
>>>   </a>
>>>   <!--Second level of the first chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>   <!--Third level of the first chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>   </span>
>>> </p>
>>>
>>> <!--First level of the second chain-->
>>> <p itemprop="breadcrumb" itemscope itemtype="http://schema.org/WebPage">
>>>   <a itemprop="url" href="/category/books">
>>>     <span itemprop="name">Books</span>
>>>   </a>
>>>   <!--Second level of the second chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>   <!--Third level of the second chain-->
>>>   <span itemprop="child" itemscope itemtype="http://schema.org/WebPage">
>>>     <a itemprop="url" href="/category/books/classics">
>>>       <span itemprop="name">Boring classics</span>
>>>     </a>
>>>   </span>
>>> </p>
>>>
>>> ------------------------------------------------------
>>>
>>> The way I see it imho - either way doesn't need a new type. In both
>>> cases it's resolved by adding a new property to WebPage.
>>>
>>>
>>
>>
>> --
>> Steph.
>>
>>
>>
>>
>>
>>
>>
>
>
> --
> Steph.
>
>
>

Received on Thursday, 13 June 2013 13:58:43 UTC