- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Thu, 06 Jan 2005 08:22:32 -0500 (EST)
- To: bparsia@isr.umd.edu
- Cc: geoff@sover.net, www-rdf-logic@w3.org
From: Bijan Parsia <bparsia@isr.umd.edu> Subject: Re: RDF as a syntax for OWL Date: Thu, 6 Jan 2005 21:40:56 +0900 > (I hope to comment on Geoff's excellent effort directly, in detail > later. But I should acknowledge...) > > On Jan 6, 2005, at 9:34 PM, Peter F. Patel-Schneider wrote: > > > > From: "Geoff Chappell" <geoff@sover.net> > > Subject: RE: RDF as a syntax for OWL (was Re: same-syntax extensions > > to RDF) > > Date: Wed, 5 Jan 2005 22:07:52 -0500 > > > >>> -----Original Message----- > >>> From: www-rdf-logic-request@w3.org > >>> [mailto:www-rdf-logic-request@w3.org] > >>> On Behalf Of Bijan Parsia > >>> Sent: Wednesday, January 05, 2005 10:28 AM > >>> To: www-rdf-logic@w3.org > >>> Subject: Re: RDF as a syntax for OWL (was Re: same-syntax extensions > >>> to > [snip] > >>> I'll even give the rules: > >>> I'll use ~ for not (complementOf) > >>> & for conjunction (intersectionOf) > >>> v for disjunction (unionOf) > >>> some for existential quantification (someValuesFrom) > >>> all for universal quantification (allValuesFrom) > >>> I'll use fairly normal infixy syntax. I'll happily convert to > >>> something else. > >>> > >>> For (compound) class expressions C and D > >>> nnf(~~C)) => nnf(C) > >>> nnf(~(C & D)) => nnf(~C) v nnf(~D) > >>> nnf(~(C v D)) => nnf(~C) & nnf(~D) > >>> nnf(~some(P, C)) => all(P, nnf(C)) > >>> nnf(~all(P, C)) => some(P, nnf(C)) > >>> > >>> Base case: for atomic class name C > >>> nnf(C) => C > >>> nnf(~C) => ~C > >>> > >>> That's almost the prolog program :) > > > > Almost, but not nearly. > > Oops, yeah. > > > The above is a specification of the > > transformations that need be done to transform to NNF. It doesn't > > (except > > for the base case) give the identity transforms. > [snip] > > Good point. Where C and D are class expressions > nnf(C&D) => nnf(C)&nnf(D) > nnf(CvD) => nnf(C) v nnf(D) > nnf(some(P, C)) => some(P, nnf(C)) > nnf(all(P, C)) => all(P, nnf(C)) > > Did I miss any? > > Cheers, > Bijan Parsia. Well, what about nnf(~~~C)? The above is a relatively informal (for the purposes of programming, but actually quite formal for mathematicians) specification of NNF. I would rather go for the following: An ALC description is of the form A ~C ~(C & D) ~(C v D) ~some(P, C) ~all(P, C) where A is an concept name, C and D are ALC descriptions, and P is a property name. ALC descriptions compromise the smallest set thus formed. (This last is to prohibit circular and infinite descriptions.) Negation Normal Form is a transformation from ALC descriptions to ALC descriptions. The negation normal form of an ALC description is obtained by using the following rewriting rules on subdescriptions of the description until all negations within the description are of atomic concepts, ~~C is rewritten as C ~(C & D) is rewritten as (~C v ~D) ~(C v D) is rewritten as (~C & ~D) ~some(P, C) is rewritten as all(P, ~C) ~all(P, C) is rewritten as some(P, ~C) The task for those who think that triples makes a good syntax is to: 1/ recouch both of the above to use triples as the sole syntax in a way compatible with RDF and RDFS (and OWL), and 2/ write code that implements the NNF transformation. The transformation code should work correctly on all ALC descriptions, not make any change to something that is not an ALC description (and, preferably, signal an error), and always return on a finite input. Peter F. Patel-Schneider
Received on Thursday, 6 January 2005 13:22:42 UTC