- From: Dave Reynolds <der@hplb.hpl.hp.com>
- Date: Mon, 13 Apr 2009 09:35:19 +0100
- To: Jos de Bruijn <debruijn@inf.unibz.it>
- CC: RIF WG Public list <public-rif-wg@w3.org>
Jos de Bruijn wrote:
> <snip/>
>
>>> Therefore, the least of all evils seems to be to revert back to
>>> individual guard predicates for the datatypes, i.e., instead of
>>> isLiteralOfType we would have isLiteralInteger, isLiteralString, etc.
>>> I believe we do have sufficient grounds to override the previous
>>> resolution that established isLiteralOfType, because we did not realize
>>> at the time that it would cause so many problems.
>> I think here philosophy should be put aside and we should just use anyURI ro
>> specify the data types in isLiteralOfType
>
>
> Like I said earlier, I can live with this solution.
> I wonder, though, what the real advantage is compared with the
> individual guard predicates. Sure, you don't have to specify the "short
> names" the datatypes and have a little bit more flexibility, but not all
> that much.
> The thing is that this predicate cannot be as flexible as one might
> expect. Particularly, we need to restrict the domain of the second
> argument to the anyURIs of known datatypes (at least, there cannot be
> anyURIs in the domain beyond the ones that are known to identify
> datatypes), in order to prevent invisible extensions [1].
The dialects are already parameterized by the set of datatypes, just as
they are by the set of externals, I don't see this as an "invisible
extension".
> This means
> you cannot use isLiteralOfType to "extract" the datatypes of literals.
Are you saying this just because of binding patterns? I assume that
once this question is settled, and especially if we end up using
xsd:anyIRI for isLiteralOfType, then we'll give it the binding pattern
(b,u).
> Consider the rule
>
> myType(?x) :- External(isLiteralOfType("1"^^xs:int, ?x))
>
> Now, if the variable ?x is assigned to ".....decimal"^^anyURI,
> isLiteralOfType("1"^^xs:int, ?x) is true. However, if ?x is assigned to
> "http://bla"^^anyURI, the predicate is assigned an arbitrary truth
> value. So, if the RIF implementation is adopting good practice, it will
> return an error when executing this rule.
Fine.
> So, in practice, you are limited to using constants as the second
> argument, or a very limited form of quantification.
Or an unbound variable.
Dave
Received on Monday, 13 April 2009 08:36:06 UTC