rdf:PlainLiteral (ISSUE-12)

On Sun, 2011-04-17 at 12:13 +0100, Steve Harris wrote:
> On 2011-04-17, at 12:02, Ivan Herman wrote:
> > 
> > On Apr 17, 2011, at 12:49 , Richard Cyganiak wrote:
> > 
> >> On 17 Apr 2011, at 08:45, Ivan Herman wrote:
> >>> My understanding is that rdf:plainLiteral is a Datatype (ie, it can be used as part of datatype reasoning in RDF, OWL, or RIF) which is not the case of plain literals,
> >> 
> >> Yes.
> >> 
> >>> and its value space[2] are pairs of the form <string,language-tag>
> >> 
> >> Not quite. According to [2], the value space are all <string,lang-tag> pairs *and* all strings.
> >> 
> >>> Ie, datatype("chat"@en) would return rdf:PlainLiteral.
> >> 
> >> This would be consistent with the definition of the datatype. But since the value space of rdf:PlainLiteral also contains all simple strings, the same could be said for returning
> >> 
> >>  datatype("chat") == rdf:PlainLiteral
> > 
> > Correct. Would that create huge problems?
> 
> Well, rdf:PlainLiteral is not supposed to appear in RDF data, as I understand it.

It's not supposed to appear as the datatype of a literal (since RDF
already has a way to do plain literals) but it is supposed to appear as
a range -- that's much of what it's for -- as a way to say the range is
a plain literal.

Note that it allows for range constraints on the language of the
literal, such as the value must have a language tag, or must be in
certain languages.  

You could also say it must be a plain literal without a language tag,
but you'd need to define your own class.  Instead of:

        :prop rdfs:range xs:string.

you'd say something like

        :prop rdfs:range :PlainString.
        
and then define :PlainString (or refer to some on-the-web definition, if
you're in a situation where Linked Data is okay).   My OWL isn't very
good, but looking at the Primer I guess the definition would be
something like:

        :LangString owl:equivalentClass [
                rdf:type rdfs:Datatype;
                owl:onDatatype rdf:PlainLiteral;
                owl:withRestrictions ( [ rdf:langRange "*" ] )
        ].
        
        :PlainString owl:equivalentClass [
                rdf:type  rdfs:Datatype;
            owl:intersectionOf (
                rdf:PlainLiteral
                [ rdf:type  rdfs:Datatype;
                  owl:datatypeComplementOf  :LangString ] 
             )
           ] .


Of course, this is OWL not SPARQL.   I don't see any good way to deal
with this in SPARQL.    I don't really understand how datatype() and
such are supposed to work in SPARQL -- are stores really supposed to
remember which values came in as xs:int vs xs:integer?

    -- Sandro


>  It would also change existing SPARQL queries in a way that users may not expect.
> 
> - Steve
> 

Received on Sunday, 17 April 2011 16:55:27 UTC