Re: Nested Items in <HEAD> Element

Hi Evan,

On Wed, Dec 21, 2011 at 3:06 PM, Sandhaus, Evan <sandhes@nytimes.com> wrote:

> I am currently advising a number of teams on the implementation of
> Schema.org markup and I've encountered an issue with nested metadata in
> the <HEAD> element.
>
> Suppose you have a 'NewsArticle' document to which you have added an
> 'itemscope' to the <HTML> element.  Lets further suppose that you want to
> add some non-visible metadata to the <head> element, say the word count.
>  To do this you'd code up something like:
>
> <html itemscope itemtype='http://schema.org/NewsArticle">
> <head>
> <meta itemprop="wordCount" content="1138"/>
>  ...
>
> So far so good, but now suppose we want to add another bit of non-visible
> metadata to the <head>, but this time we want to add a 'Person' object.
>
> This is where the problem comes in.  Inserting a 'Person' object requires
> that we nest tags and  it isn't legal in HTML to nest <meta> tags.   Only a
>  few tags are legal in the scope of <HEAD>.   These tags are <TITLE>,
> <BASE>, <LINK>, <META>, and <STYLE>.  The problem with this is that none of
> these tags are permitted to have child tags and you can't express that a '
> http://schema.org/NewsItem' object is 'about' a 'http://schema.org/Person'without nesting tags.    In HTML 4 but not HTML 5 the <OBJECT> element is
> legal in the <HEAD>.
>
> So what can I do?  Is there any valid HTML 5 way to express the following
> (where nestable is the hypothetical name of an element that doesn't make
> this illegal )?
>
>
> <html itemscope itemtype='http://schema.org/NewsArticle">
> <head>
> <meta itemprop="wordCount" content="1138"/>
> <nestable itemscope itemtype="http://schema.org/Person">
>  <meta itemprop="name" content="Evan Sandhaus"/>
> </nestable>
>        ....
> </head>
> ...
> </html>
>
> If it is not possible to do this, how would you suggest I proceed?
>

The same topic came up during the mixer ater the schema.org workshop last
September, where we came to the same conclusion as yours. You'd have to
place your markup in <body> if you want to take advantage of the nested
elements (possibly as a hidden snippet). What you could do in <head> is use
a flat list of elements, where each element refer to one of the objects you
talk about. In RDFa, assuming you defined @vocab="http://schema.org/" in
head or html, it would look like:

<meta about="#article" typeof="NewsArticle" />
<meta about="#article" property="wordCount" content="1138"/>
<meta about="#article" property="version" content="1.1"/>
<meta about="#person" typeof="Person" />
<meta about="#person" property="name" content="John"/>

you could achieve similar results in microdata with @itemref, though the
HTML wouldn't look as linear/consistent. The @itemscope element for each
object would have to list all the other elements containing a property
defining that  object. I don't have access to the microdata testing tool
from here, so can't guarantee the snippet below works, but this is the idea:

<meta itemscope itemtype='http://schema.org/NewsArticle"
itemref="article-p1 article-p2">
<meta id="article-p1" property="wordCount" content="1138">
<meta id="article-p2" property="wordCount" content="1138">
<meta itemscope itemtype='http://schema.org/Person" itemref="person-p1">
<meta id="person-p1" property="name" content="John">

(make sure to use unique @id which don't conflict with other elements in
the body)


Steph.


>
> Thanks!
>
> ~Evan
>

Received on Wednesday, 21 December 2011 21:12:35 UTC