- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Tue, 22 Aug 2006 15:02:16 +0200
- To: "Seaborne, Andy" <andy.seaborne@hp.com>
- Cc: dawg mailing list <public-rdf-dawg@w3.org>
On Tue, Aug 22, 2006 at 11:25:33AM +0100, Seaborne, Andy wrote:
>
>
>
> Eric Prud'hommeaux wrote:
> >On Mon, Aug 21, 2006 at 03:06:52PM +0100, Seaborne, Andy wrote:
> >>
> >>
> >>Eric Prud'hommeaux wrote:
> >>>On Mon, Aug 14, 2006 at 01:08:03PM +0200, Eric Prud'hommeaux wrote:
> >>>http://www.w3.org/2001/sw/DataAccess/rq23/rq24#tests v1.14 has a new
> >>>draft of the Value Testing section. This does not include the
> >>>extensible datatypes support (but certainly makes it easier to add).
> >>>This version is intended to include only editorial changes from the CR
> >>>version.
> >>>
> >>>> [DONE] ACTION: EricP to respond to PatH's new test with a proof of
> >>>> whether it's monotonic to extended datatype support [recorded in
> >>>> [25]http://www.w3.org/2006/08/08-dawg-minutes.html#action01]
> >>>> <fred> literal = literal: true or error
> >>>>
> >>>> <fred> iri = iri: true or false
> >>>>
> >>>> <fred> bnode = bnode: true or false
> >>>>
> >>>> <fred> allother cells always false
> >>>>
> >>>> 2=3
> >>>>
> >>>> <AndyS> Yes, Fred - that's the table I was thing of.
> >>>In 1.14, I've updated RDFterm-equal to the following:
> >>>
> >>>http://www.w3.org/2001/sw/DataAccess/rq23/rq24#func-RDFterm-equal
> >>>[[
> >>>Returns TRUE if term1 and term2 are the same RDF term as defined in
> >>>Resource Description Framework (RDF): Concepts and Abstract Syntax
> >>>[CONCEPTS]; produces a type error if the arguments are both literal
> >>>but are not the same RDF term;
> >>Isn't this a bit circular as to "same RDF term"? Something about the
> >>equality of the three parts of lexical form, datatype and lang tag (for
> >>literals) etc etc.
> >
> >That comes from the following text:
> >[[
> >term1 and term2 are the same if any of the following is true:
> >
> > * term1 and term2 are equivalent IRIs as defined in 6.4 RDF URI
> > References.
> > * term1 and term2 are equivalent literals as defined in 6.5.1
> > Literal Equality.
> > * term1 and term2 are the same blank node as described in 6.6
> > Blank Nodes.
> >]]
>
> Yes - agreed - I was pointing out the text, before that is worded in a
> circular fashion.
>
> """produces a type error if the arguments are both literal but are not the
> same RDF term;"""
>
> Being before, it's confusing.
The very first phrase in the description of RDFterm-equal is
[[
Returns TRUE if term1 and term2 are the same RDF term as defined in
Resource Description Framework (RDF): Concepts and Abstract Syntax
[CONCEPTS]
]]
>
> >
> >>>returns FALSE otherwise. term1 and
> >>>term2 are the same if any of the following is true:
> >>>
> >>> * term1 and term2 are equivalent IRIs as defined in 6.4 RDF URI
> >>> References.
> >>> * term1 and term2 are equivalent literals as defined in 6.5.1
> >>> Literal Equality.
> >>> * term1 and term2 are the same blank node as described in 6.6
> >>> Blank Nodes.
> >>>]]
> >>>
> >>>I added the "; produces a type error if the arguments are both literal
> >>>but are not the same RDF term; returns FALSE otherwise" bit. The rest
> >>>was already there.
> >>Suggestion for a name for this : "unknown-equals" or
> >>"general-value-equals" and note that "=" may have been intercepted by a
> >>datatype specific definition of "=".
> >
> >Earlier in 11.3.1 Operator Extensibility:
> >[[
> >Extended SPARQL implementations may support additional associations
> >between operators and operator functions;
> >]]
>
> I still suggest that the name be changed to "general-value-equals" or some
> such. The note was to refer back to the text you quote to be clear. I'm
> not saying the text as given was wrong, but that it could be clearer if it
> reiterated that the "=" symbol may have been overridden.
>
> >
> >
> >>There should be text to give examples; and also for !=.
> >>
> >>Let's reserve "term-equals" language for a syntactic test and not having
> >>it generate an error because "term equality" suggests syntax (to me at
> >>least) without regard to value.
> >>
> >>An operator such as "sameTerm(?x, ?y)" would provide direct access to it
> >>(it's short hand for something like:
> >>
> >>( isURI(?x) && isURI(?y) && str(?x) = str(?y) ||
> >>( isBlank(?x) && isBlank(?y) && ... same labels .... ) ||
> >>( isLiteral(?x) && isLiteral(?y) &&
> >> str(?x) = str(?y) &&
> >> (
> >> (lang(?x) = "" && lang(?y) = "" && # Same datatype, if any
> >> ( datatype(?x) = datatype(?y) || true )
> >> ||
> >> ( lang(?x) = lang(?y) ) # Same lang, if any
> >> )
> >>)
> >>
> >>The literal part is complex (and probably not correct in the above)
> >>because of lang tags and datatypes (and its asymmetric in the treatment
> >>of no lang tag and no datatype).
> >
> >Ah, good. Had thought about looking for this equivalence.
> >
> >>There is no way to get the label of a bNode (which is OK).
> >>
> >>I assume datatype("eric"@fr) is an error - I can't find anything in rq24
> >
> >Hmm, I expect that presently, it's not an error; it's just not usefull
> >to write it 'cause it won't match valid RDF data. I guess we've gone
> >with the more restrictive approach on other counts, like literal
> >subjects, so the precedent is there to say that is specifically malformed.
>
>
> On IRC, Eric said that datatype() has signature typed literal and
>
> datatype("plain literal") is an error.
>
> RDF MT (rules xsd1a, xsd 1b) allow plain literals and xsd:strings to be
> used interchangably, making the value spaces of plain literals and
> xsd:strings the same.
>
> >
> >>>> <AndyS> bNode = literal (not bNode in query) may be valid
> >>>>
> >>>> <AndyS> Separate sameLiteral operator.
> >>>>
> >>>> <AndyS> if we want a syntactic comparision
> >>>>
> >>>> <AndyS> "(x,y)"^^:geo
> >>>>
> >>>> <AndyS> If you want help with this, do ask - I'm the one keen to have
> >>>> this extensibility so I feel responsible here.
> >>>>
> >>>> <kendallclark> ACTION: EricP to redraft section 11 to support
> >>>> extensible datatypes [recorded in
> >>>> [18]http://www.w3.org/2006/08/08-dawg-minutes.html#action08]
> >>>To this end, I propose the following addendum to the derived types list:
> >>>[[
> >>>Extended SPARQL implementations may treat additional types as being
> >>>derived from numeric types.
> >>>]]
> >>There is no need to restrict things to numerics. Any new value space is
> >>possible. Examples:
> >>
> >>1/ xsd:dates
> >>2/ Things with units.
> >> For a sufficiently knowledgeable processor:
> >> "273"^^:kelvin should not compare with "273^^xsd:integer [*]
> >> "273"^^:kelvin should compare with "+273^^:kelvin
> >> "275"^^:kelvin should compare with "2^^:centigrade
> >>
> >>[*] Let's not confuse record temperature as a number, and recording it as
> >>a unit datatype. :kelvin(273) would be needed.
> >
> >The text, in context, does not limit SPARQL implementations to
> >extending numeric datatypes. (This is the pain of not just committing
> >the text and having people look at it in situ.) Because numerics have
> >a prescribed hierarchy in SPARQL, I needed to enumerate the minimally
> >supported numeric data types. The above addendum points out that
> >implementations may add to that list; meaning, respect the subtype
> >substitution rules even with regards to the extended types.
> >
> >Adding support for kelvin, date or other primitive data types would be
> >addresed by adding new associations between operators and operator
> >functions.
> >
> >One piece missing in the puzzle is the subtypes of these types. This
> >is, I believe, best addressed by altering 11.3 ¶2 to not scope the
> >subtype substitution to numerics:
> >[[
> >SPARQL follows XPath's scheme for type promotions and subtype
> >substitution for arguments to operators (see XML Path Language (XPath)
> >2.0 [XPATH20] for defintions of numeric type promotions and subtype
> >substitution). The XPath Operator Mapping rules for numeric operands
> >{xs:integer, xs:decimal, xs:float, xs:double, and types derived from a
> >numeric type} apply to SPARQL operators as well. Some of the operators
> >are associated with nested function expressions,
> >e.g. fn:not(op:numeric-equal(A, B)). Note that per the XPath
> >definitions, fn:not and op:numeric-equal produce an error if their
> >argument is an error.
> >]]
> >PROPOSED: to adopt the above text. An illustrative example is:
> >
> >Type Extensions:
> > <xs:schema
> > targetNamespace="http://example.com/wannadate"
> > xmlns:xs="http://www.w3.org/2001/XMLSchema">
> > <xs:simpleType id="Canonical21stCenturyDate">
> > <xs:restriction base="xs:date">
> > <xs:pattern value="2[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-"/>
> > </xs:restriction>
> > </xs:simpleType>
> > </xs:schema>
> >
> >Data:
> > @prefix dt: <http://example.com/wannadate> .
> > @prefix meeting: <http://example.com/meeting#> .
> > meeting:m1 meeting:date "2005-02-03"^^dt:Canonical21stCenturyDate .
> > meeting:m2 meeting:date "2006-02-01"^^dt:Canonical21stCenturyDate .
> >
> >Query:
> > PREFIX dt: <http://example.com/wannadate>
> > PREFIX meeting: <http://example.com/meeting#>
> > SELECT ?m2
> > WHERE { ?m1 meeting:date ?m1Date .
> > ?m2 meeting:date ?m2Date
> > FILTER ( ?m1Date > m2Date ) }
> >
> >Unextended Result:
> > +-----+
> > | ?m2 |
> > +-----+
> > +-----+
> >
> >Extended Result:
> > +------------+
> > | ?m2 |
> > +------------+
> > | meeting:m2 |
> > +------------+
> >
> >>>and a new minor section following the operator table:
> >>>[[
> >>>11.3.1 Operator Extensibility
> >>>
> >>>Extended SPARQL implementations may support additional associations
> >>>between operators and operator functions; this amounts to adding rows
> >>>to the table above. No additional operator support may yield a result
> >>>that replaces any result other than a type error in an unextended
> >>>implementation. The consequence of this rule is that extended SPARQL
> >>>implementations will produce at least the same solutions as an
> >>>unextended implementation, and may, for some queries, produce more
> >>>solutions.
> >>>]]
> >>The text "and may, for some queries, produce more solutions" won't be
> >>true because we have logical not.
> >
> >Can you find a counter example?
>
> The problem is using the word "query", not restricted to "expressions".
> The usual OPTIONAL/BOUND trick is always going to provide loopholes because
> it's outside a FILTER.
>
> Data:
> :x :p "45"^^:dtype .
>
> Query:
> ASK { OPTIONAL { :x :p ?v . FILTER ( ?v < "67"^^:dtype ) }
> FILTER (bound(?v))
Unextended Result:
+----+
| no |
+----+
Type Extensions:
<xs:schema
targetNamespace="http://example.com/oddness"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType id="dtype">
<xs:restriction base="xs:decimal">
<xs:pattern value="[\-+]?[0-9]*[02468]"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Extended Result:
+-----+
| yes |
+-----+
I don't see this as a counter example.
> I've just noticed that "45"^^:dtype <= "45"^^:dtype is error by your
> proposed design but can be true by explictily having value-compare as I
> described. I take back my comment that I thought your proposal was the
> same.
The WG truth table and discussion did not take into account anything
about the decomposition of <= into < and =. We can take up adding
that, if you like, but I don't see where my proposed implementation of
the WG discussion differs in any way from the semantics discussed
during the telecon.
> >>>I think this behaves exactly as sop:value-compare would.
> >>>
> >>>
> >>>Cost:
> >>>
> >>>Is the cost of using the same operator for value comparison and symbol
> >>>comparison less than that of making users use a different operator for
> >>>RDFterm-equal? I think it's a matter of taste. The wierd case in this
> >>>solution is that you can't negate a syntactic literal equivilence
> >>>test.
> >>This isn't symbol comparison any more because the backstop "=" does not
> >>work on all symbol combinations (unknown datatypes, different lexical
> >>forms).
> >
> >Again, I have to ask for a counter example.
>
> My point was that the app may want access to the syntactic form, even when
> it there is a value form (e.g. validation). Overtaken by your other email
> so I'll reply to that.
>
> Andy
>
> >
> >>>Data:
> >>> <x> <p> "II"^^roman:numeral .
> >>>
> >>>Query1:
> >>> ASK { ?x ?p ?v
> >>> FILTER (?v = "IV"^^roman:numeral) }
> >>>Result1: no
> >>>
> >>>Query1:
> >>> ASK { ?x ?p ?v
> >>> FILTER (?v != "IV"^^roman:numeral) }
> >>>Result1: no
> >>>
> >>>Of course, and extended SPARQL implementation may give you a yes for
> >>>the latter but the issue that will make users cock their heads shows
> >>>up in the unextended implementation.
> >>That's inevitable with monotonicity + extensible datatypes + ASK masking
> >>error vs false. And that's OK.
> >>
> >>I still think explicitly talking about value spaces (a paragraph) will
> >>make it clearer. Then say "=" etc works on same-value space pairs.
> >>
> >>If you want, I'll write this text.
> >
> >That would probably help. In every concept I've had for it, the extra
> >level of indirection wasn't helpful.
>
--
-eric
home-office: +1.617.395.1213 (usually 900-2300 CET)
+33.1.45.35.62.14
cell: +33.6.73.84.87.26
(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.
Received on Tuesday, 22 August 2006 13:01:16 UTC