- From: Ivan Herman <ivan@w3.org>
- Date: Tue, 23 Aug 2011 11:52:17 +0200
- To: Niklas Lindström <lindstream@gmail.com>
- Cc: public-rdfa-wg <public-rdfa-wg@w3.org>
On Aug 23, 2011, at 24:21 , Niklas Lindström wrote:
> Hi all!
>
> I'd like to take a stab at the renewed interest in support for rdf:List in RDFa.
>
> I have considered the proposal at [1], as well as the ongoing debate
> sparked by (e.g.) Jeni Tennison's post [2] and Ivan's feedback [3].
>
> First off, I (as well) doubt that using <ul> or <ol> would suffice,
> since there are many use cases where that markup isn't ideal for lists
> (as also discussed in [2]).
I agree that binding this to <ul> and <ol> would not be a good idea. It is too restrictive. (We may use shorthands in the case of <ul> and <ol>, but let us look at that later.)
Before going into the alternatives, I would also like to know what your problems are with [1]. I understand there are may be problems (surely there are), but you do not really touch that in your mail below. I still look at [1] as a viable alternative. See also my remarks at the end.
>
> Instead, I have three closely related alternatives for your consideration:
>
>
> ## Alternative A: overload @datatype
>
> We can overload the meaning of @datatype so that it works differently
> if it has a value of rdf:List. RDFa would then interpret that as a
> resource type for a (here anonymous) non-literal node, which "scoops
> up" nested resources, just like a hanging @rel does.
>
> Also, if a @rel is present in the same element, it would link the
> current subject to this list resource.
>
> Example:
>
> <ul rel="bibo:authorList" datatype="rdf:List">
> <li typeof="foaf:Person" property="foaf:name">Bilbo Baggins</li>
> <li typeof="foaf:Person" property="foaf:name">Frodo Baggins</li>
> </ul>
>
> Yielding:
>
> <> bibo:authorList (
> [ a foaf:Person; foaf:name "Bilbo Baggins"]
> [ a foaf:Person; foaf:name "Frodo Baggins"]
> ) .
>
> Since there is already special parsing in place for dealing with
> rdf:XMLLiteral in @datatype, this isn't really so far a leap.
>
> Apart from one glaring detail: this is a hack semantically, since it
> abuses the semantics of @datatype. In RDF, lists and containers are
> *not* literals, so the RDF concept of datatype really doesn't apply.
I think this is really confusing because, as you say, this is not a datatype _at all_. I am against that type of confusion, hence this approach.
>
>
> ## Alternative B: add a new @resourcetype
>
> We could also introduce a specific @resourcetype attribute for the
> sole purpose of typing the object resource when it is not a literal.
> This would be a "companion" attribute to @href/@resource, working just
> like @typeof works in relation to @about (including implying an
> anonymous resource if there is no @href/@resource).
>
> This should then be defined like above to treat rdf:List as special,
> triggering the mechanism described above.
>
> (Some years ago some of us were talking (off list) about adding this
> @resourcetype, but came to the conclusion at that time that'd be a bit
> too much. We might have a different perspective on it now (for one we
> didn't discuss this rdf:List feature).)
There is the issue of @resourcetype that you address below, and I decided to react on it more generally in a separate thread because this is not (necessarily) bound to the list issue.
But it is not clear to me. As I say in the other mail,
<span rel="dc:hasPart" resourcetype="bibo:Book">....<
would have to lead to a drop of resourcetype, because there is no explicit resource (and hanging rel). On the other hand, it makes sense for a List to generate a blank node as a resource, in fact, that is the usual way lists are used. Ie, there are lots of special cases in the treatment of resourcetype in general that makes this a bit shaky...
>
>
> ## Alternative C: redefine @datatype, or deprecate it and introduce @valuetype
>
> We could define a new attribute called @valuetype (superseding
> @datatype) which types the object resource *or* sets the datatype of a
> literal depending on if a @property or @rel (but not both...) is
> present.
>
> Or actually redefine @datatype to work like this, i.e. @datatype
> actually means "the type of the object"... That could be quite
> confusing though, since as said, RDF datatypes are specific to
> literals. It depends on whether a new attribute or redefining the
> meaning of datatype in RDFa is more palatable.
>
> The remaining problem with this option is if @rel and @property are
> both present. I'd rather avoid specifying the rules for that case (I'd
> rather forbid them both being present)...
Merging a datatype and a resource type into one would be very strange and confusing.
An additional issue: I know we are heading (though not decided!) toward an incompatibility with RDFa 1.0. However, I would like to keep such incompatibilities to the strict minimum. Deprecating @datatype for this reason seems to be way beyond what we should do in my view.
>
> (One minor argument in favor of a unification would be that in OWL,
> the value of rdfs:range should be a datatype if the property described
> (the subject of rdfs:range) is an owl:DatatypeProperty -- i.e. the
> value is to be an instance of rdfs:Datatype (e.g. xsd:date). If it is
> an owl:ObjectProperty it should be a regular instance of owl:Class.)
>
>
> ## The missing object type feature
>
> With the above, we have touched upon what some consider a missing
> feature: the ability to have an rdf:type shorthand for the object.
> This takes care of a need some (including myself) have had with
> unobtrusively typing a resource in the same element as @rel.
>
> Example:
>
> <div rel="dc:hasPart" resource="#ch-1" resourcetype="bibo:Chapter">
> <h2 property="dc:title" lang="en">One</h2>
>
> Yielding:
>
> <> dc:hasPart <#ch-1> .
> <#ch-1> a bibo:Chapter;
> dc:title "One"@en .
>
> Granted, adding "yet another" attribute might be considered to add
> even more complexity. Personally I feel that it would clear some
> things up though. And it would provide us with means for *both*
> rdf:List creation (by special treatment of rdf:List) *and* unobtrusive
> typing of the object.
See separate mail for that.
>
>
> ## Remaining
>
> Note that this doesn't address the container types, i.e. rdf:Seq,
> rdf:Bag, rdf:Alt. We could of course add support for the RDF/XML
> "magic" property rdf:li as well, generating rdf:_1, rdf:_2, etc. as
> appropriate. Personally I don't think it'd be worth it though, in part
> because one can use rdf:_1 and so on explicitly if one needs to, and
> more relevantly since they (containers) are AFAIK legacy concepts.
>
> Finally, this proposal does not enable us to write lists of
> *literals*. This is possible in Turtle, but not in RDF/XML. I have
> seen some use cases for literals, but I believe the majority of lists
> are lists of non-literal nodes (like in OWL). Sure, we could work this
> in as well if we really want to, using something along the lines of:
>
> <ul rel="bibo:authorList" resourcetype="rdf:List">
> <li>Bilbo Baggins</li>
> <li>Frodo Baggins</li>
> </ul>
>
I think I disagree. One of the biggest issues in RDF/XML's list management, in my view, is that it cannot handle lists of literals. I think if we cannot encode things like author's list properly, then we have failed.
So... sorry Niklas, I do not see why your alternatives would be better than the ones in [1]. You operate with magic types; [1] operates with magic resources... Also, as I say in [1], I think tying it to the real rdf types rdf:List may be wrong: in some cases the author may want to control exactly what and when goes to a list and an automatism would get on his/her way. Hence my usage of the pseudo resources ::List or ::member.
That being said: using pseudo resources is not really nice either. The reason I chose them is because I did not want to introduce new attributes. However, if we want to go down the management of lists then, well, why do not we make it clear that we _are_ talking about lists (as Jeni proposes)? So something like
<span rel="dc:creator" resource="::Seq">
<span property="::member">Grigoris Antoniou</span> and
<span property="::member">Frank van Harmelen</span>
</span>
could be replaced by something like
<span rel="dc:creator" container="sequence">
<span member>Grigoris Antoniou</span> and
<span member>Frank van Harmelen</span>
</span>
<span rel="dc:creator" resource="::List">
<span property="::member">Grigoris Antoniou</span> and
<span property="::member">Frank van Harmelen</span>
</span>
<span rel="dc:creator" container="list">
<span member>Grigoris Antoniou</span> and
<span member>Frank van Harmelen</span>
</span>
This is not fully o.k., because it is not clear whether the member should be a literal or a resource (the same old issue with @rel and @property...); in the original solution I used @rel="::member" and @property="::member", ie, I fell back on the @rel and @property behaviour. So maybe we will have to have @member_property and @member_resource or something like that. Or, again as an alternative, we could say @member="literal" or @member="resource", with a default (eg, member in HTML5 or member="" would mean literal member). Or we could be even more restrictive (after all, this is a shorthand) and
<span member resource="some:thing">balbal</span>
would automatically be a resource (by virtue of resource being explicit) and a literal otherwise.
Cheers
Ivan
>
> [1]: http://www.w3.org/2010/02/rdfa/wiki/ContainersAndCollections
> [2]: http://www.jenitennison.com/blog/node/165
> [3]: https://plus.google.com/u/0/112095156983892490612/posts/5bx1gaVXceA
>
----
Ivan Herman, W3C Semantic Web Activity Lead
Home: http://www.w3.org/People/Ivan/
mobile: +31-641044153
PGP Key: http://www.ivan-herman.net/pgpkey.html
FOAF: http://www.ivan-herman.net/foaf.rdf
Received on Tuesday, 23 August 2011 09:49:44 UTC