- From: Dave Reynolds <der@hplb.hpl.hp.com>
- Date: Wed, 11 Feb 2009 11:51:56 +0000
- To: Axel Polleres <axel.polleres@deri.org>
- CC: Jos de Bruijn <debruijn@inf.unibz.it>, "Public-Rif-Wg (E-mail)" <public-rif-wg@w3.org>
Axel Polleres wrote: > > Jos de Bruijn wrote: >> Re: the first editor's note in section 3.1.1 >> >> I believe the predicates should depend on a specific domain, and should >> be undefined if it is not the case that both arguments are in the same >> value space. >> This only becomes an issue, of course, if we decide to adopt these >> predicates, which is not something I support. >> >> <snip/> >> >>> 1) As noted in the editor's note, it seems to me that >>> >>> pred:literal-equal >>> >>> is redundant. If that is untrue, let me know. >> >> this is not true (at least it should not be). Equality in XML schema is >> not the same as identity. >> >>> Now here goes an example for the problem case, assuming disjoint >>> datatypes decimal and double (please confirm),: >>> pred:numeric-equals("1"^^xs:double , "1"^^xs:decimal) = t >>> pred:literal-equals("1"^^xs:double , "1"^^xs:decimal) = f >> >> literal-equals should behave the same as numeric-equals on numbers. It >> seems to me that you made a mistake in the definition. > > I tried to write down what we discussed, to get a better understanding > ofg what we want... it was/is not clear to me what you mean by "mistake" > at this point. If you think that literal-equals should do promotion, > that is one point of view, there might be others. This is indeed a tricky decision and one I hadn't properly considered when proposing the builtin. The original motivating use case was OWL RL where the relevant rule is: Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- External(pred:isLiteralNotEqual(?l1 ?l2)) For that usage then the semantic inequality notion that Axel has captured is right and would not involve type promotion. However, I can see that having isLiteralNotEqual and numeric-not-equal disagree will be counter-intuitive. If we switched to isLiteral[Not]Equal performing the standard XFO type promotion then we can still write the OWL RL rule: Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- External(pred:isLiteralNotEqual(?l1 ?l2)) Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- And( External(pred:isLiteralOfType(?l1 xs:float)) External(pred:isLiteralNotOfType(?l2 xs:float)) ) Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- And( External(pred:isLiteralOfType(?l2 xs:float)) External(pred:isLiteralNotOfType(?l1 xs:float)) ) Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- And( External(pred:isLiteralOfType(?l1 xs:double)) External(pred:isLiteralNotOfType(?l2 xs:double)) ) Forall ?lt1 ?lt2 ( ?lt1[owl:differentFrom->?lt2] :- And( External(pred:isLiteralOfType(?l2 xs:double)) External(pred:isLiteralNotOfType(?l2 xs:double)) ) Not pretty but acceptable. I have a small preference for isLiteralEqual and isLiteralNotEqual staying with Axel's definition and not doing type promotion and us retaining numeric-equal and numeric-not-equal (while presumably discarding other redundant equality/inequality tests). However, if the majority would prefer isLiteral[Not]Equal to do type promotion and replace all the existing equality/inequality tests then I would not object. Dave -- Hewlett-Packard Limited Registered Office: Cain Road, Bracknell, Berks RG12 1HN Registered No: 690597 England
Received on Wednesday, 11 February 2009 11:52:50 UTC