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: Larry Betts <lbetts@thoughtwm.com>
Date: Wed, 16 Apr 2014 16:45:27 -0400
Message-ID: <CACPkK6WXL-34n0vk1hFzvhEV0r_JgxRU-zkn+JmCx0hXrwTrCQ@mail.gmail.com>
To: Jarno van Driel <jarnovandriel@gmail.com>
Cc: rhm@pioneerca.com, Gregg Kellogg <gregg@greggkellogg.net>, Niklas Lindström <lindstream@gmail.com>, public-rdfa <public-rdfa@w3.org>
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 Thursday, 17 April 2014 09:46:05 UTC

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