- From: Richard Cyganiak <richard@cyganiak.de>
- Date: Wed, 18 May 2011 19:05:17 +0100
- To: Steve Harris <steve.harris@garlik.com>, Alex Hall <alexhall@revelytix.com>
- Cc: RDF Working Group WG <public-rdf-wg@w3.org>
Alex, Steve,
On 2011-05-13, at 19:20, Alex Hall wrote:
> 3. There are probably countless instances of the following logic deployed in existing systems (I cut-and-pasted this directly from my own code):
>
> public Literal(String lexicalValue, String language, URI datatype) {
> ...
> if (language != null && datatype != null) {
> throw new IllegalArgumentException("An RDF literal may not have both a language and a datatype.");
> }
> ...
> }
Implementations *could* choose to *internally* represent "xsd:string" as "no datatype". If you have existing code, then this is perhaps the easiest way to go, as it only requires changes in the input part (turn xsd:string into null) and when asking for the datatype of a literal (if null, return xsd:string). Since "no datatype" in concrete syntaxes would be syntactic sugar for xsd:string, that all works out fine.
On 13 May 2011, at 22:37, Steve Harris wrote:
> More concerning is code like:
>
> Literal(String lexicalValue, Resource lang_or_dt)
> {
> if (typeof(lang_or_dt) == Literal) {
> /* it has a language tag */
> } else if (typeof(lang_or_dt) == URI) {
> /* it has a datatype */
> } else {
> /* it has neither */
> }
> }
>
> We have a lot of such code.
Well, yeah, that's a bit awkward, but again you could choose to make it an internal convention that typeof(lang_or_dt) != URI means the type is really xsd:string.
Best,
Richard
Received on Wednesday, 18 May 2011 18:05:46 UTC