- From: Niklas Lindström <lindstream@gmail.com>
- Date: Tue, 23 Aug 2011 00:21:26 +0200
- To: public-rdfa-wg <public-rdfa-wg@w3.org>
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]). 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. ## 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).) ## 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)... (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. ## 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.e. the rule would scoop up immediate child elements (or perhaps ones marked with say empty an @property). Thoughts? Best regards, Niklas [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
Received on Monday, 22 August 2011 22:22:30 UTC