Re: Rethinking how literals are defined

On 18/11/13 19:48, Markus Lanthaler wrote:
> On Monday, November 18, 2013 7:35 PM, Andy Seaborne wrote:
>> On 18/11/13 14:38, Markus Lanthaler wrote:
>>> One more thing :-)
>>>
>>> On Monday, November 18, 2013 3:33 PM, Markus Lanthaler wrote:
>>>> --------------%<-----------------------
>>>> Literals are used for values such as strings, numbers, and dates.
>>>>
>>> [...]
>>>>
>>>> A literal is a language-tagged string if the third element is present.
>>>> Lexical representations of language tags MAY be converted to lower
>>>> case.
>>>> The value space of language tags is always in lower case.
>>>
>>> A literal is a *typed value* if its datatype IRI does not equal
>>> rdf:langString.
>>
>> ?? It's always typed in RDF 1.1
>
> Right. Literals consist of language-tagged strings and things that are
> literals but not language-tagged strings. I would like to give those things
> a name and proposed "typed value".
>
>
>> I think it's clearer if we say that literals always have a datatype.
>
> Isn't that obvious from the description in the other email ("A literal in an
> RDF graph consists of two or three elements...")?

No, not obvious if there is something called a "typed value" that is 
different from having a datatype and not related to "values"

Why do we need terminology for "not rdf:langString" -- why not 
terminology for "not xsd:string" which is special in TTL syntax forms as 
well:

:x :p "foo" .
:x :p "foo"@en .
:x :p "foo"^^my;type .


I find it very confusing to have "datatypes" and "typed values" and 
"values" being different concepts.  "typed values" is not the value of a 
literal either as it is due to abstract syntax not the value space.

And

:x :p "foo".

is a typed value without the (data)type showing.

>
>
>>> This would make it much easier to talk about "literals which are not
>>> language-tagged strings".
>>
>> Previous email:
>>>   - if and only if the datatype IRI is rdf:langString, optionally a
>>>     non-empty language tag as defined by [BCP47]. The language tag MUST
> be
>>>     well-formed according to section 2.2.9 of [BCP47].
>>
>> If it has a datatype of rdf:langString then it must have a language
>> tag.
>>
>> We ought to be clear about:
>>
>> "foo"^^rdf:langString
>
> This is not a language-tagged string but still a literal as far as I
> understand it. Is that correct?

No idea - that's why I'm asking.

Your text which say says there is an optional non-empty language tag and 
it must be [BCP47] if the datatype is rdf:langString.

This example fall outside that but it has a datatype IRI of 
rdf:langString so it's covered by the "if and only if".

I propose

1/ If the datatype is rdf:langString then there is a language tag string.
2/ if the language tag string is not empty, it must be BCP47 syntax.

I think it's important all impls do the same thing. Also, this is what 
SPARQL supports (since 1.0) although was motivated by RDF/XML using 
xml:lang="" for switching the language tag off if set further out.

	Andy


>
>
> --
> Markus Lanthaler
> @markuslanthaler
>
>

Received on Monday, 18 November 2013 21:07:24 UTC