Re: addressing requirements around daml:collection (rdfms-seq-representation)

[...]

> RDF/xml has special syntax for containers, but experience
> trying to exploit it to come to intuitive conclusions
> has exposed problems. Take the class above... say
> Continent is the subject of that oneOf property.
> If we know
>
>    ex:Bob daml:differentIndividualFrom ex:Eurasia.
>    ex:Bob daml:differentIndividualFrom ex:Africa.
>    ex:Bob daml:differentIndividualFrom ex:North_America.
>    ex:Bob daml:differentIndividualFrom ex:South_America.
>    ex:Bob daml:differentIndividualFrom ex:Australia.
>    ex:Bob daml:differentIndividualFrom ex:Antarctica.
>
>    ex:NotContinent daml:complementOf ex:Continent.
>
> then we should be able to conclude
>
>    ex:Bob rdf:type ex:NotContinent.
>
> Now this works perfectly well* when the oneOf claim
> is spelled out long-hand using first/rest/nil.
>
> *[I should back this claim with running code,
> but in the interest of getting this and other
> stuff done today, I'm skipping that for now.
> I think Jos has the relevant code running.]

I keep this as a nice test case
and believe we can let this run

> But RDF/xml's collection syntax expands to these
> rdf:_1 rdf:_2 etc. triples, which don't say
> enough to come to the relevant conclusion
> without doing closed-world stuff.

that alligns with our thoughts/experience too

[...]

> On balance, I prefer parse-collection-STD right now.
> But I need to sleep on it or something to be sure.
> Other thoughts? Lynn? Jos? DaveB?

well, I prefer parse-collection-STD too

[[
  * add parseType="collection" to RDF/xml;

  * add rdf:first, rdf:rest, rdf:nil too.

  * specify that parseType="collection"
  is notation for first/rest/nil triples
  ala daml:collection.
]]

having first/rest/nil triples is making it easiest
to build entailment rules such as

{ :rule10a } log:implies { ( ?x / ?b ) owl:item ?x } .
{ :rule10b . ?b owl:item ?x } log:implies { ( ?a / ?b ) owl:item ?x } .

{ :rule11a } log:implies { ( ( ) ?c ) :append ?c } .
{ :rule11b . ( ?a ?b ) :append ?c } log:implies { ( ( ?x / ?a ) ?b ) :append ( ?x / ?c ) } .

{ :rule12a } log:implies { ( ?a ( ?a / ?c ) ) :remove ?c } .
{ :rule12b . ( ?a ?b ) :remove ?c } log:implies { ( ?a ( ?x / ?b ) ) :remove ( ?x / ?c ) } .

{ :rule13a } log:implies { ( ) :sameBagAs ( ) } .
{ :rule13b . ( ?a ?c ) :remove ?x . ?b :sameBagAs ?x } log:implies { ( ?a / ?b ) :sameBagAs ?c } .

{ :rule14a } log:implies { ( ) :sameSeqAs ( ) } .
{ :rule14b . ?b :sameSeqAs ?c } log:implies { ( ?a / ?b ) :sameSeqAs ( ?a / ?c ) } .

where ( ?a / ?b ) is shorthand for _:list such that
  _:list owl:first ?a .
  _:list owl:rest ?b .

--
Jos

Received on Friday, 19 April 2002 19:32:49 UTC