- From: Steve Harris <steve.harris@garlik.com>
- Date: Mon, 21 May 2012 16:36:30 +0100
- To: Andy Seaborne <andy.seaborne@epimorphics.com>
- Cc: public-rdf-dawg@w3.org
+1 On 2012-05-21, at 14:32, Andy Seaborne wrote: > Yes - having a fixed result for the "no match" seems sensible. > > F&O calls out the case of the empty string for second argument. Reading the -bfore and -after cases, I think it is defines what is mean by a match of the empty string (after returns the whole thing) and it is menat to be a match. The argument type rules would apply in the SPARQL case. > > Proposed change (draft - the editor will wordsmith as needed when the changes are made): > > strbefore: > > """ > The function returns a literal of the same kind > (simple literal, plain literal same language tag, xsd:string) > as the first argument arg1. The lexical form of > the result is the substring of the value of arg1 > that precedes in arg1 the first occurrence of > the lexical form of arg2; > otherwise the lexical form of the result is the empty string. > If the lexical form of arg2 is the empty string, > the lexical form of the result is the empty string. > """ > ==> > """ > For compatible arguments, if the lexical part of the second argument occurs as a substring of the lexical part of the first argument, the function returns a literal of the same kind > as the first argument arg1 (simple literal, plain literal same language tag, xsd:string). The lexical form of > the result is the substring of the value of arg1 > that precedes in arg1 the first occurrence of > the lexical form of arg2. If the lexical form of arg2 is the empty string, this is considered to be a match and the lexical form of the result is the empty string" > > If there is no such occurrence, an empty simple literal is returned. > """ > > for strafter, change 'precedes' to 'follows' and the return is the whole lexical form for the arg2 in the empty string case. > > + expand the examples > > strbefore("abc"@en, "z"@en) -> "" > strbefore("abc"@en, "z") -> "" > strbefore("abc"@en, ""@en) -> ""@en > strbefore("abc"@en, "") -> ""@en > > strafter("abc"@en, "z"@en) -> "" > strafter("abc"@en, "z") -> "" > strafter("abc"@en, ""@en) -> "abc"@en > strafter("abc"@en, "") -> "abc"@en > > Andy > > On 24/04/12 10:29, Steve Harris wrote: >> Hi all, >> >> [sorry if this is covered in the testcases, I still don't have a harness for them] >> >> So I'm just looking at STRBEFORE(), http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#func-strbefore >> >> The text says: >> >> “The function returns a literal of the same kind (simple literal, plain literal same language tag, xsd:string) as the first argument arg1.” >> >> However - does this trump the statement in http://www.w3.org/TR/xpath-functions/#func-substring-before that under some circumstances fn:substring-before “returns the zero-length string”. > > Not such "trump" because the XSD function does not have to worry about lang tags or xsd:string/simple literals. > >> >> I suspect that the right behaviour is for the function to return "" under those conditions - both as it makes more sense logically, and to make error handing in queries simpler. >> >> e.g. >> STRBEFORE("foo"@en-GB, "bar") → ""@en-GB >> is somewhat misleading, and a little tricky to test for e.g. you'd have to use >> STR(STRBEFORE(?string, "\t")) = "" >> in order to catch non-matches >> >> I /think/ what I'd want as a user is: >> >> arg1 arg2 result comment >> ------------- ------------ ---------- ----------------------------------------------------- >> "foo"@fr "o" "f"@fr "normal" case >> "foo"@fr "bar" "" exception case >> "foo"@fr "foo" ""@fr the empty lang-tagged string is before >> "foo"@fr "" "" exception case >> >> i.e. the return values in the exception cases are as per fn:substring-before, and the "literal of the same kind" only applies to the non-excpetion cases. >> >> But maybe that's confusing too? >> >> FWIW, I've currently implemented "literal of the same kind" only, and have no end-user experience. >> >> Thoughts? >> >> Cheers, >> Steve >> > -- Steve Harris, CTO Garlik, a part of Experian 1-3 Halford Road, Richmond, TW10 6AW, UK +44 20 8439 8203 http://www.garlik.com/ Registered in England and Wales 653331 VAT # 887 1335 93 Registered office: Landmark House, Experian Way, Nottingham, Notts, NG80 1ZZ
Received on Monday, 21 May 2012 15:37:26 UTC