From RDF Working Group Wiki
This is a proposal for addressing the following time-permitting item from the charter:
Reconcile various forms of string literals: at the moment we have plain literals, rdf:plainLiteral, and xsd:string literals. They are very very close to one another but they are officially different. In practice this means that, eg, SPARQL queries have to have a three branch UNION to handle all of these. Worth looking at some sort of a reconciliation of these.
Changes to RDF Concepts
(Note: this is not proposed spec text, but an attempt at a precise description of a technical solution.)
§1 There are no plain literals in the RDF abstract syntax. There are only typed literals.
§2 There is a datatype rdf:PlainLiteral. It can be used to express Unicode strings with and without language tags.
§3 RDF serializations MUST NOT expose rdf:PlainLiteral typed literals directly. Instead, they MUST provide syntactic features (sugar, if you like) that allows serialization of these literals as plain Unicode strings with an optional language tag. Example: "foo"@en instead of "foo@en"^^rdf:PlainLiteral
§4 RDF APIs MUST NOT expose rdf:PlainLiteral typed literals directly. Instead, they MUST provide access to these literals in the form of a plain Unicode string, with separate access to the optional language tag.
§5 There is a datatype xsd:string. Its values are Unicode strings. However, the xsd:string MUST NOT be used in actual typed literals. Instead, an rdf:PlainLiteral typed literal without language tag MUST be used.
§6 RDF serializations MAY allow the expression of xsd:string typed literals, but these MUST be converted to the rdf:PlainLiteral form upon parsing. The same applies to RDF APIs. Example: "foo"^^xsd:string and "foo" are both parsed to an rdf:PlainLiteral with Unicode string "foo" and no language tag.
§7 Some RDF APIs or query languages provide access to the datatype IRI of a literal. For rdf:PlainLiterals without language tag, the datatype xsd:string MUST be reported. For rdf:PlainLiterals with a language tag, the datatype rdf:PlainLiteral MUST be reported. Note: Legacy implementations may report “no datatype” in the cases above.
§8 Note: xsd:string and rdf:PlainLiteral MAY be used in rdfs:range statements to indicate that the objects of triples are Unicode strings without language tag (xsd:string), or Unicode string with or without a language tag (rdf:PlainLiteral).
Changes to RDF syntaxes
In all syntax specs: Declare plain literal syntax as syntactic sugar for rdf:PlainLiteral typed literals. Declare that xsd:string typed literals must be converted to rdf:PlainLiterals on parsing.
In SPARQL: @@ ah fuck this, gets too messy. Let's try StringLiterals/EntailmentProposal …