Drupal user profiles in RDFa

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.
"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>

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. To understand the risk of adding an
extra span, take a long at the second option above: if there is a CSS rule
on "a span" path targetting other markup on the site, then name of the
author will suddenly be affected by this rule, while it would not in the
original non-RDFa markup. Unfortunately there is no "blank" tag which maybe
would have been helpful here by not interacting with CSS. Such "blank" HTML
tag would have been useful in this case to wrap RDFa markup and ensure it is
not targeted by any CSS rule (this could be a convention at least).


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.


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?. 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?

Stephane.

Received on Sunday, 11 October 2009 15:10:27 UTC