W3C home > Mailing lists > Public > public-rdfa@w3.org > April 2014

Re: how do I copy some properties that are part of a bigger pattern

From: Jarno van Driel <jarnovandriel@gmail.com>
Date: Wed, 16 Apr 2014 22:47:36 +0200
Message-ID: <CADK2AU1ouWUa_yGO56jiM8ga6KJy+xo15qQsuy2h+J7fj3q3-w@mail.gmail.com>
To: Larry Betts <lbetts@thoughtwm.com>
Cc: rhm@pioneerca.com, Gregg Kellogg <gregg@greggkellogg.net>, Niklas Lindström <lindstream@gmail.com>, public-rdfa <public-rdfa@w3.org>
I wouldn't actually know. I just am starting to wrap my head around
@resource, @rev and @rel. Haven't had time to look into @about as well.
Maybe somebody else can say something more educated about that?


2014-04-16 22:45 GMT+02:00 Larry Betts <lbetts@thoughtwm.com>:

> That's some great information Jarno! Would "itemid" be an analog to the
> RDFa "reference"/"about"?
>
> Regards,
>
> *Larry P. Betts*
> Search Engine Marketing Specialist
>
> Thoughtwire Marketing LLC
> PO BOX 8077
> Mansfield, OH 44907
> Phone: 877-848-9581 Ext. 1055
> Direct: 419-610-2076
> Fax: 440-209-7783
> Email: lbetts@thoughtwm.com <pfernando@thoughtwm.com>
> Web: http://www.thoughtwiremarketing.com <http://www.thoughtwm.com/>
>
>
> On Wed, Apr 16, 2014 at 4:23 PM, Jarno van Driel <jarnovandriel@gmail.com>wrote:
>
>> Hey folks,
>>
>> I just wanted you to know that after the last mailing I have been doing
>> quite some reading as well extensive testing and am happy to inform you
>> that Google now fully supports @itemid as global identifier and that
>> linking to it actually works!
>>
>> Not only do I get the right results in Google's Structured data testing
>> tool but in also Webmaster tools. I've been testing with @itemid on my own
>> site, by having multiple objects link to the same entity, as well creating
>> cycles by having entities point to each other, and everything returns the
>> proper values and types.
>>
>> I have reworked the example Niklas provided in Microdata so you can see
>> yourself:
>> (don't feel like reading the code? than look at what the SDTT makes of
>> it: http://bit.ly/1jLitKl)
>>
>> <body itemid="page" itemscope itemtype="http://schema.org/ItemPage">
>>   <link itemprop="copyrightHolder" href="corp">
>>
>>   <article itemprop="text">
>>     <div itemid="article" itemscope itemtype="http://schema.org/Article">
>>        <link itemprop="publisher" href="corp">
>>
>>       <h1 itemprop="name">How to copy properties in RDFa Lite &
>> Microdata</h1>
>>     </div>
>>   </article>
>>
>>   <footer itemprop="mentions" itemscope itemtype="
>> http://schema.org/WPFooter">
>>     <p>
>>       <span itemid="corp" itemprop="about" itemscope itemtype="
>> http://schema.org/Corporation">
>>         <a itemprop="url" href="http://www.example.org">
>>           <span itemprop="name">Corporation name</span>
>>         </a>
>>
>>         <span itemprop="description">Corporation description</span>
>>       </span>
>>     </p>
>>   </footer>
>> </body>
>>
>> Thanks for all the great input you have given me! I actually have hope
>> again that I will be able to make sense of RDFa because of it.   :)
>>
>>
>> 2014-03-11 19:02 GMT+01:00 Richard H. McCullough <rhm@pioneerca.com>:
>>
>>  You might want to steal some ideas from the mKR language.
>>>
>>> mKR lets you name any list of propositions, e.g.,
>>>       my propositions :: { proposition list };
>>> and manipulate that list in numerous ways.
>>>
>>> You can add, delete, ... propositions
>>> You can change the underlying class hierarchy
>>> ...
>>>
>>> *Dick McCullough *
>>> Context Knowledge Systems<http://mkrmke.org/ContextKnowledgeSystems.html>
>>> mKE and the mKR language <http://mkrmke.org/mKEmKR.html>
>>> mKR/mKE tutorial <http://mkrmke.org/doc/MKEtutorial.html>
>>>
>>> ------------------------------
>>> Date: Tue, 11 Mar 2014 15:41:09 +0100
>>> From: jarnovandriel@gmail.com
>>> To: gregg@greggkellogg.net
>>> CC: lindstream@gmail.com; public-rdfa@w3.org
>>> Subject: Re: how do I copy some properties that are part of a bigger
>>> pattern
>>>
>>>
>>> Thanks for the sources Gregg. Some of 'm I know but with the new
>>> insights I have now I bet some of 'm will make much more sense to me now.
>>> I'll make sure to read it before asking more questions.
>>>
>>>
>>> 2014-03-11 2:01 GMT+01:00 Gregg Kellogg <gregg@greggkellogg.net>:
>>>
>>> On Mar 10, 2014, at 5:07 AM, Jarno van Driel <jarnovandriel@gmail.com>
>>> wrote:
>>>
>>> "...There is no difference here between links and "nested" items..." +
>>> "...Try the example..."
>>> Thanks, you just made my brain explode.   =)
>>>
>>> It's been a couple of years since my first attempts at understanding
>>> RDFa - which failed miserably - since I have difficulty translating the W3
>>> specifications in, for me, understandable rules on how it's supposed to be
>>> used and what it can do. Your comments together with the RDFa Play outcome
>>> succeeded where countless hours of reading specifications and experimenting
>>> with markup have failed me. Seriously Niklas, thanks!
>>>
>>> Now as for the IRC meet, let that slide for now. A tsunami of
>>> possibilities just flushed over me and I have to give it some time to let
>>> it sink in. The first thought I had after reading your comments and seeing
>>> the RDFa Play outcome was that writing an article about the use of @itemref
>>> isn't that difficult but comparing that to rdfa:pattern just became a whole
>>> lot more complicated. It now has become clear to me there is no 1:1
>>> relation between the two - where I thought there was - and that RDFa offers
>>> different solutions for many of the situations where one only can use
>>> @itemref in Microdata. Which IS marvelous but which leaves me confused in
>>> how to clarify that in an article without writing a series that's as thick
>>> as the bible.
>>>
>>>
>>> There are some great discussion threads on public-rdfa-wg in around
>>> December 2012, starting with a proposal from Ivan. Check out the
>>> "Reproducing Gregg/Niklas' thoughts ..." thread in
>>> http://lists.w3.org/Archives/Public/public-rdfa-wg/2012Dec/thread.html.
>>>
>>> As Niklas points out, the original concept was that a semantic approach
>>> to property-copying, where we identified a resource and used it as the
>>> source for copying properties, and remove the original "template" resource.
>>> Basically, it could mostly be done using SPARQL with INSERT DATA/DELETE
>>> DATA. It's worth looking at the thread to see some of the thought processes
>>> that were going on at the time.
>>>
>>> I do know however that I want to limit myself to RDFa Lite since it's
>>> the RDFa community's answer to Microdata. Or at least that's way I
>>> understand it. So let me therefore ask, what are the differences between
>>> RDFa and RDFa Lite? Is there any clear documentation about the difference
>>> between the two I can read?
>>>
>>>
>>> The RDFa Lite 1.1 recommendation <http://www.w3.org/TR/rdfa-lite/>
>>> pretty much calls this out. Also, the RDFa 1.1 Primer <
>>> http://www.w3.org/TR/xhtml-rdfa-primer/>. The key observation to the
>>> LIte recommendation is that RDFa gets complicated when there are too many
>>> attributes on an element, and the distinction between @about and @resource
>>> can be subtle. Even now, I see people having a problem with Microdata, when
>>> they use @itemprop on an anchor, and seem to expect the content of the
>>> element, rather than the value of @href to be used as the property's value.
>>> RDFa suffers from the same issue, but things get simpler when you restrict
>>> yourself to using fewer attributes and avoid combining them together.
>>>
>>> That said, there is quite a bit of power in full RDFa 1.1, particularly
>>> in the use of lists and chaining <
>>> http://www.w3.org/TR/rdfa-core/#s_chaining>. Chaining is really useful
>>> when you have a number of resource values from the same property, for
>>> example the author list of a document. This avoids repeating markup, but it
>>> is a sophisticated feature. IMO, you really can't write RDFa (full or lite)
>>> or Microdata without running it through a distiller to verify that it says
>>> what you mean.
>>>
>>> Let me widen the question: Are there any sources you guys can recommend
>>> me to read about RDFa (Lite)?
>>> Like I said earlier, it's been a couple of years for me, so I hope new
>>> documentation exists by now, besides the W3 specifications.
>>>
>>>
>>> Manu wrote a great post on the differences between RDFa Lite and
>>> Microdata: <http://manu.sporny.org/2012/mythical-differences/>.
>>>
>>> Gregg
>>>
>>> 2014-03-09 18:10 GMT+01:00 Niklas Lindström <lindstream@gmail.com>:
>>>
>>> Hi Jarno,
>>>
>>> On Sun, Mar 9, 2014 at 5:08 PM, Jarno van Driel <jarnovandriel@gmail.com
>>> > wrote:
>>>
>>> "...outputs two different nodes for what seemingly is the same
>>> corporation..."
>>> You're right in stating that this results in two instances of the same
>>> Corporation. Which is the only way in Microdata to have an Item
>>> (Corporation) be linked to other Items by means of different properties
>>> (copyrightHolder & publisher). The following markup simply wouldn't work in
>>> Microdata:
>>> <div itemprop="manufacturer" itemref="corporation-data">
>>>
>>>
>>> Yes, microdata (presumably) being a tree model prevents it from
>>> connecting items together naturally. It's a big flaw. It only deals with
>>> surface data, and says nothing about what it means. Perhaps @itemid makes
>>> it into some kind of graph at times though, it's hard to tell when there
>>> are no semantics explaining what that entails.
>>>
>>>
>>> In Microdata itemref can only get additional info about a Type. You
>>> can't use it on a property and then use itemref to get the @itemtype
>>> elsewhere. That's why in Microdata I have to declare the Corporation twice,
>>> to be able to link it to different entities (ItemPage & Article) by means
>>> of different properties (copyrightHolder & publisher). Which brings me to
>>> the question: Can this be accomplished RDFa Lite where it can't in
>>> Microdata? - keeping in mind that in this specific example according to
>>> schema.org rules the publisher and copyrightHolder are both expected to
>>> 'have' a type and are not supposed to 'link' to a type.
>>>
>>>
>>> Yes, it can. RDFa uses the RDF data model, which is a graph [1]. There
>>> is no difference here between links and "nested" items. You type and (when
>>> needed) identify things, link them together and describe their details with
>>> literals (texts) – all using properties. That is what I did in the example
>>> given.
>>>
>>>
>>> "...<p resource="#page">
>>> <span property="copyrightHolder" typeof="Corporation"
>>> resource="#corp">..."
>>> The downside to this method is that the copyrighHolder-Corporation now
>>> gets linked falsely. I quickly checked the output in Google's SDTT, which
>>> showed the Corporation being a child of the WPFooter as opposed to being
>>> the copyrightHolder of the ItemPage. The use of rdfa:pattern prevents this
>>> happening as does a itemscope without an itemtype in Microdata e.g. <div
>>> itemscope>.
>>>
>>>
>>> The Google SDTT is wrong. It should recognize that <p resource="#page">
>>> sets the subject for nested statements (here ensuring that the <#page> has
>>> the <#corp> as :copyrightHolder). It seems that adding a @typeof:
>>>
>>>     <p resource="#page" typeof="ItemPage">
>>>
>>> makes it behave somewhat more as expected. But note that that isn't
>>> necessary in RDFa, it's just a workaround for a bug in the SDTT. (Try the
>>> example out in e.g. <http://rdfa.info/play/> to see it more clearly.)
>>>
>>>
>>>
>>> "Also, the resulting data here doesn't contain two distinct nodes for
>>> what is apparently meant to be the same corporation."
>>> True, but the two distinct nodes also have type-specific relations to
>>> the two distinct items this example has, namely ItemPage and Article. Maybe
>>> that info got a bit lost because I stripped out so much of the original
>>> HTML. The source I took this from has an ItemPage with a gazillion other
>>> types attached to it while the Article is just that, an Article, with it's
>>> own set of properties, mostly separated from the rest of the content on the
>>> ItemPage, only sharing data from the Corporation.
>>>
>>>
>>> I think I see how you mean. But if you think of this in terms of the RDF
>>> data model, the items simply are resources linked together (and assigned
>>> some types, and described with textual properties), rather than blocks of
>>> data tied to the page structure (or the microdata tree structure, which
>>> hardly helps). In this model, the corporation is surely one thing,
>>> connected to from the ItemPage using copyrightHolder, and from the Article
>>> using publisher (both of which are fine since the thing linked to is of the
>>> expected type).
>>>
>>>
>>>
>>> "I'd be happy to take a look at such examples as well."< br>
>>> Maybe we should meet in an IRC session, like Gregg suggested, because
>>> I'm convinced we can keep this argument-counterargument up for quite some
>>> time. Not that I mind, since this mailing has already given me a ton to
>>> think about, but simply to be more time-efficient. Just let me know what
>>> you guys prefer, either way is fine with me.
>>>
>>>
>>> I'm fine either way too. :) I tend to have intermittent bouts of time,
>>> so mailing is usually better for examples. But I could go for a chat over
>>> specifics if needed.
>>>
>>> Cheers,
>>> Niklas
>>>
>>> [1]: http://www.w3.org/TR/rdf11-primer/
>>>
>>>
>>>
>>>
>>>
>>> 2014-03-09 14:19 GMT+01:00 Niklas Lindström <lindstream@gmail.com>:
>>>
>>> Hi Jarno and Gregg!
>>>
>>> It seems to me that this is a good example of where @itemref-like
>>> functionality is quite unnecessary in RDFa. The #copyright-holder simply
>>> contains a link from the page to the corporation, and the #publisher-url
>>> and #publisher-description contain properties of that corporation. The
>>> resulting microdata, however, outputs two different nodes for what
>>> seemingly is the same corporation, so perhaps the example has been
>>> simplified too much, thus obscuring what is actually needed?
>>>
>>> Still, In RDFa, instead of adding different @id:s to disparate parts of
>>> the page which are about the same resource (and then listing them in
>>> @itemref), you simply use @resource to capture the fact that a given block
>>> is about it.
>>>
>>> Your example can thus be written like this in RDFa Lite:
>>>
>>> - - - 8< - - -
>>>
>>> <body vocab="http://schema.org/" typeof="ItemPage" resource="#page">
>>>   <article property="text">
>>>     <div typeof="Article">
>>>       <link property="publisher" resource="#corp">
>>>
>>>       <h1 property="name">How to copy properties in RDFa Lite &
>>> Microdata</h1>
>>>     </div>
>>>   </article>
>>>
>>>   <footer property="mentions" typeof="WPFooter">
>>>     <div property="text">
>>>       <p resource="#page">
>>>         <span property="copyrightHolder" typeof="Corporation"
>>> resource="#corp">
>>>           <a property="url" href="http://www.example.org">
>>>              <span property="name">Corporation name</span>
>>>           </a>
>>>
>>>           <span property="description">Corporation description</span>
>>>          </span>
>>>       </p>
>>>     </div>
>>>   </footer>
>>> </body>
>>>
>>> - - - >8 - - -
>>>
>>> In my opinion, this is a more convenient way of handling data smeared
>>> out in a messy tag soup (with the results being shorter and more
>>> legible). Of course, you need to name these resources, unless they already
>>> have formal URIs, but that's easily done with a fragment identifier or a
>>> bnode id. (And note that in microdata, you instead need to ensure that a
>>> layout designer doesn't meddle with the @id values used by @itemref, for
>>> quite different reasons (their use in CSS and JS).)
>>>
>>> Also, the resulting data here doesn't contain two distinct nodes for
>>> what is apparently meant to be the same corporation.
>>>
>>> Remember, it is only when you need to duplicate a set of properties for
>>> different resources that rdfa:copy is necessary. And even in those
>>> circumstances, you might be able to leverage the way @resource can group
>>> descriptions together, to build up one pattern from disparate parts of the
>>> page.
>>>
>>> I'd be happy to take a look at such examples as well.
>>>
>>> Cheers,
>>> Niklas
>>>
>>>
>>>
>>> On Sun, Mar 9, 2014 at 11:51 AM, Jarno van Driel <
>>> jarnovandriel@gmail.com> wrote:
>>>
>>> I think your and my latest example just passed each other Gregg. I guess
>>> I posted mine when you were writing yours because when I compare the two I
>>> see we implemented the same workaround by means of additional @resource.
>>>
>>> "I wouldn't recommend the use of included patterns in RDFa, but it can
>>> be made to work."
>>> I wouldn't recommend it either but unfortunately the everyday website
>>> out there consists out of a HTML-soup which doesn't allow for Semantic
>>> markup to be added in a nice and clean way. Now I mainly work on already
>>> existing websites, where I have to make do with HTML that's already in
>>> place. Therefore itemref or rdfa:pattern are indispensable when
>>> organizing/linking data that's smeared out over many different HTML
>>> elements on a page. I am very aware this results in markup that isn't
>>> 'nice' but it helps create meaning even if the HTML is a mess.
>>>
>>> "P.S., I think it’s great that you’re trying to describe this for a
>>> wider audience!"
>>> Well, I'm not doing it alone. Aaron Bradley is acting as the devil's
>>> advocate by asking me questions which mess up the solutions I provide.
>>> Which in return forces me to come up with different solutions and ask a lot
>>> of questions at the public-vocabs (and now here as well).   :)
>>>
>>> So trying to do something for a bigger audience will most definitely end
>>> up in something that has been contributed by many people. As always this
>>> kind of stuff ends up being a multi-community/person effort since it brings
>>> together so many different specializations and specifications.
>>>
>>> --
>>>
>>> Andy and Gregg,
>>> Thanks for sharing your knowledge, I'll make sure re-share it and am
>>> hopeful it will result in an article (or series of) which will try to serve
>>> anybody who is (or should be) interested in this type of info.
>>>
>>>
>>> 2014-03-09 6:46 GMT+01:00 Gregg Kellogg <gregg@greggkellogg.net>:
>>>
>>> On Mar 8, 2014, at 5:50 PM, Jarno van Driel <jarnovandriel@gmail.com>
>>> wrote:
>>>
>>> "..the @resource attributes get in the way.."
>>> Could you explain this to me a bit more please Gregg? Because if I parse
>>> my last markup through the Structured data linter and RDFa Play I get 100%
>>> the same outcome as with your markup. Yandex and Google see the same data
>>> as well (in a ever so slightly different manner).
>>>
>>> When I look at the output these parsers have no trouble extracting the
>>> @resources as different rdfanodes. Unless I'm completely overlooking
>>> something, or am breaking some cardinal rules, which both are feasible
>>> since I just got around to looking more deeply into RDFa Lite.
>>>
>>>
>>> In order to be able to reference the publisher-uri and
>>> publisher-description information as patterns, they need to have an
>>> identifier, which I supplied by adding @resource (and
>>> @typeof=“rdfa:Pattern) to each. However, this changes the scope of their
>>> properties relative to the copyright-holder.
>>>
>>> In you’re RDFa version you weren’t able to access the publisher-uri or
>>> publisher-description, as you do from Microdata. The RDFa property copying
>>> uses a resource of type rdfa:Pattern, which must be identified as a
>>> resource. For this reason, I added the @resource and @typeof for both the
>>> publisher-description and publisher-url. However, doing that, changes the
>>> current subject for each of these, so the “url” and “description”
>>> properties are allocated to different resources. To get around this, I
>>> added the rdfa:copy properties both the the publisher reference, and to the
>>> copyright-holder, so that the properties appear in each of them. I wouldn’t
>>> recommend the use of included patterns in RDFa, but it can be made to work.
>>>
>>> I’d recommend both for Microdata and RDFa to keep references simple, and
>>> using included references, while possible, can make things more confusing.
>>> This is certainly not a pattern we were concerned about when crafting the
>>> property copying mechanism in HTML+RDFa. They two really work quite
>>> differently: Microdata requires full access to the DOM so that referenced
>>> elements can be copied, which requires random access to the DOM. The RDFa
>>> mechanism operates at a semantic level, by creating triples as normal. RDFa
>>> is intended to work with streaming processors, where there is no
>>> random-access to the DOM. The spec provides details of the rules which are
>>> applied to achieve the effect of property copying [1], but it’s not really
>>> magic to RDFa, and could just as easily be done for triples extracted from
>>> Turtle, or even Microdata, if the appropriate copying rules were applied.
>>>
>>> I understood that you didn’t know how to deal with a pattern embedded in
>>> another pattern, which I attempted to address for you. I think that the
>>> RDFa I provided does essentially what your Microdata does. If you want to
>>> discuss more, we should probably meet on IRC.
>>>
>>> Gregg
>>>
>>> P.S., I think it’s great that you’re trying to describe this for a wider
>>> audience!
>>>
>>> [1] http://www.w3.org/TR/rdfa-in-html/#implementing-property-copying
>>>
>>>
>>> 2014-03-09 1:33 GMT+01:00 Gregg Kellogg <gregg@greggkellogg.net>:
>>>
>>> Hi Jarno, I don’t think you can do precicely what you want, since if a
>>> pattern is included in another pattern, the @resource attributes get in the
>>> way. You can do it by adding some more rdfa:copy properties. This is what I
>>> came up with:
>>>
>>> <body vocab="http://schema.org/" resource="#item-page"
>>> typeof="ItemPage">
>>>   <link property="rdfa:copy" href="#copyright-holder">
>>>
>>>   <article property="text">
>>>     <div resource="#article" typeof="Article">
>>>       <div property="publisher" typeof="Corporation">
>>>         <link property="rdfa:copy" href="#publisher-url"/>
>>>         <link property="rdfa:copy" href="#publisher-description"/>
>>>       </div>
>>>
>>>
>>>       <h1 property="Name">How to copy properties in RDFa Lite &amp;
>>> Microdata</h1>
>>>     </div>
>>>   </article>
>>>
>>>   <footer property="mentions" typeof="WPFooter">
>>>     <div property="text">
>>>       <p resource="#copyright-holder" typeof="rdfa:Pattern">
>>>         <span property="copyrightHolder" typeof="Corporation">
>>>           <link property="rdfa:copy" href="#publisher-url"/>
>>>           <link property="rdfa:copy" href="#publisher-description"/>
>>>           <span resource="#publisher-url" typeof="rdfa:Pattern">
>>>             <a id="publisher-url" property="url" href="
>>> http://www.example.org" title>
>>>               <span property="name">Corporation name</span>
>>>             </a>
>>>           </span>
>>>
>>>           <span resource="#publisher-description" typeof="rdfa:Pattern">
>>>             <span id="publisher-description"
>>> property="description">Corporation description</span>
>>>           </span>
>>>         </span>
>>>       </p>
>>>     </div>
>>>   </footer>
>>> </body>
>>>
>>>  Gregg Kellogg
>>> gregg@greggkellogg.net
>>>
>>> On Mar 8, 2014, at 2:37 PM, Jarno van Driel <jarnovandriel@gmail.com>
>>> wrote:
>>>
>>> <body vocab="http://schema.org/" resource="#item-page"
>>> typeof="ItemPage">
>>> <link property="rdfa:copy" href="#copyright-holder">
>>>
>>> <article property="text">
>>> <div resource="#article" typeof="Article">
>>>   <link property="publisher" typeof="Corporation" href=?????>
>>>
>>>  <h1 property="Name">How to copy properties in RDFa Lite &
>>> Microdata</h1>
>>> </div>
>>>  </article>
>>>
>>> <footer property="mentions" typeof="WPFooter">
>>>  <div property="text">
>>>  <p resource="#copyright-holder" typeof="rdfa:Pattern">
>>>  <span property="copyrightHolder" typeof="Corporation">
>>>   <a id="publisher-url" property="url" href="http://www.example.org"
>>> title>
>>>   <span property="name">Corporation name</span>
>>>  </a>
>>>
>>> <span id="publisher-description" property="description">Corporation
>>> description</span>
>>>  </span>
>>>  </p>
>>>  </div>
>>> </footer>
>>> </body>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
Received on Wednesday, 16 April 2014 20:48:05 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:04:53 UTC