- From: Dan Connolly <connolly@w3.org>
- Date: Fri, 12 Jan 2001 09:01:59 -0600
- To: "Dickinson, Ian J" <Ian_J_Dickinson@hplb.hpl.hp.com>
- CC: www-rdf-logic@w3.org
"Dickinson, Ian J" wrote: > > Folks - > There are a couple of problems with the DAML+OIL reference > (http://www.daml.org/2000/12/reference.html) on the treatment of parse type > daml:collection. Not surprising... that was written up at the 11th hour... > The first problem is fairly trivial. In the section explaining the > interpretation of the collection node > (http://www.daml.org/2000/12/reference.html#collection), the empty list > element is shown as: > <rest rdf:resource="nil"> > when it should be > <List rdf:resource="nil"> that is: <List rdf:about="...#nil"/>; rdf:resource is used in propertyElements; rdf:about is used in typedNodes. The example doesn't show a complete statement. I'd suggest the example should say: <Class about="#color"> <oneOf rdf:parseType="daml:collection"> <Thing about="#red"/> <Thing about="#white"/> <Thing about="#blue"/> </oneOf> </Class> and after elimination of daml:collection syntactic sugar, it should be... (I'm including all the namespace stuff because I need that to check it with SiRPAC http://www.w3.org/RDF/Implementations/SiRPAC/) <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="http://www.daml.org/2000/12/daml+oil#"> <Class rdf:about="#Color"> <oneOf> <List> <first> <Thing rdf:about="#red"/> </first> <rest> <List> <first> <Thing rdf:about="#white"/> </first> <rest> <List> <first> <Thing rdf:about="#blue"/> </first> <rest rdf:resource="http://www.daml.org/2000/12/daml+oil#nil"/> </List> </rest> </List> </rest> </List> </oneOf> </Class> </rdf:RDF> Sirpac will show you circles-and-arrows; I'm not sure how long this GIF will be around, but you can always re-recreate it: http://www.w3.org/RDF/Implementations/SiRPAC/SiRPACServlet.tmp/sirpac_47066.gif > otherwise the document has an illegal property of a property construction > (rest of rest). Another typo is that the final tag should be </List> not > <List>. Also, I suspect that the URI 'nil' should have an explicit > namespace, otherwise every DAML document will have a different list > terminator. > > The second problem is that it would be nice if we could apply a simple > syntactic transformation to remove the parseType daml:collection's before > parsing with a standard RDF parser (as suggested in the reference document). Yes, that is the idea... > This is made more difficult because parseType daml:collection is applied to > both properties and instances in slightly different ways. Oops... > For example, the e.g. in the reference document uses the oneOf property. The > example translates: > > <oneOf rdf:parseType="daml:collection"> > <Thing rdf:resource="#red"/> > <Thing rdf:resource="#white"/> > <Thing rdf:resource="#blue"/> > </oneOf> > > to: > > <List> > <first> > <Thing rdf:resource="#red"> > </first> > <rest> > ... elided for brevity ... > </rest> > </List> as above, this should be rdf:about, rather than rdf:resource, throughout. > Presumably, then, the final document contains (or should be interpreted as): > > <oneOf> > <List> > <first> > <Thing rdf:resource="#red"> > </first> > <rest> > ... elided for brevity ... > </rest> > </List> > </oneOf> > > So the interpretation of the daml:collection attribute on a property is that > the _value_ of the property is a List. Yes, that's the idea. > However, a disjoint axiom also has parseType daml:collection: > > <daml:Disjoint rdf:parseType="daml:collection"> > <rdfs:Class rdf:about="#Car"/> > <rdfs:Class rdf:about="#Person"/> > <rdfs:Class rdf:about="#Plant"/> > </daml:Disjoint> That's goofy; it should be something like: <daml:Disjoint> <equivalentTo rdf:parseType="daml:collection"> <rdfs:Class rdf:about="#Car"/> <rdfs:Class rdf:about="#Person"/> <rdfs:Class rdf:about="#Plant"/> </equivalentTo> </daml:Disjoint> though that isn't very idiomatic. > Since daml:Disjoint is a sub-class of List (which seems like an engineering > convenience rather than a deep statement about the domain of axioms and > lists), presumably the correct interpretation is: > > <daml:Disjoint> > <first> > <rdfs:Class rdf:about="#Car"/> > </first> > <rest> > ... nested list of person and plant ... > </rest> > </daml:Disjoint> > > I.e. the Disjoint instance itself takes the place of the outer List in the > content of the oneOf property, so the interpretation of daml:collection here > is that the axiom instance _is_ a list. Yes. > The other alternative is that there should be an intervening property > between the Disjoint axiom instance and the translated List (and by > corollary, Disjoints contain lists but are not sub-classes of List), but it > is not clear what this property would be. equivalentTo works. > Either way, a transformation to translate daml:collection's to the List form > can't be a context-free grammar at the XML level, since it's an RDF > convention that distinguishes instances from classes from properties. At the > XML level they're all just elements. And if we want to do document > translation pre the RDF parse phase, the only interpretation level available > is XML. > > Comments welcome, especially if I've missed something in my understanding of > the specs. On the contrary; you've been quite insightful; you managed to find the design despite the inconsistencies in the documentation. ;-) It didn't occur to me that you could eliminate daml:collection as a pure XML->XML translation, but now that I think about it, I beleive you can; parseType only occurs on propertyElements, so a simple XSL thingy that explodes */@rdf:parseType="daml:collection" (where daml: can be any prefix bound to the right namespace) into the List representation should work. By the way... see also some earlier design notes I made on lisp-style lists, in case it helps: List structure -- an RDF Schema http://www.w3.org/2000/07/hs78/lists Sun, 13 Aug 2000 04:11:26 GMT I marked that obsolete in favor of some KIF stuff... http://www.w3.org/2000/07/hs78/KIF#List The KIF stuff includes some XSL code for munging lists and such. -- Dan Connolly, W3C http://www.w3.org/People/Connolly/
Received on Friday, 12 January 2001 10:02:34 UTC