- From: Axel Polleres <axel.polleres@deri.org>
- Date: Mon, 23 Jun 2008 07:16:58 +0100
- To: Jos de Bruijn <debruijn@inf.unibz.it>
- CC: kifer@cs.sunysb.edu, Rule Interchange Format Working Group WG <public-rif-wg@w3.org>
Jos de Bruijn wrote:
>
>
> Axel Polleres wrote:
>> For all: I added a strawman for the
>>
>> pred:iri-to-string( iri string )
>>
>> in the DTB document. Comments welcome!
>> more remarks to jos' reply inline below.
>>
>> Jos de Bruijn wrote:
>>>
>>>> So, my point for that proposal was that - at least syntactically - I
>>>> would like this to look like a cast function and not a predicate.
>>>
>>> Why? It's not function, so you should not lead people to believe
>>> that it is.
>>
>> ...
>>
>>>> If I understood michael correctly, the other direction
>>>>
>>>> rif:iri("b"^^xsd:string) = "b"^^rif:iri
>>>>
>>>> can still work, yes?
>> >
>>> I see no technical problem with it.
>>
>> ... so, it *is* a function then, right? in the rif:iri direction, i
>> mean, it is just that the definition is slightly different than the
>> other built-in functions.
>>
>>>> At least that would save the casts *to* rif:iri, and we only need
>>>> the predicate for string-to-iri ... yes?
>>>
>>> It seems to me that this just complicates matters; users need to
>>> learn both the predicate and the "function", which probably doesn't
>>> really behave as they expect.
>>
>> *users* don't need to learn anything new, they can use cast functions
>> just like for data types, which is intuitive. If we add new
>> predicates, they need to learn something new, this is why I want to
>> keep functions for conversions wherever possible.
>
> The issue is that it is not a cast function in the way the other cast
> functions are. For example, to a query
>
> ?x=rif:iri("a")
>
> The user may get two answers
> "a"^^rif:iri
> "b"^^rif:iri
which is totally ok, since '=' is not an assignment but equality,
you have the same issue for any other casting functions, as soon as you
can infer equality, don't you?
If you assert as a fact:
<http://www.ex.org/myInts/1> = "1"^^xsd:integer
now... if I want the entailments, what answers would be "expected" for
?x=xsd:integer("1.0"^^xsd:decimal)
> So, the end result would not be what the user expects.
What does the user expect?
> Plus, we need the predicate for conversion between strings and IRIs
> anyway. So, the choice is between (a) function + predicate and (b)
> predicate. (b) is clearly simpler than (a).
hmmm, "clearly simpler" appears to me a subjective judgement here.
Axel
> Best, Jos
>
>>
>>> It seems simpler to have just a predicate. We need to define fewer
>>> things and the users will need to learn fewer things.
>>
>> Please look at the current state of the document, and let me know what
>> you think now...
>>
>> Axel
>>
>>> Best Jos
>>>
>>>>
>>>>
>>>> but michael was swinging the sword of damocles also here:
>>>>
>>>> > (The second group seems ok, but I would not be
>>>> > surprised if it also has problems.)
>>>>
>>>> Hope that this still works at least... any more insights/thoughts on
>>>> that?
>>>>
>>>> For the moment, I removed/reworded the "nasty" direction in the
>>>> equalities, and added your counterexample, but didn't add a
>>>> predicate for string-to-iri yet.
>>>>
>>>> Axel
>>>>
>>>>
>>>>> So, you prohibit stating equalities between IRIs.
>>>>>
>>>>>
>>>>> Best, Jos
>>>>>
>>>>>>
>>>>>>> (The second group seems ok, but I would not be
>>>>>>> surprised if it also has problems.)
>>>>>>
>>>>>> since the first one doesn't seem to have problems - at least not
>>>>>> the ones you mention - I don't expect so. :-)
>>>>>>
>>>>>>>> This is more elegant than having a predicate for one cast and
>>>>>>>> functions
>>>>>>>> for all others. Also, this form of equalities has the elegance that
>>>>>>>> additional equalities (e.g. by iris referrng to the same object)
>>>>>>>> are not
>>>>>>>> a problem at all with this.
>>>>>>>>
>>>>>>>> Accordingly, I changed the respective section on casting from an
>>>>>>>> d to
>>>>>>>> rif:iri to the following text:
>>>>>>>
>>>>>>> I am afraid you will have to change back :-)
>>>>>>
>>>>>> If you find a problem (apart from the above which isn't a problem
>>>>>> unless I got you wrong), then certainly I will.
>>>>>>
>>>>>> Axel
>>>>>>
>>>>>>>> ----------------------
>>>>>>>>
>>>>>>>> ==== <tt>rif:iri</tt> ====
>>>>>>>> {|
>>>>>>>> | style="background-color: #80FF80" rowspan="1" colspan="1" |
>>>>>>>> Editor's note: Casting from and to is still under discussion in
>>>>>>>> the working group since <tt>rif:iri</tt> is not a datatype. For
>>>>>>>> details, we refer to
>>>>>>>> [http://www.w3.org/mid/20080610143044.5698ABF57@nelson.w3.org
>>>>>>>> Issue-61]. The following is a strawman proposal which might
>>>>>>>> still change in future versions of this working draft.
>>>>>>>> |}
>>>>>>>>
>>>>>>>> <p>Additionally to the built-in cast functions for datatyes we
>>>>>>>> allow conversions from and to constants in the <tt>rif:iri</tt>
>>>>>>>> symbol space to and from <tt>xsd:string</tt>s following similar
>>>>>>>> considerations as conversions from and to <tt>xsd:anyURI</tt> in
>>>>>>>> <nowiki>[</nowiki>[[#ref-xpath-functions|XPath-Functions]]].
>>>>>>>> Technically speaking, we cannot proceed as with the other cast
>>>>>>>> functions, defining the semantics via a fixed mapping
>>>>>>>> '''''I'''''<sub>external</sub> for an external schema <tt> (
>>>>>>>> ?arg<sub>1</sub>; rif:iri ( ?arg<sub>1</sub> ) )</tt>, since
>>>>>>>> <tt>rif:iri</tt> is not a datatype with a fixed value space and
>>>>>>>> fixed lexical-to value mapping. Instead, casts between
>>>>>>>> <tt>rif:iri</tt> and <tt>xsd:string</tt> are defined via an
>>>>>>>> infinite set of axiomatic equalities in every RIF interpretation
>>>>>>>> as follows.</p>
>>>>>>>>
>>>>>>>> <p>The following equalities hold in every RIF interpretation for
>>>>>>>> each unicode string <i>a</i>:</p>
>>>>>>>> <ul>
>>>>>>>> <li><tt>xsd:string("</tt><i>a</i><tt>"^^rif:iri) =
>>>>>>>> "</tt><i>a</i><tt>"^^xsd:string</tt></li>
>>>>>>>> <li><tt>rif:iri("</tt><i>a</i><tt>"^^xsd:string) =
>>>>>>>> "</tt><i>a</i><tt>"^^xsd:iri</tt></li>
>>>>>>>> </ul>
>>>>>>>>
>>>>>>>> <p>Thus, although there is no explicit schema <tt> (
>>>>>>>> ?arg<sub>1</sub>; rif:iri ( ?arg<sub>1</sub> ) )</tt> in RIF,
>>>>>>>> casts between <tt>xsd:string<tt>s and <tt>rif:iri</tt>s are
>>>>>>>> still possible in RIF with the intended semantics that the IRI
>>>>>>>> represented by a particular string can be cast to this very
>>>>>>>> string and vice versa.
>>>>>>>> </p>
>>>>>>>> ----------------------
>>>>>>>>
>>>>>>>> I like this solution :-)
>>>>>>>>
>>>>>>>> Axel
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> and not bother with the preceding text in your message. It is
>>>>>>>>> much simpler that way.
>>>>>>>>>
>>>>>>>>> michael
>>>>>>>>>
>>>>>>>>> On Tue, 10 Jun 2008 19:22:10 +0200
>>>>>>>>> Jos de Bruijn <debruijn@inf.unibz.it> wrote:
>>>>>>>>>
>>>>>>>>>> Well, it was the only reasonable alternative I could think of
>>>>>>>>>> for casting IRIs to strings.
>>>>>>>>>>
>>>>>>>>>> I am personally actually not convinced that we even need such
>>>>>>>>>> a casting function, but there are some people who think it is
>>>>>>>>>> useful.
>>>>>>>>>>
>>>>>>>>>> Best, Jos
>>>>>>>>>>
>>>>>>>>>> Michael Kifer wrote:
>>>>>>>>>>> This makes iriToString a multivalued function (i.e., the same
>>>>>>>>>>> iri has several
>>>>>>>>>>> string interpretations). Is this what we want?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --michael On Tue, 10 Jun 2008 16:40:04 +0200
>>>>>>>>>>> Jos de Bruijn <debruijn@inf.unibz.it> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> See [1] and preceding the messages in the thread for a
>>>>>>>>>>>> description of the semantic problems. In [1] I also
>>>>>>>>>>>> proposed a casting predicate that seems to work.
>>>>>>>>>>>>
>>>>>>>>>>>> In summary, the biggest semantic challenge in casting IRIs
>>>>>>>>>>>> to strings is that several different IRIs may be mapped to
>>>>>>>>>>>> the same string. The following was my proposal:
>>>>>>>>>>>>
>>>>>>>>>>>> "Let I be an interpretation, let u be an element in the
>>>>>>>>>>>> domain of I, and
>>>>>>>>>>>> let {i1, ..., in} be the set of IRIs that denote u, i.e. for
>>>>>>>>>>>> each ij (1
>>>>>>>>>>>> <= j <= n), IC(ij)=u. IR(iriToString)(u,"ij")=t for (1 <= j
>>>>>>>>>>>> <= n);
>>>>>>>>>>>> IR(iriToString)(u,s)=f for every element s not in {"i1",
>>>>>>>>>>>> ..., "in"}."
>>>>>>>>>>>>
>>>>>>>>>>>> The rule set
>>>>>>>>>>>> iriToString("b"^^rif:iri,"b"^^xsd:string)
>>>>>>>>>>>>
>>>>>>>>>>>> is satisfied in every RIF interpretation.
>>>>>>>>>>>>
>>>>>>>>>>>> I think this predicates should be sufficient for most of the
>>>>>>>>>>>> use cases.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Best, Jos
>>>>>>>>>>>>
>>>>>>>>>>>> Rule Interchange Format Working Group Issue Tracker wrote:
>>>>>>>>>>>>> ISSUE-61 (IRI-Casts): Casting to/from rif:iri [DTB]
>>>>>>>>>>>>>
>>>>>>>>>>>>> http://www.w3.org/2005/rules/wg/track/issues/
>>>>>>>>>>>>>
>>>>>>>>>>>>> Raised by: Christopher Welty
>>>>>>>>>>>>> On product: DTB
>>>>>>>>>>>>>
>>>>>>>>>>>>> It is clear users of RIF dialects such as BLD will want to
>>>>>>>>>>>>> be able to convert (cast) instances of rif:iri to/from
>>>>>>>>>>>>> other datatypes, in particular strings and possibly rif:text.
>>>>>>>>>>>>>
>>>>>>>>>>>>> In general, a casting mechanism is not present in DTB and
>>>>>>>>>>>>> should be added.
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>
--
Dr. Axel Polleres, Digital Enterprise Research Institute (DERI)
email: axel.polleres@deri.org url: http://www.polleres.net/
Everything is possible:
rdfs:subClassOf rdfs:subPropertyOf rdfs:Resource.
rdfs:subClassOf rdfs:subPropertyOf rdfs:subPropertyOf.
rdf:type rdfs:subPropertyOf rdfs:subClassOf.
rdfs:subClassOf rdf:type owl:SymmetricProperty.
Received on Monday, 23 June 2008 06:17:40 UTC