Re: Drupal user profiles in RDFa

On Sun, 11 Oct 2009 17:09:52 +0200, Stephane Corlosquet  
<scorlosquet@gmail.com> wrote:

> Hi all,
>
> I'm checking the RDFa markup we have chosen for Drupal 7 and want to make
> sure it's optimal, given that it won't be able to change it after the  
> code freeze (which in one week!). In particular I'd like to discuss the  
> case of the user markup which is used to describe the author or a page  
> or comment.

Thanks for the chance to feedback!

> "User profile" in this email refers to the concept of sioc:User /
> foaf:OnlineAccount. Drupal has 3 main cases which all have different  
> markup.
>
>
> 1. If the administrator of the site decided to make the user profile  
> pages public, then the author will be a link to the author profile page
> http://example.org/user/23. The original markup is:
>
> <a href="/user/23" title="View user profile." class="username">John</a>
>
> We have 2 options to add RDFa to this link which both return the same RDF
> data:
>
> <a href="/user/1" rel="sioc:has_creator foaf:maker" title="View user
> profile." class="username"><span resource="/user/1" typeof="sioc:User"
> property="foaf:name">Henry</span></a>
>
> or
>
> <span rel="sioc:has_creator foaf:maker"><a href="/d7sprint/user/1"
> typeof="sioc:User" property="foaf:name" title="View user profile."
> class="username">Henry</a></span></span>

I'm assuming the /dsprint7 is a typo here, otherwise they wouldn't have  
the same triples.

So the triples they produce are like:

   <http://www.w3.org/basedoc.html> <http://sioc.org/has_creator>  
<http://www.w3.org/user/1> .
   <http://www.w3.org/basedoc.html> <http://foaf.org/maker>  
<http://www.w3.org/user/1> .
   <http://www.w3.org/user/1> <http://foaf.org/name> "Henry" .
   <http://www.w3.org/user/1>  
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://sioc.org/User> .

Of the two I slightly prefer the second, with the outer <span>, since the  
URI doesn't have to get repeated.

If it weren't for the @typeof, you could do it all in one go:

<a href="/user/3" rel="sioc:has_creator foaf:maker" title="View user
profile." class="username" property="foaf:name">Steven</a>

but of course the @typeof changes the subject.

> Question for the RDFa ninjas reading this: is there a way to embed all  
> this
> information without adding a span tag either inside or outside the a
> existing a tag. I'm asking this because adding extra markup is frown  
> upon by
> Drupal themers as it might break some CSS rules or have unintended  
> effects,
> so if we can do without it it's best.

At the cost of repeating the URI, but with the advantage that it doesn't  
risk messing up your CSS, you don't have to nest the extra span:

<a href="/user/1" rel="sioc:has_creator foaf:maker" title="View user  
profile." class="username" property="foaf:name">Henry</a>
<span about="/user/1" typeof="sioc:User"></span>

So this is a non-nested version of your first solution.

> 2. If the user profile pages are not accessible then only the name of the
> author will be displayed and we are missing the URL of her profile page,  
> or rather I should say we can generate a URI for the user profile, but
> resolving it would lead to a 403 Access denied. The default Drupal  
> markup in
> this case is simply:
> <span class="username">John</span>
>
> I see 3 alternatives to annotate this in RDFa:
>
>   2.1 Use a markup similar to the one above, but the cons is that the  
> user
> profile URI will not be dereferencable (and hereby breaking one of the
> Linked Data principles). It will return a 403 Access denied.
>
> <span rel="sioc:has_creator foaf:maker" class="username"><span
> resource="/user/1" typeof="sioc:User"
> property="foaf:name">Henry</span></span>
>
>   2.2 Same as 2.1 but without the resource attribute hence generating a
> bnode. I always try hard to avoid generating these, but if this is no  
> work
> around, then we'll have to use it.
>
> <span rel="sioc:has_creator foaf:maker" class="username"><span
> resource="/user/1" typeof="sioc:User"
> property="foaf:name">Henry</span></span>
>
>   2.3 We don't introduce the concept of user profile and simply link the
> page to a name (literal).
>
> <span class="username" property="foaf:maker">Henry</span>
>
> I don't like 2.3 because it's not as meaningful from an RDF perspective.
> Also, we don't have the same choices in the RDF properties we can use  
> due to
> the domain which is now a literal, which would be a problem in the  
> context
> of Drupal since the page -> author relationship gets the same set of RDF
> properties no matter what the case is (between 1, 2 or 3). So I'd rather  
> use
> 2.1 or 2.2. but we've got to decide between the best of the two: a non
> dereferencable URI or a bnode? I like the non referencable URI because we
> can uniquely identify the author outside the scope of the page, but I  
> wonder
> how the parsers will react when trying to resolve the URI.

I think you're worrying too much about the 403s. The triples are true,  
whether or not you try to dereference the URIs:

   <http://www.w3.org/basedoc.html> <http://sioc.org/has_creator>  
<http://www.w3.org/user/1> .
   <http://www.w3.org/basedoc.html> <http://foaf.org/maker>  
<http://www.w3.org/user/1> .
   <http://www.w3.org/user/1>  
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://sioc.org/User> .
   <http://www.w3.org/user/1> <http://foaf.org/name> "Henry" .

What you may want to avoid is making them *easy* to dereference. Then I  
would use a span+@resource instead of an a:

<span resource="/user/1" rel="sioc:has_creator foaf:maker"  
title="Inaccessible user profile" class="username"  
property="foaf:name">Henry</a>
<span about="/user/1" typeof="sioc:User"></span>

> 3. In the case of a non registered user leaving a comment, Drupal offers  
> to leave her name, homepage and email address (though the email address  
> is not displayed for privacy reasons). The default markup is:
>
> <a href="http://openspring.net/" rel="nofollow" class="username">Stephane
> Corlosquet (not verified)</a>
>
> We don't have a user profile URI here, but a homepage which is usually
> linked to a foaf:Person. Here we have multiple options again to describe  
> the author of a comment. I'm not sure we should directly link a page to a
> foaf:Person, should we?

No.

> Do we have to generate a foaf:OnlineAccount
> /sioc:User URI here based on the homepage by adding #user to it? use a
> bnode? opinions?

In the absence of other information I prefer to use  
rel="foaf:isPrimaryTopicOf" to identify a person from their homepage.
(See http://www.w3.org/MarkUp/2009/rdfa-for-html-authors)

Hope this helps.

Best wishes,

Steven Pemberton

>
> Stephane.

Received on Monday, 12 October 2009 11:49:50 UTC