DAML-S expressiveness challenge #3

Hello rdf-logicians:

I would like to have a nice way to declare a DAML+OIL property's range
to indicate that:

each value of the property is a list, of a particular length,
and specific list elements must have specific types.

(What do I mean by "value of a property"?  Siimply this: if <X Prop Y>
is an instance of property Prop, I call Y a "value of the property".)

I know how to do this, laboriously and non-readably, using a chain of
restrictions on "first" and "rest".  But I'm hoping for some syntactic
sugar.  I am currently using a partially defined property for this
purpose, called listOfInstancesOf (compare to intersectionOf):

<daml:Property rdf:ID="listOfInstancesOf">
  <rdfs:domain rdf:resource="#Class"/>
  <rdfs:range rdf:resource="#List"/>
  <rdfs:comment>
    This is a "place-holder" for now, which needs further work.
    The range is a list of classes.
    "Class listOfInstancesOf X Y Z" (for example) is used to indicate
the class
    of lists having an instance of class X as their first member, an
instance
    of class Y as their second member, and an instance of class Z as
their
    third member.
  </rdfs:comment>
</daml:Property>

My question: what is a complete valid definition for listOfInstancesOf
(if there is one)?

 Here's a simple example of use (again, compare to intersectionOf) :

       <daml:Class rdf:ID="MyClass">
         <listOfInstancesOf rdf:parseType="daml:collection">
           <daml:Class rdf:about="#LocateBook"/>
           <daml:Class rdf:about="#CongoBuyBook"/>
         </listOfInstancesOf>
       </daml:Class>

A valid instance of MyClass would be the list of length 2, containing an
instance of LocateBook as its first element, and an instance of
CongoBuyBook as its second element.

Thanks,
David Martin

Received on Wednesday, 11 September 2002 16:47:33 UTC