- From: Addison Phillips <addison@inter-locale.com>
- Date: Wed, 25 Apr 2007 14:03:44 +0100
- To: Eric Prud'hommeaux <eric@w3.org>
- CC: Felix Sasaki <fsasaki@w3.org>, jjc@hpl.hp.com, public-rdf-dawg-comments@w3.org, public-i18n-core@w3.org
Eric Prud'hommeaux wrote: >>>1. Language matching in RFC 4647 is defined in terms of "language >>>priority lists" made up of "language ranges". It may be useful to >>>incorporate this concept into SPARQL query. If necessary, you may >>>limit the list to a single range. >>> >>> > >That is the intention. Multiple ones may be expressed as multiple >langMatches tests: > > FILTER (langMatches(lang(?x), "en") || langMatches(lang(?x), "es")) > > > The problem I see with this is that implementations of matching may already be in terms of language priority lists. Also, note that the range can be an expression---taking its value, for example, from HTTP Accept-Language. Ideally I'd like to see a language priority list here. >>>2. The special range "*" usually matches all language tags, including >>>the empty tag. If it didn't, you would have the problem of not being >>>able to select contents with no tag except explicitly. That is, to >>>select everything, you'd need two queries: one for "*" and one for the >>>empty tag. (Obviously, omitting the langmatches statement has the same >>>effect, so your current text may be by design??) >>> >>> > >Yes, lang("abc") returns an empty string as giving type errors would >make the language more cumbersome. The use case for looking for >anything with a language tag drove langMatche("", "*") => false. > > Okay, that makes sense. But it should be documented clearly, since it isn't quite RFC 4647. This suggests, please note, something that I should take back to the LTRU WG at IETF (where 4647 is maintained). > > >>>3. You don't have a way of specifying the empty tag, or at least you >>>don't enumerate it. The empty tag only matches itself. That is: >>> >>>FILTER langMatches( lang(?title), "") >>> >>>only matches items with an xml:lang="" >>> >>>You should call this fact out. >>> >>> > >RDF literals with empty language tags are treated as literals >with no language tag. > http://www.w3.org/TR/rdf-syntax-grammar/#section-literal-node >so <rdf:Description><some:predicate xml:lang="">abc</...></...> >exactly equals > <rdf:Description><some:predicate >abc</...></...> > > > Yes, but you have no way to select *only* the items with no language tag? ("*" is available to find any non-empty value). I know that your examples are equal: I want to select those distinct from: <rdf:Description><some:predicate xml:lang="de">foo</...></...> >[[ >Returns true if language-range (second argument) matches language-tag >(first argument) according to the Basic Filter matching scheme in >Matching of Language Tags [RFC 4647] Section 3.3.1. language-range is >a basic language range per RFC 4647 Section 2.1. The special range "*" >matches any non-empty language-tag string. >]] > >I am content with either of these configurations, though slightly >prefer the one just uttered. If you are content with this wording, >please respond with a Subject: prefixed by "[CLOSED]". If not, let's >negotiate some more. > > The wording is not the big issue to me. It's fine as long as technically correct: it's editorial and I'm not concerned about how you phrase it so much. I would reverse the range and tag in the first sentence (as a nit). Maybe the following (text in {{{}}} is optional per above): -- Returns true if the language-tag (first argument) matches the language-range {{{s in the language priority list}}} (second argument). The matching scheme is based on Basic Filtering from Matching of Language Tags [RFC 4647, Section 3.3.1], with some minor modifications. The special range "*" matches any non-empty language-tag string. Unlike in RFC 4647, it does not match the empty string. The empty range matches only items with an empty language-tag or lacking the language attribute altogether. --- ~Addison
Received on Wednesday, 25 April 2007 13:04:19 UTC