- From: Dan Connolly <connolly@w3.org>
- Date: 30 Aug 2002 10:51:38 -0500
- To: "Smith, Michael K" <michael.smith@eds.com>
- Cc: "Peter F. "Patel-Schneider <pfps@research.bell-labs.com>, www-webont-wg@w3.org
On Thu, 2002-08-29 at 13:18, Smith, Michael K wrote:
>
> Ok. I find the choice of keyword bizarre. Mixing syntax
> and semantics in an odd way.
>
> So the difference between
>
> <daml:oneOf rdf:parseType="daml:collection">
> <rdf:li> <Person rdf:id="John" /> </rdf:li>
> <rdf:li> <Person rdf:id="Bill" /> </rdf:li>
> </daml:oneOf>
> and
> <daml:oneOf>
> <rdf:li> <Person rdf:id="John" /> </rdf:li>
> <rdf:li> <Person rdf:id="Bill" /> </rdf:li>
> </daml:oneOf>
>
> is that I can prove that the first one has exactly 2 elements?
nit: At most 2; the two expressions could denote the same thing.
> While I can't extend the second one (since I can't reference it), the
> semantics don't require that it be closed.
It might help to understand if you look at the corresponding
formulas in a more familiar syntax.
Hmm... I don't think the above syntax is what you meant even in RDF/XML.
I think it'll be more clear if we make the subject of these
statements explicit.
The first one should, I presume, look like:
<rdfs:Class rdf:ID="someFolks">
<daml:oneOf rdf:parseType="daml:collection">
<Person rdf:id="John" />
<Person rdf:id="Bill" />
</daml:oneOf>
</rdfs:Class>
which, in, say, ACL2, looks like:
(exists (?x ?y)
(and
(PropertyValue daml:oneOf someFolks ?x)
(PropertyValue first ?x John)
(PropertyValue rest ?x ?y)
(PropertyValue first ?y Bill)
(PropertyValue rest ?y nil)
) )
which is pretty much just:
(PropertyValue daml:oneOf someFolks (list John Bill))
[oops... ACL2 doesn't have quantifiers, does it?
oh well, I think you get the idea.]
If you've got a language like newer KIF dialects or CycL
or HiLog, you can skip the PropertyValue gizmo and just write
(daml:oneOf someFolks (list John Bill))
and I think CycL even allows functional relations to be
used like function symbols:
(= someFolks (daml:oneOf (list John Bill)))
The point here is that daml:oneOf is just a property name.
The RDF parser doesn't treat it as special syntax; it
doesn't change parsing modes for the contents of the
oneOf element; the parseType="collection" is what tells
it to change parsing modes and make a list.
Now the other one, I presume, should look like this:
<rdfs:Class rdf:ID="someFolks">
<daml:oneOf rdf:parseType="Resource">
<rdf:li> <Person rdf:id="John" /> </rdf:li>
<rdf:li> <Person rdf:id="Bill" /> </rdf:li>
</daml:oneOf>
</rdfs>
which, according to the RDF/XML syntax, represents
a formula pretty much like this:
(exists (?x)
(and
(PropertyValue daml:oneOf someFolks ?x)
(PropertyValue rdf:_1 ?x John)
(PropertyValue rdf:type John Person)
(PropertyValue rdf:_2 ?x Bill)
(PropertyValue rdf:type Bill Person)
) )
or, more colloquially:
(= someFolks (daml:oneOf ?x))
(first ?x John)
(second ?x Bill)
At this point, I hope it's clear how the parseType="collection"
construct closes the list but the <li> construct doesn't.
--
Dan Connolly, W3C http://www.w3.org/People/Connolly/
Received on Friday, 30 August 2002 11:51:30 UTC